<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc strict='yes'?>
<?rfc iprnotified='no'?>
<rfc category="std" docName="draft-templin-aerolink-72.txt" ipr="trust200902"
     obsoletes="rfc5320, rfc5558, rfc5720, rfc6179, rfc6706">
  <front>
    <title abbrev="AERO">Asymmetric Extended Route Optimization (AERO)</title>

    <author fullname="Fred L. Templin" initials="F. L." role="editor"
            surname="Templin">
      <organization>Boeing Research &amp; Technology</organization>

      <address>
        <postal>
          <street>P.O. Box 3707</street>

          <city>Seattle</city>

          <region>WA</region>

          <code>98124</code>

          <country>USA</country>
        </postal>

        <email>fltemplin@acm.org</email>
      </address>
    </author>

    <date day="07" month="October" year="2016"/>

    <keyword>I-D</keyword>

    <keyword>Internet-Draft</keyword>

    <abstract>
      <t>This document specifies the operation of IP over tunnel virtual links
      using Asymmetric Extended Route Optimization (AERO). Nodes attached to
      AERO links can exchange packets via trusted intermediate routers that
      provide forwarding services to reach off-link destinations and
      redirection services for route optimization. AERO provides an IPv6
      link-local address format that supports operation of the IPv6 Neighbor
      Discovery (ND) protocol and links IPv6 ND to IP forwarding. Admission
      control and address/prefix provisioning are supported by the Dynamic
      Host Configuration Protocol for IPv6 (DHCPv6), while mobility management
      and route optimization are naturally supported through dynamic neighbor
      cache updates. Although DHCPv6 and IPv6 ND messaging are used in the
      control plane, both IPv4 and IPv6 are supported in the data plane. AERO
      is a widely-applicable tunneling solution especially well suited to
      mobile Virtual Private Networks (VPNs) and other applications as
      described in this document.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>This document specifies the operation of IP over tunnel virtual links
      using Asymmetric Extended Route Optimization (AERO). The AERO link can
      be used for tunneling to neighboring nodes over either IPv6 or IPv4
      networks, i.e., AERO views the IPv6 and IPv4 networks as equivalent
      links for tunneling. Nodes attached to AERO links can exchange packets
      via trusted intermediate routers that provide forwarding services to
      reach off-link destinations and redirection services for route
      optimization <xref target="RFC5522"/>.</t>

      <t>AERO provides an IPv6 link-local address format that supports
      operation of the IPv6 Neighbor Discovery (ND) <xref target="RFC4861"/>
      protocol and links IPv6 ND to IP forwarding. Admission control and
      address/prefix provisioning are supported by the Dynamic Host
      Configuration Protocol for IPv6 (DHCPv6) <xref target="RFC3315"/>, while
      mobility management and route optimization are naturally supported
      through dynamic neighbor cache updates. Although DHCPv6 and IPv6 ND
      messaging are used in the control plane, both IPv4 and IPv6 can be used
      in the data plane.</t>

      <t>A Client's AERO interface can be configured over multiple underlying
      interfaces. From the standpoint of IPv6 ND, AERO interface neighbors
      therefore may appear to have multiple link-layer addresses. Each
      link-layer address is subject to change due to mobility, and link-layer
      address changes are signaled by IPv6 ND messaging the same as for any
      IPv6 link.</t>

      <t>AERO is applicable to a wide variety of use cases. For example, it
      can be used to coordinate the Virtual Private Network (VPN) links of
      mobile nodes (e.g., cellphones, tablets, laptop computers, etc.) that
      connect into a home enterprise network via public access networks using
      services such as OpenVPN <xref target="OVPN"/>. AERO is also applicable
      to aviation applications for both manned and unmanned aircraft where the
      aircraft is treated as a mobile node that can connect an Internet of
      Things (IoT). Numerous other use cases are also in scope.</t>

      <t>The AERO mobile node tunneling and Border Gateway Protocol
      (BGP)-based core routing system can further be employed either in
      conjunction or separately according to the specific use case (see <xref
      target="variant"/>). This allows for correct fitting of the (modular)
      AERO components to match the specific application. The remainder of this
      document presents the AERO specification.</t>
    </section>

    <section anchor="terminology" title="Terminology">
      <t>The terminology in the normative references applies; the following
      terms are defined within the scope of this document:</t>

      <t><list style="hanging">
          <t hangText="AERO link"><vspace/>a Non-Broadcast, Multiple Access
          (NBMA) tunnel virtual overlay configured over a node's attached IPv6
          and/or IPv4 networks. All nodes on the AERO link appear as
          single-hop neighbors from the perspective of the virtual overlay
          even though they may be separated by many underlying network hops.
          The AERO mechanisms can also operate over native link types (e.g.,
          Ethernet, WiFi etc.) when a tunnel virtual overlay is not
          needed.</t>

          <t hangText="AERO interface"><vspace/>a node's attachment to an AERO
          link. Since the addresses assigned to an AERO interface are managed
          for uniqueness, AERO interfaces do not require Duplicate Address
          Detection (DAD) and therefore set the administrative variable
          DupAddrDetectTransmits to zero <xref target="RFC4862"/>.</t>

          <t hangText="AERO address"><vspace/>an IPv6 link-local address
          constructed as specified in <xref target="aero-address"/>.</t>

          <t hangText="AERO node"><vspace/>a node that is connected to an AERO
          link.</t>

          <t hangText="AERO Client (&quot;Client&quot;)"><vspace/>a node that
          issues DHCPv6 messages to receive IP Prefix Delegations (PDs) from
          one or more AERO Servers. Following PD, the Client assigns an AERO
          address to the AERO interface for use in IPv6 ND exchanges with
          other AERO nodes. A node that acts as a Client on one AERO interface
          can also act as an AERO Server on a different AERO interface.</t>

          <t hangText="AERO Server (&quot;Server&quot;)"><vspace/>a node that
          configures an AERO interface to provide default forwarding services
          for AERO Clients. The Server assigns an administratively provisioned
          IPv6 link-local unicast address to the AERO interface to support the
          operation of DHCPv6 and the IPv6 ND protocol. An AERO Server can
          also act as an AERO Relay.</t>

          <t hangText="AERO Relay (&quot;Relay&quot;)"><vspace/>a node that
          configures an AERO interface to relay IP packets between nodes on
          the same AERO link and/or forward IP packets between the AERO link
          and the native Internetwork. The Relay assigns an administratively
          provisioned IPv6 link-local unicast address to the AERO interface
          the same as for a Server. An AERO Relay can also act as an AERO
          Server.</t>

          <t hangText="ingress tunnel endpoint (ITE)"><vspace/>an AERO
          interface endpoint that injects encapsulated packets into an AERO
          link.</t>

          <t hangText="egress tunnel endpoint (ETE)"><vspace/>an AERO
          interface endpoint that receives encapsulated packets from an AERO
          link.</t>

          <t hangText="underlying network"><vspace/>a connected IPv6 or IPv4
          network routing region over which the tunnel virtual overlay is
          configured.</t>

          <t hangText="underlying interface"><vspace/>an AERO node's interface
          point of attachment to an underlying network.</t>

          <t hangText="link-layer address"><vspace/>an IP address assigned to
          an AERO node's underlying interface. When UDP encapsulation is used,
          the UDP port number is also considered as part of the link-layer
          address. Link-layer addresses are used as the encapsulation header
          source and destination addresses.</t>

          <t hangText="network layer address"><vspace/>the source or
          destination address of the encapsulated IP packet.</t>

          <t hangText="end user network (EUN)"><vspace/>an internal virtual or
          external edge IP network that an AERO Client connects to the rest of
          the network via the AERO interface.</t>

          <t hangText="AERO Service Prefix (ASP)"><vspace/>an IP prefix
          associated with the AERO link and from which more-specific AERO
          Client Prefixes (ACPs) are derived.</t>

          <t hangText="AERO Client Prefix (ACP)"><vspace/>an IP prefix derived
          from an ASP and delegated to a Client, where the ACP prefix length
          must be no shorter than the ASP prefix length and must be no longer
          than 64 for IPv6 or 32 for IPv4.</t>

          <t hangText="base AERO address"><vspace/>the lowest-numbered AERO
          address from the first ACP delegated to the Client (see <xref
          target="aero-address"/>).</t>
        </list>Throughout the document, the simple terms "Client", "Server"
      and "Relay" refer to "AERO Client", "AERO Server" and "AERO Relay",
      respectively. Capitalization is used to distinguish these terms from
      DHCPv6 client/server/relay <xref target="RFC3315"/>.</t>

      <t>The terminology of DHCPv6 <xref target="RFC3315"/> and IPv6 ND <xref
      target="RFC4861"/> (including the names of node variables and protocol
      constants) applies to this document. Also throughout the document, the
      term "IP" is used to generically refer to either Internet Protocol
      version (i.e., IPv4 or IPv6).</t>

      <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 <xref target="RFC2119"/>.
      Lower case uses of these words are not to be interpreted as carrying
      RFC2119 significance.</t>
    </section>

    <section anchor="aerospec"
             title="Asymmetric Extended Route Optimization (AERO)">
      <t>The following sections specify the operation of IP over Asymmetric
      Extended Route Optimization (AERO) links:</t>

      <section anchor="aerolink" title="AERO Link Reference Model">
        <t><figure anchor="chaining-fig" title="AERO Link Reference Model">
            <artwork><![CDATA[                           .-(::::::::)
                        .-(:::: IP ::::)-.
                       (:: Internetwork ::)
                        `-(::::::::::::)-'
                           `-(::::::)-' 
                                |
    +--------------+   +--------+-------+   +--------------+
    |AERO Server S1|   | AERO Relay R1  |   |AERO Server S2|
    |  Nbr: C1; R1 |   |   Nbr: S1; S2  |   |  Nbr: C2; R1 |
    |  default->R1 |   |(P1->S1; P2->S2)|   |  default->R1 |
    |    P1->C1    |   |      ASP A1    |   |    P2->C2    |
    +-------+------+   +--------+-------+   +------+-------+
            |                   |                  |
    X---+---+-------------------+------------------+---+---X
        |                  AERO Link                   |
  +-----+--------+                            +--------+-----+
  |AERO Client C1|                            |AERO Client C2|
  |    Nbr: S1   |                            |   Nbr: S2    |
  | default->S1  |                            | default->S2  |
  |    ACP P1    |                            |    ACP P2    |
  +------+-------+                            +------+-------+
         |                                           |
        .-.                                         .-.
     ,-(  _)-.                                   ,-(  _)-.
  .-(_  IP   )-.   +-------+     +-------+    .-(_  IP   )-.
(__    EUN      )--|Host H1|     |Host H2|--(__    EUN      )
   `-(______)-'    +-------+     +-------+     `-(______)-'
]]></artwork>
          </figure><xref target="chaining-fig"/> presents the AERO link
        reference model. In this model:</t>

        <t><list style="symbols">
            <t>AERO Relay R1 aggregates AERO Service Prefix (ASP) A1, acts as
            a default router for its associated Servers S1 and S2, and
            connects the AERO link to the rest of the IP Internetwork.</t>

            <t>AERO Servers S1 and S2 associate with Relay R1 and also act as
            default routers for their associated Clients C1 and C2.</t>

            <t>AERO Clients C1 and C2 associate with Servers S1 and S2,
            respectively. They receive AERO Client Prefix (ACP) delegations P1
            and P2, and also act as default routers for their associated
            physical or internal virtual EUNs. (Alternatively, Clients can act
            as multi-addressed hosts without serving any EUNs).</t>

            <t>Simple hosts H1 and H2 attach to the EUNs served by Clients C1
            and C2, respectively.</t>
          </list>Each node on the AERO link maintains an AERO interface
        neighbor cache and an IP forwarding table the same as for any link. In
        common operational practice, there may be many additional Relays,
        Servers and Clients.</t>
      </section>

      <section anchor="node-types" title="AERO Node Types">
        <t>AERO Relays provide default forwarding services to AERO Servers.
        Each Relay also peers with each Server in a dynamic routing protocol
        instance to discover the Server's list of associated ACPs (see <xref
        target="scaling"/>). Relays forward packets between neighbors
        connected to the same AERO link and also forward packets between the
        AERO link and the native IP Internetwork. Relays present the AERO link
        to the native Internetwork as a set of one or more AERO Service
        Prefixes (ASPs) and serve as a gateway between the AERO link and the
        Internetwork. Relays maintain an AERO interface neighbor cache entry
        for each AERO Server, and maintain an IP forwarding table entry for
        each AERO Client Prefix (ACP). AERO Relays can also be configured to
        act as AERO Servers.</t>

        <t>AERO Servers provide default forwarding services to AERO Clients.
        Each Server also peers with each Relay in a dynamic routing protocol
        instance to advertise its list of associated ACPs (see <xref
        target="scaling"/>). Servers configure a DHCPv6 server function and
        act as delegating routers to facilitate Prefix Delegation (PD)
        exchanges with Clients. Each delegated prefix becomes an ACP taken
        from an ASP. Servers forward packets between AERO interface neighbors,
        and maintain an AERO interface neighbor cache entry for each Relay.
        They also maintain both neighbor cache entries and IP forwarding table
        entries for each of their associated Clients. AERO Servers can also be
        configured to act as AERO Relays.</t>

        <t>AERO Clients act as requesting routers to receive ACPs through
        DHCPv6 PD exchanges with AERO Servers over the AERO link. Each Client
        MAY associate with a single Server or with multiple Servers, e.g., for
        fault tolerance, load balancing, etc. Each IPv6 Client receives at
        least a /64 IPv6 ACP, and may receive even shorter prefixes.
        Similarly, each IPv4 Client receives at least a /32 IPv4 ACP (i.e., a
        singleton IPv4 address), and may receive even shorter prefixes.
        Clients maintain an AERO interface neighbor cache entry for each of
        their associated Servers as well as for each of their correspondent
        Clients.</t>
      </section>

      <section anchor="scaling" title="AERO Routing System">
        <t>The AERO routing system comprises a private instance of the Border
        Gateway Protocol (BGP) <xref target="RFC4271"/> that is coordinated
        between Relays and Servers and does not interact with either the
        public Internet BGP routing system or the native IP Internetwork
        interior routing system. Relays advertise only a small and unchanging
        set of ASPs to the native routing system instead of the full
        dynamically changing set of ACPs.</t>

        <t>In a reference deployment, each AERO Server is configured as an
        Autonomous System Border Router (ASBR) for a stub Autonomous System
        (AS) using an AS Number (ASN) that is unique within the BGP instance,
        and each Server further peers with each Relay but does not peer with
        other Servers. Similarly, Relays do not peer with each other, since
        they will reliably receive all updates from all Servers and will
        therefore have a consistent view of the AERO link ACP delegations.</t>

        <t>Each Server maintains a working set of associated ACPs, and
        dynamically announces new ACPs and withdraws departed ACPs in its BGP
        updates to Relays. Clients are expected to remain associated with
        their current Servers for extended timeframes, however Servers SHOULD
        selectively suppress BGP updates for impatient Clients that repeatedly
        associate and disassociate with them in order to dampen routing
        churn.</t>

        <t>Each Relay configures a black-hole route for each of its ASPs. By
        black-holing the ASPs, the Relay will maintain forwarding table
        entries only for the ACPs that are currently active, and all other
        ACPs will correctly result in destination unreachable failures due to
        the black hole route. Relays do not send BGP updates for ACPs to
        Servers, but instead originate a default route. In this way, Servers
        have only partial topology knowledge (i.e., they know only about the
        ACPs of their directly associated Clients) and they forward all other
        packets to Relays which have full topology knowledge.</t>

        <t>Scaling properties of the AERO routing system are limited by the
        number of BGP routes that can be carried by Relays. Assuming O(10^6)
        as a maximum number of BGP routes, this means that O(10^6) Clients can
        be serviced by a single set of Relays. A means of increasing scaling
        would be to assign a different set of Relays for each set of ASPs. In
        that case, each Server still peers with each Relay, but the Server
        institutes route filters so that it only sends BGP updates to the
        specific set of Relays that aggregate the ASP. For example, if the ASP
        for the AERO link is 2001:db8::/32, a first set of Relays could
        service the ASP segment 2001:db8::/40, a second set of Relays could
        service 2001:db8:0100::/40, a third set could service
        2001:db8:0200::/40, etc.</t>

        <t>Assuming up to O(10^3) sets of Relays, the AERO routing system can
        then accommodate O(10^9) ACPs with no additional overhead for Servers
        and Relays (for example, it should be possible to service 4 billion
        /64 ACPs taken from a /32 ASP and even more for shorter ASPs). In this
        way, each set of Relays services a specific set of ASPs that they
        advertise to the native routing system, and each Server configures
        ASP-specific routes that list the correct set of Relays as next hops.
        This arrangement also allows for natural incremental deployment, and
        can support small scale initial deployments followed by dynamic
        deployment of additional Clients, Servers and Relays without
        disturbing the already-deployed base.</t>

        <t>Note that in an alternate routing arrangement each set of Relays
        could advertise an aggregated ASP for the link into the native routing
        system even though each Relay services only a segment of the ASP. In
        that case, a Relay upon receiving a packet with a destination address
        covered by the ASP segment of another Relay can simply tunnel the
        packet to the correct Relay. The tradeoff then is the penalty for
        Relay-to-Relay tunneling compared with reduced routing information in
        the native routing system.</t>

        <t>Finally, Relays can determine preferences for ACPs learned from
        multiple Servers by examining a BGP weight associated with each
        Server's peering configuration. In this way Relays can choose the
        Server with the highest weight as the preferred path, and then fail
        over to a Server with lower weight in case of ACP withdrawal or Server
        failure.</t>
      </section>

      <section anchor="aero-address"
               title="AERO Interface Link-local Addresses">
        <t>AERO interface link-local address types include
        administratively-provisioned addresses and AERO addresses.</t>

        <t>Administratively-provisioned addresses are allocated from the range
        fe80::/96 and assigned to a Server or Relay's AERO interface.
        Administratively-provisioned addresses MUST be managed for uniqueness
        by the administrative authority for the AERO link. (Note that fe80::
        is the IPv6 link-local subnet router anycast address, and
        fe80::ffff:ffff is the address used by Clients to bootstrap AERO
        address autoconfiguration. These special addresses are therefore not
        available for administrative provisioning.)</t>

        <t>An AERO address is an IPv6 link-local address with an embedded
        prefix based on an ACP and associated with a Client's AERO interface.
        AERO addresses remain stable as the Client moves between topological
        locations, i.e., even if its link-layer addresses change.</t>

        <t>For IPv6, AERO addresses begin with the prefix fe80::/64 and
        include in the interface identifier (i.e., the lower 64 bits) a 64-bit
        prefix taken from one of the Client's IPv6 ACPs. For example, if the
        AERO Client receives the IPv6 ACP:</t>

        <t><list style="empty">
            <t>2001:db8:1000:2000::/56</t>
          </list>it constructs its corresponding AERO addresses as:</t>

        <t><list style="empty">
            <t>fe80::2001:db8:1000:2000</t>

            <t>fe80::2001:db8:1000:2001</t>

            <t>fe80::2001:db8:1000:2002</t>

            <t>... etc. ...</t>

            <t>fe80::2001:db8:1000:20ff</t>
          </list>For IPv4, AERO addresses are based on an IPv4-mapped IPv6
        address <xref target="RFC4291"/> formed from an IPv4 ACP and with a
        Prefix Length of 96 plus the ACP prefix length. For example, for the
        IPv4 ACP 192.0.2.32/28 the IPv4-mapped IPv6 ACP is:</t>

        <t><list style="empty">
            <t>0:0:0:0:0:FFFF:192.0.2.16/124</t>
          </list>The Client then constructs its AERO addresses with the prefix
        fe80::/64 and with the lower 64 bits of the IPv4-mapped IPv6 address
        in the interface identifier as:</t>

        <t><list style="empty">
            <t>fe80::FFFF:192.0.2.16</t>

            <t>fe80::FFFF:192.0.2.17</t>

            <t>fe80::FFFF:192.0.2.18</t>

            <t>... etc. ...</t>

            <t>fe80:FFFF:192.0.2.31</t>
          </list>When the Server delegates ACPs to the Client, both the Server
        and Client use the lowest-numbered AERO address from the first ACP
        delegation as the "base" AERO address. (For example, for the ACP
        2001:db8:1000:2000::/56 the base address is 2001:db8:1000:2000.) The
        Client then assigns the base AERO address to the AERO interface and
        uses it for the purpose of maintaining the neighbor cache entry. If
        the Client has multiple AERO addresses (i.e., when there are multiple
        ACPs and/or ACPs with short prefix lengths), the Client originates
        IPv6 ND messages using the base AERO address as the source address and
        accepts and responds to IPv6 ND messages destined to any of its AERO
        addresses as equivalent to the base AERO address. In this way, the
        Client maintains a single neighbor cache entry with multiple AERO
        addresses.</t>
      </section>

      <section anchor="interface" title="AERO Interface Characteristics">
        <t>AERO interfaces use encapsulation (see: <xref
        target="aeroencaps"/>) to exchange packets with neighbors attached to
        the AERO link.</t>

        <t>AERO interfaces maintain a neighbor cache, and use both DHCPv6 and
        IPv6 ND control messaging to manage the creation, modification and
        deletion of neighbor cache entries. AERO interfaces use standard
        DHCPv6 messaging for prefix delegation, prefix management, admission
        control and neighbor cache entry establishment. AERO interfaces use
        unicast IPv6 ND Neighbor Solicitation (NS), Neighbor Advertisement
        (NA), Router Solicitation (RS) and Router Advertisement (RA) messages
        for neighbor cache management the same as for any IPv6 link. AERO
        interfaces use two IPv6 ND redirection message types -- the first
        known as a Predirect message and the second being the standard
        Redirect message (see <xref target="predirect"/>).</t>

        <t>AERO interface ND messages include one or more Source/Target
        Link-Layer Address Options (S/TLLAOs) formatted as shown in <xref
        target="llaov6"/>:</t>

        <t><figure anchor="llaov6"
            title="AERO Source/Target Link-Layer Address Option (S/TLLAO) Format">
            <artwork><![CDATA[      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      Type     |   Length = 5  |          Reserved             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |          Interface ID         |        UDP Port Number        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                                               |
     +                                                               +
     |                                                               |
     +                          IP Address                           +
     |                                                               |
     +                                                               +
     |                                                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |P00|P01|P02|P03|P04|P05|P06|P07|P08|P09|P10|P11|P12|P13|P14|P15|
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |P16|P17|P18|P19|P20|P21|P22|P23|P24|P25|P26|P27|P28|P29|P30|P31|
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |P32|P33|P34|P35|P36|P37|P38|P39|P40|P41|P42|P43|P44|P45|P46|P47|
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |P48|P49|P50|P51|P52|P53|P54|P55|P56|P57|P58|P59|P60|P61|P62|P63|
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure></t>

        <t>In this format:</t>

        <t><list style="symbols">
            <t>Type is set to '1' for SLLAO or '2' for TLLAO the same as for
            IPv6 ND.</t>

            <t>Length is set to the constant value '5' (i.e., 5 units of 8
            octets).</t>

            <t>Reserved is set to the value '0' on transmission and ignored on
            receipt.</t>

            <t>Interface ID is set to an integer value between 0 and 65535
            corresponding to an underlying interface of the AERO node.</t>

            <t>UDP Port Number and IP Address are set to the addresses used by
            the AERO node when it sends encapsulated packets over the
            underlying interface. When UDP is not used as part of the
            encapsulation, UDP Port Number is set to the value '0'. When the
            encapsulation IP address family is IPv4, IP Address is formed as
            an IPv4-mapped IPv6 address as specified in <xref
            target="aero-address"/>.</t>

            <t>P[i] is a set of 64 Preference values that correspond to the 64
            Differentiated Service Code Point (DSCP) values <xref
            target="RFC2474"/>. Each P(i) is set to the value '0'
            ("disabled"), '1' ("low"), '2' ("medium") or '3' ("high") to
            indicate a preference level for packet forwarding purposes.</t>
          </list></t>

        <t>AERO interfaces may be configured over multiple underlying
        interfaces. For example, common mobile handheld devices have both
        wireless local area network ("WLAN") and cellular wireless links.
        These links are typically used "one at a time" with low-cost WLAN
        preferred and highly-available cellular wireless as a standby. In a
        more complex example, aircraft frequently have many wireless data link
        types (e.g. satellite-based, cellular, terrestrial, air-to-air
        directional, etc.) with diverse performance and cost properties.</t>

        <t>If a Client's multiple underlying interfaces are used "one at a
        time" (i.e., all other interfaces are in standby mode while one
        interface is active), then IPv6 ND messages include only a single
        S/TLLAO with Interface ID set to a constant value.</t>

        <t>If the Client has multiple active underlying interfaces, then from
        the perspective of IPv6 ND it would appear to have multiple link-layer
        addresses. In that case, IPv6 ND messages MAY include multiple
        S/TLLAOs -- each with an Interface ID that corresponds to a specific
        underlying interface of the AERO node.</t>
      </section>

      <section anchor="aeroinit" title="AERO Interface Initialization">
        <section anchor="rinit" title="AERO Relay Behavior">
          <t>When a Relay enables an AERO interface, it first assigns an
          administratively-provisioned link-local address fe80::ID to the
          interface. Each fe80::ID address MUST be unique among all AERO nodes
          on the link, and is taken from the range fe80::/96 but excluding the
          special addresses fe80:: and fe80::ffff:ffff. The Relay then engages
          in a dynamic routing protocol session with all Servers on the link
          (see: <xref target="scaling"/>), and advertises its assigned ASPs
          into the native IP Internetwork.</t>

          <t>Each Relay subsequently maintains an IP forwarding table entry
          for each active ACP covered by its ASP(s), and maintains a neighbor
          cache entry for each Server on the link. Relays exchange NS/NA
          messages with AERO link neighbors the same as for any AERO node,
          however they typically do not perform explicit Neighbor
          Unreachability Detection (NUD) (see: <xref target="nud"/>) since the
          dynamic routing protocol already provides reachability
          confirmation.</t>
        </section>

        <section anchor="sinit" title="AERO Server Behavior">
          <t>When a Server enables an AERO interface, it assigns an
          administratively-provisioned link-local address fe80::ID the same as
          for Relays. The Server further configures a DHCPv6 server function
          to facilitate DHCPv6 PD exchanges with AERO Clients. The Server
          maintains a neighbor cache entry for each Relay on the link, and
          manages per-Client neighbor cache entries and IP forwarding table
          entries based on control message exchanges. Each Server also engages
          in a dynamic routing protocol with each Relay on the link (see:
          <xref target="scaling"/>).</t>

          <t>When the Server receives an NS/RS message from a Client on the
          AERO interface it returns an NA/RA message. The Server further
          provides a simple link-layer conduit between AERO interface
          neighbors. In particular, when a packet sent by a source Client
          arrives on the Server's AERO interface and is destined to another
          AERO node, the Server forwards the packet at the link layer without
          ever disturbing the network layer and without ever leaving the AERO
          interface.</t>
        </section>

        <section anchor="cinit" title="AERO Client Behavior">
          <t>When a Client enables an AERO interface, it uses the special
          administratively-provisioned link-local address fe80::ffff:ffff as
          the source network-layer address in DHCPv6 PD messages to obtain one
          or more ACPs from an AERO Server. Next, the Client assigns the base
          AERO address to the AERO interface and sends an RS to the Server to
          receive an RA. In this way, the DHCPv6 PD exchange securely
          bootstraps autoconfiguration of unique link-local address(es) while
          the RS/RA exchange establishes link-layer addresses and
          autoconfigures AERO link parameters. The Client maintains a neighbor
          cache entry for each of its Servers and each of its active
          correspondent Clients. When the Client receives IPv6 ND messages on
          the AERO interface it updates or creates neighbor cache entries,
          including link-layer address information.</t>
        </section>
      </section>

      <section anchor="aeroncache"
               title="AERO Interface Neighbor Cache Maintenace">
        <t>Each AERO interface maintains a conceptual neighbor cache that
        includes an entry for each neighbor it communicates with on the AERO
        link, the same as for any IPv6 interface <xref target="RFC4861"/>.
        AERO interface neighbor cache entires are said to be one of
        "permanent", "static" or "dynamic".</t>

        <t>Permanent neighbor cache entries are created through explicit
        administrative action; they have no timeout values and remain in place
        until explicitly deleted. AERO Relays maintain a permanent neighbor
        cache entry for each Server on the link, and AERO Servers maintain a
        permanent neighbor cache entry for each Relay. Each entry maintains
        the mapping between the neighbor's fe80::ID network-layer address and
        corresponding link-layer address.</t>

        <t>Static neighbor cache entries are created and maintained through
        DHCPv6 PD and IPv6 ND exchanges as specified in <xref
        target="aeropd"/>, and remain in place for durations bounded by prefix
        delegation lifetimes. AERO Servers maintain static neighbor cache
        entries for the ACPs of each of their associated Clients, and AERO
        Clients maintain a static neighbor cache entry for each of their
        associated Servers. When an AERO Server delegates prefixes via DHCPv6
        PD, it creates a static neighbor cache entry for the Client using the
        Client's base AERO address as the network-layer address and associates
        all of the Client's other AERO addresses with the neighbor cache
        entry. When the Client receives the prefix delegation, it creates a
        static neighbor cache entry for the Server based on the DHCPv6 Reply
        message link-local source address as the network-layer address and the
        encapsulation IP source address and UDP source port number as the
        link-layer address. The Client then sends an RS message to inform the
        Server of its link-layer addresses and to solicit an RA. When the
        Server returns an RA message, the Client uses the autoconfiguration
        information in the RA message to configure AERO interface
        parameters.</t>

        <t>Dynamic neighbor cache entries are created or updated based on
        receipt of a Predirect/Redirect message as specified in <xref
        target="predirect"/>, and are garbage-collected when keepalive timers
        expire. AERO Clients maintain dynamic neighbor cache entries for each
        of their active correspondent Clients with lifetimes based on IPv6 ND
        messaging constants. When an AERO Client receives a valid Predirect
        message it creates or updates a dynamic neighbor cache entry for the
        Predirect target network-layer and link-layer addresses. The node then
        sets an "AcceptTime" variable in the neighbor cache entry to
        ACCEPT_TIME seconds and uses this value to determine whether packets
        received from the correspondent can be accepted. When an AERO Client
        receives a valid Redirect message it creates or updates a dynamic
        neighbor cache entry for the Redirect target network-layer and
        link-layer addresses. The Client then sets a "ForwardTime" variable in
        the neighbor cache entry to FORWARD_TIME seconds and uses this value
        to determine whether packets can be sent directly to the
        correspondent. The Client also sets a "MaxRetry" variable to MAX_RETRY
        to limit the number of keepalives sent when a correspondent may have
        gone unreachable.</t>

        <t>It is RECOMMENDED that FORWARD_TIME be set to the default constant
        value 30 seconds to match the default REACHABLE_TIME value specified
        for IPv6 ND <xref target="RFC4861"/>.</t>

        <t>It is RECOMMENDED that ACCEPT_TIME be set to the default constant
        value 40 seconds to allow a 10 second window so that the AERO
        redirection procedure can converge before AcceptTime decrements below
        FORWARD_TIME.</t>

        <t>It is RECOMMENDED that MAX_RETRY be set to 3 the same as described
        for IPv6 ND address resolution in Section 7.3.3 of <xref
        target="RFC4861"/>.</t>

        <t>Different values for FORWARD_TIME, ACCEPT_TIME, and MAX_RETRY MAY
        be administratively set, if necessary, to better match the AERO link's
        performance characteristics; however, if different values are chosen,
        all nodes on the link MUST consistently configure the same values.
        Most importantly, ACCEPT_TIME SHOULD be set to a value that is
        sufficiently longer than FORWARD_TIME to allow the AERO redirection
        procedure to converge.</t>

        <t>When there may be a Network Address Translator (NAT) between the
        Client and the Server, or if the path from the Client to the Server
        should be tested for reachability, the Client can send periodic RS
        messages to the Server to receive RA replies. The RS/RA messaging will
        keep NAT state alive and test Server reachability without disturbing
        the DHCPv6 server.</t>
      </section>

      <section anchor="aeroalg" title="AERO Interface Forwarding Algorithm">
        <t>IP packets enter a node's AERO interface either from the network
        layer (i.e., from a local application or the IP forwarding system) or
        from the link layer (i.e., from the AERO tunnel virtual link). Packets
        that enter the AERO interface from the network layer are encapsulated
        and forwarded into the AERO link, i.e., they are tunnelled to an AERO
        interface neighbor. Packets that enter the AERO interface from the
        link layer are either re-admitted into the AERO link or forwarded to
        the network layer where they are subject to either local delivery or
        IP forwarding. In all cases, the AERO interface itself MUST NOT
        decrement the network layer TTL/Hop-count since its forwarding actions
        occur below the network layer.</t>

        <t>AERO interfaces may have multiple underlying interfaces and/or
        neighbor cache entries for neighbors with multiple Interface ID
        registrations (see <xref target="interface"/>). The AERO node uses
        each packet's DSCP value to select an outgoing underlying interface
        based on the node's own preference values, and also to select a
        destination link-layer address based on the neighbor's underlying
        interface with the highest preference value. If multiple outgoing
        interfaces and/or neighbor interfaces have a preference of "high", the
        AERO node sends one copy of the packet via each of the (outgoing
        interface, neighbor interface) pairs; otherwise, the node sends a
        single copy of the packet.</t>

        <t>The following sections discuss the AERO interface forwarding
        algorithms for Clients, Servers and Relays. In the following
        discussion, a packet's destination address is said to "match" if it is
        a non-link-local address with a prefix covered by an ASP/ACP, or if it
        is an AERO address that embeds an ACP, or if it is the same as an
        administratively-provisioned link-local address.</t>

        <section anchor="cforw" title="Client Fowarding Algorithm">
          <t>When an IP packet enters a Client's AERO interface from the
          network layer the Client searches for a neighbor cache entry that
          matches the destination. If there is a match, the Client uses one or
          more link-layer addresses in the entry as the link-layer addresses
          for encapsulation and admits the packet into the AERO link.
          Otherwise, the Client uses the link-layer address in a static
          neighbor cache entry for a Server as the encapsulation address.</t>

          <t>When an IP packet enters a Client's AERO interface from the
          link-layer, if the destination matches one of the Client's ACPs or
          link-local addresses the Client decapsulates the packet and delivers
          it to the network layer. Otherwise, the Client drops the packet
          silently.</t>
        </section>

        <section anchor="sforw" title="Server Fowarding Algorithm">
          <t>When an IP packet enters a Server's AERO interface from the
          network layer, the Server searches for a static or dynamic neighbor
          cache entry that matches the destination. If there is a match, the
          Server uses one or more link-layer addresses in the entry as the
          link-layer addresses for encapsulation and admits the packet into
          the AERO link. Otherwise, the Server uses the link-layer address in
          a permanent neighbor cache entry for a Relay (selected through
          longest-prefix match) as the link-layer address for
          encapsulation.</t>

          <t>When an IP packet enters a Server's AERO interface from the link
          layer, the Server processes the packet as follows:</t>

          <t><list style="symbols">
              <t>if the destination matches one of the Server's link-local
              addresses the Server decapsulates the packet and forwards it to
              the network layer for local delivery.</t>

              <t>else, if the destination matches a dynamic neighbor cache
              entry the Server first determines whether the neighbor is the
              same as the one it received the packet from. If so, the Server
              MUST drop the packet silently to avoid looping; otherwise, the
              Server uses the neighbor's link-layer address(es) as the
              destination for encapsulation and re-admits the packet into the
              AERO link.</t>

              <t>else, the Server uses the link-layer address in a permanent
              neighbor cache entry for a Relay (selected through
              longest-prefix match) as the link-layer address for
              encapsulation.</t>
            </list></t>
        </section>

        <section anchor="rforw" title="Relay Fowarding Algorithm">
          <t>When an IP packet enters a Relay's AERO interface from the
          network layer, the Relay searches its IP forwarding table for an ACP
          entry that matches the destination and otherwise searches for a
          neighbor cache entry that matches the destination. If there is a
          match, the Relay uses the link-layer address in the corresponding
          neighbor cache entry as the link-layer address for encapsulation and
          forwards the packet into the AERO link. Otherwise, the Relay drops
          the packet and (for non-link-local addresses) returns an ICMP
          Destination Unreachable message subject to rate limiting (see: <xref
          target="aeroerr"/>).</t>

          <t>When an IP packet enters a Relay's AERO interface from the
          link-layer, the Relay processes the packet as follows:</t>

          <t><list style="symbols">
              <t>if the destination does not match an ASP, or if the
              destination matches one of the Relay's link-local addresses, the
              Relay decapsulates the packet and forwards it to the network
              layer where it will be subject to either local delivery or IP
              forwarding.</t>

              <t>else, if the destination matches an ACP entry in the IP
              forwarding table, or if the destination matches the link-local
              address in a permanent neighbor cache entry, the Relay first
              determines whether the neighbor is the same as the one it
              received the packet from. If so the Relay MUST drop the packet
              silently to avoid looping; otherwise, the Relay uses the
              neighbor's link-layer address as the destination for
              encapsulation and re-admits the packet into the AERO link.</t>

              <t>else, the Relay drops the packet and (for non-link-local
              addresses) returns an ICMP Destination Unreachable message
              subject to rate limiting (see: <xref target="aeroerr"/>).</t>
            </list></t>
        </section>
      </section>

      <section anchor="aeroencaps"
               title="AERO Interface Encapsulation and Re-encapsulation">
        <t>AERO interfaces encapsulate IP packets according to whether they
        are entering the AERO interface from the network layer or if they are
        being re-admitted into the same AERO link they arrived on. This latter
        form of encapsulation is known as "re-encapsulation".</t>

        <t>The AERO interface encapsulates packets per the Generic UDP
        Encapsulation (GUE) procedures in <xref
        target="I-D.ietf-nvo3-gue"/><xref
        target="I-D.herbert-gue-fragmentation"/>, or through an alternate
        encapsulation format (see: <xref target="minimal"/>). For packets
        entering the AERO interface from the network layer, the AERO interface
        copies the "TTL/Hop Limit", "Type of Service/Traffic Class" <xref
        target="RFC2983"/>, "Flow Label"<xref target="RFC6438"> </xref>.(for
        IPv6) and "Congestion Experienced" <xref target="RFC3168"/> values in
        the packet's IP header into the corresponding fields in the
        encapsulation IP header. For packets undergoing re-encapsulation, the
        AERO interface instead copies these values from the original
        encapsulation IP header into he new encapsulation header, i.e., the
        values are transferred between encapsulation headers and *not* copied
        from the encapsulated packet's network-layer header. (Note especially
        that by copying the TTL/Hop Limit between encapsulation headers the
        value will eventually decrement to 0 if there is a (temporary) routing
        loop.) For IPv4 encapsulation/re-encapsulation, the AERO interface
        sets the DF bit as discussed in <xref target="aeromtu"/>.</t>

        <t>When GUE encapsulation is used, the AERO interface next sets the
        UDP source port to a constant value that it will use in each
        successive packet it sends, and sets the UDP length field to the
        length of the encapsulated packet plus 8 bytes for the UDP header
        itself plus the length of the GUE header (or 0 if GUE direct IP
        encapsulation is used). For packets sent to a Server or Relay, the
        AERO interface sets the UDP destination port to 8060, i.e., the
        IANA-registered port number for AERO. For packets sent to a Client,
        the AERO interface sets the UDP destination port to the port value
        stored in the neighbor cache entry for this Client. The AERO interface
        then either includes or omits the UDP checksum according to the GUE
        specification.</t>
      </section>

      <section anchor="aerodecaps" title="AERO Interface Decapsulation">
        <t>AERO interfaces decapsulate packets destined either to the AERO
        node itself or to a destination reached via an interface other than
        the AERO interface the packet was received on. Decapsulation is per
        the procedures specified for the appropriate encapsulation format.</t>
      </section>

      <section anchor="aeroauth"
               title="AERO Interface Data Origin Authentication">
        <t>AERO nodes employ simple data origin authentication procedures for
        encapsulated packets they receive from other nodes on the AERO link.
        In particular:</t>

        <t><list style="symbols">
            <t>AERO Servers and Relays accept encapsulated packets with a
            link-layer source address that matches a permanent neighbor cache
            entry.</t>

            <t>AERO Servers accept authentic encapsulated DHCPv6 and IPv6 ND
            messages from Clients, and create or update a static neighbor
            cache entry for the Client based on the specific message type.</t>

            <t>AERO Clients and Servers accept encapsulated packets if there
            is a static neighbor cache entry with a link-layer address that
            matches the packet's link-layer source address.</t>

            <t>AERO Clients and Servers accept encapsulated packets if there
            is a dynamic neighbor cache entry with an AERO address that
            matches the packet's network-layer (link-local or non-link-local)
            source address, with a link-layer address that matches the
            packet's link-layer source address, and with a non-zero
            AcceptTime.</t>
          </list>Note that this simple data origin authentication is effective
        in environments in which link-layer addresses cannot be spoofed. In
        other environments, each AERO message must include a signature that
        the recipient can use to authenticate the message origin, e.g., as for
        common VPN systems such as OpenVPN <xref target="OVPN"/>. In
        environments where end systems use end-to-end security, however, it
        may be sufficient to require signatures only for AERO DHCPv6, IPv6 ND
        and ICMP control plane messages and omit signatures for data plane
        messages.</t>
      </section>

      <section anchor="aeromtu" title="AERO Interface Packet Size Issues">
        <t>The AERO interface is the node's attachment to the AERO link. The
        AERO interface acts as a tunnel ingress when it sends a packet to an
        AERO link neighbor and as a tunnel egress when it receives a packet
        from an AERO link neighbor. AERO interfaces observe the packet sizing
        considerations for tunnels discussed in <xref
        target="I-D.ietf-intarea-tunnels"/> and as specified below.</t>

        <t>IPv6 specifies a minimum link Maximum Transmission Unit (MTU) of
        1280 bytes <xref target="RFC2460"/>. Although IPv4 specifies a smaller
        minimum link MTU of 68 bytes <xref target="RFC0791"/>, AERO interfaces
        also observe the IPv6 minimum for IPv4 even if the packet may incur
        fragmentation in the network.</t>

        <t>IPv6 specifies a minimum Maximum Reassembly Unit (MRU) of 1500
        bytes <xref target="RFC2460"/>, while the minimum MRU for IPv4 is only
        576 bytes <xref target="RFC1122"/> (note that common IPv6 over IPv4
        tunnels already assume a larger MRU than the IPv4 minimum).</t>

        <t>Original sources expect that IP packets will either be delivered to
        the final destination or a suitable Packet Too Big (PTB) message
        returned. However, PTB messages may be crafted for malicious purposes
        such as denial of service, or lost in the network <xref
        target="RFC2923"/> resulting in failure of the IP Path MTU Discovery
        (PMTUD) mechanisms <xref target="RFC1191"/><xref target="RFC1981"/>.
        For these reasons, AERO links employ operational procedures that avoid
        all interactions with PMTUD.</t>

        <t>AERO Servers advertise an MTU that MUST NOT be smaller than 1280
        bytes, MUST NOT be larger than the minimum MRU among all nodes on the
        AERO link minus the encapsulation overhead ("ENCAPS"), and SHOULD NOT
        be smaller than 1500 bytes. AERO Servers advertise a Maximum Fragment
        Unit (MFU) as the maximum size for the fragments of an encapsulated
        packet that require fragmentation. The MFU value MUST NOT be larger
        than (MTU+ENCAPS) and MUST NOT be larger than 1280 bytes unless there
        is operational assurance that a larger size can traverse the link
        along all paths without fragmentation.</t>

        <t>All AERO nodes MUST set the AERO interface MTU/MFU according to the
        values advertised by Servers. All AERO nodes MUST configure the same
        MTU/MFU values for reasons cited in <xref target="RFC3819"/><xref
        target="RFC4861"/> (in particular, multicast support requires a common
        MTU value among all nodes on the link). All AERO nodes MUST configure
        an MRU large enough to reassemble packets up to (MTU+ENCAPS) bytes in
        length; nodes that cannot configure a large-enough MRU MUST NOT enable
        an AERO interface.</t>

        <t>In accordance with these requirements, the ingress accommodates
        packets of various sizes as follows:</t>

        <t><list style="symbols">
            <t>First, for each original IPv4 packet that is larger than the
            AERO interface MTU and with the DF bit set to 0, the ingress uses
            IPv4 fragmentation to break the packet into a minimum number of
            non-overlapping fragments where the first fragment is no larger
            than (MFU-ENCAPS) bytes and the remaining fragments are no larger
            than the first.</t>

            <t>Next, for each original IP packet or fragment that is no larger
            than (MFU-ENCAPS) bytes, the ingress encapsulates the packet and
            admits it into the tunnel. For IPv4 encapsulation, the ingress
            sets the Don't Fragment (DF) bit to 0 so that these packets will
            be delivered to the egress even if some fragmentation occurs in
            the network.</t>

            <t>For all other original IP packets or fragments, if the packet
            is larger than the AERO interface MTU, the ingress drops the
            packet and returns a PTB message to the original source.
            Otherwise, the ingress encapsulates the packet and fragments the
            encapsulated packet into a minimum number of non-overlapping
            fragments where the first fragment is no larger than MFU bytes and
            the remaining fragments are no larger than the first. The ingress
            then admits the fragments into the tunnel, and for IPv4 sets the
            DF bit to 0 in the IP encapsulation header. These fragmented
            encapsulated packets will be delivered to the egress, which
            reassembles them into a whole packet.</t>
          </list>Several factors must be considered when fragmentation of the
        encapsulated packet is needed. For AERO links over IPv4, the IP ID
        field is only 16 bits in length, meaning that fragmentation at high
        data rates could result in data corruption due to reassembly
        misassociations <xref target="RFC6864"/><xref target="RFC4963"/>. For
        AERO links over both IPv4 and IPv6, studies have also shown that IP
        fragments are dropped unconditionally over some network paths
        [I-D.taylor-v6ops-fragdrop]. In environments where IP fragmentation
        issues could result in operational problems, the ingress SHOULD employ
        intermediate-layer fragmentation (see: <xref target="RFC2764"/> and
        <xref target="I-D.herbert-gue-fragmentation"/>) before appending the
        outer encapsulation headers to each fragment.</t>

        <t>Since the encapsulation fragment header reduces the room available
        for packet data, but the original source has no way to control its
        insertion, the ingress MUST include the fragment header length in the
        ENCAPS length even for packets in which the header is absent.</t>
      </section>

      <section anchor="aeroerr" title="AERO Interface Error Handling">
        <t>When an AERO node admits encapsulated packets into the AERO
        interface, it may receive link-layer or network-layer error
        indications.</t>

        <t>A link-layer error indication is an ICMP error message generated by
        a router on the path to the neighbor or by the neighbor itself. The
        message includes an IP header with the address of the node that
        generated the error as the source address and with the link-layer
        address of the AERO node as the destination address.</t>

        <t>The IP header is followed by an ICMP header that includes an error
        Type, Code and Checksum. Valid type values include "Destination
        Unreachable", "Time Exceeded" and "Parameter Problem" <xref
        target="RFC0792"/><xref target="RFC4443"/>. (AERO interfaces ignore
        all link-layer IPv4 "Fragmentation Needed" and IPv6 "Packet Too Big"
        messages since they only emit packets that are guaranteed to be no
        larger than the IP minimum link MTU as discussed in <xref
        target="aeromtu"/>.)</t>

        <t>The ICMP header is followed by the leading portion of the packet
        that generated the error, also known as the "packet-in-error". For
        ICMPv6, <xref target="RFC4443"/> specifies that the packet-in-error
        includes: "As much of invoking packet as possible without the ICMPv6
        packet exceeding the minimum IPv6 MTU" (i.e., no more than 1280
        bytes). For ICMPv4, <xref target="RFC0792"/> specifies that the
        packet-in-error includes: "Internet Header + 64 bits of Original Data
        Datagram", however <xref target="RFC1812"/> Section 4.3.2.3 updates
        this specification by stating: "the ICMP datagram SHOULD contain as
        much of the original datagram as possible without the length of the
        ICMP datagram exceeding 576 bytes".</t>

        <t>The link-layer error message format is shown in <xref
        target="icmp2err"/> (where, "L2" and "L3" refer to link-layer and
        network-layer, respectively):</t>

        <t><figure anchor="icmp2err"
            title="AERO Interface Link-Layer Error Message Format">
            <artwork><![CDATA[     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     ~                               ~
     |        L2 IP Header of        |
     |         error message         |
     ~                               ~
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |         L2 ICMP Header        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
     ~                               ~   P
     |   IP and other encapsulation  |   a
     | headers of original L3 packet |   c
     ~                               ~   k
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   e
     ~                               ~   t
     |        IP header of           |   
     |      original L3 packet       |   i
     ~                               ~   n
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   
     ~                               ~   e
     |    Upper layer headers and    |   r
     |    leading portion of body    |   r
     |   of the original L3 packet   |   o
     ~                               ~   r
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---
]]></artwork>
          </figure>The AERO node rules for processing these link-layer error
        messages are as follows:</t>

        <t><list style="symbols">
            <t>When an AERO node receives a link-layer Parameter Problem
            message, it processes the message the same as described as for
            ordinary ICMP errors in the normative references <xref
            target="RFC0792"/><xref target="RFC4443"/>.</t>

            <t>When an AERO node receives persistent link-layer Time Exceeded
            messages, the IP ID field may be wrapping before earlier fragments
            awaiting reassembly have been processed. In that case, the node
            SHOULD begin including integrity checks and/or institute rate
            limits for subsequent packets.</t>

            <t>When an AERO node receives persistent link-layer Destination
            Unreachable messages in response to encapsulated packets that it
            sends to one of its dynamic neighbor correspondents, the node
            SHOULD test the path to the correspondent using Neighbor
            Unreachability Detection (NUD) (see <xref target="nud"/>). If NUD
            fails, the node SHOULD set ForwardTime for the corresponding
            dynamic neighbor cache entry to 0 and allow future packets
            destined to the correspondent to flow through a default route.</t>

            <t>When an AERO Client receives persistent link-layer Destination
            Unreachable messages in response to encapsulated packets that it
            sends to one of its static neighbor Servers, the Client SHOULD
            test the path to the Server using NUD. If NUD fails, the Client
            SHOULD associate with a new Server and send a DHCPv6 Release
            message to the old Server as specified in <xref
            target="newsrv"/>.</t>

            <t>When an AERO Server receives persistent link-layer Destination
            Unreachable messages in response to encapsulated packets that it
            sends to one of its static neighbor Clients, the Server SHOULD
            test the path to the Client using NUD. If NUD fails, the Server
            SHOULD cancel the DHCPv6 PD for the Client's ACP, withdraw its
            route for the ACP from the AERO routing system and delete the
            neighbor cache entry (see <xref target="nud"/> and <xref
            target="aeromob"/>).</t>

            <t>When an AERO Relay or Server receives link-layer Destination
            Unreachable messages in response to an encapsulated packet that it
            sends to one of its permanent neighbors, it treats the messages as
            an indication that the path to the neighbor may be failing.
            However, neighbor reachability will be determined by the dynamic
            routing protocol.</t>
          </list>When an AERO Relay receives a packet for which the
        network-layer destination address is covered by an ASP, if there is no
        more-specific routing information for the destination the Relay drops
        the packet and returns a network-layer Destination Unreachable message
        subject to rate limiting. The Relay first writes the network-layer
        source address of the original packet as the destination address of
        the message and determines the next hop to the destination. If the
        next hop is reached via the AERO interface, the Relay uses the IPv6
        address "::" or the IPv4 address "0.0.0.0" as the source address of
        the message, then encapsulates the message and forwards it to the next
        hop within the AERO interface. Otherwise, the Relay uses one of its
        non link-local addresses as the source address of the message and
        forwards it via a link outside the AERO interface.</t>

        <t>When an AERO node receives an encapsulated packet for which the
        reassembly buffer it too small, it drops the packet and returns an
        network-layer Packet Too Big (PTB) message. The node first writes the
        MRU value into the PTB message MTU field, writes the network-layer
        source address of the original packet as the destination address of
        the message and determines the next hop to the destination. If the
        next hop is reached via the AERO interface, the node uses the IPv6
        address "::" or the IPv4 address "0.0.0.0" as the source address of
        the message, then encapsulates the message and forwards it to the next
        hop within the AERO interface. Otherwise, the node uses one of its non
        link-local addresses as the source address of the message and forwards
        it via a link outside the AERO interface.</t>

        <t>When an AERO node receives any network-layer error message via the
        AERO interface, it examines the network-layer destination address. If
        the next hop toward the destination is via the AERO interface, the
        node re-encapsulates and forwards the message to the next hop within
        the AERO interface. Otherwise, if the network-layer source address is
        the IPv6 address "::" or the IPv4 address "0.0.0.0", the node writes
        one of its non link-local addresses as the source address,
        recalculates the IP and/or ICMP checksums then forwards the message
        via a link outside the AERO interface.</t>
      </section>

      <section anchor="aeropd"
               title="AERO Router Discovery, Prefix Delegation and Autoconfiguration">
        <t>AERO Router Discovery, Prefix Delegation and Autoconfiguration are
        coordinated by the DHCPv6 and IPv6 ND control messaging protocols as
        discussed in the following Sections.</t>

        <section anchor="aeropd-dhcp"
                 title="AERO DHCPv6 and IPv6 ND Service Model">
          <t>Each AERO Server configures a DHCPv6 server function to
          facilitate PD requests from Clients. Each Server is provisioned with
          a database of ACP-to-Client ID mappings for all Clients enrolled in
          the AERO system, as well as any information necessary to
          authenticate each Client. The Client database is maintained by a
          central administrative authority for the AERO link and securely
          distributed to all Servers, e.g., via the Lightweight Directory
          Access Protocol (LDAP) <xref target="RFC4511"/>, via static
          configuration, etc.</t>

          <t>Therefore, no Server-to-Server DHCPv6 PD state synchronization is
          necessary, and Clients can optionally hold separate PDs for the same
          ACPs from multiple Servers. In this way, Clients can associate with
          multiple Servers, and can receive new PDs from new Servers before
          deprecating PDs received from existing Servers. This provides the
          Client with a natural fault-tolerance and/or load balancing
          profile.</t>

          <t>AERO Clients and Servers use unicast IPv6 ND messages to maintain
          neighbor cache entries the same as for any link. AERO Servers act as
          default routers for AERO Clients, and therefore send unicast RA
          messages with configuration information in response to a Client's RS
          message.</t>

          <t>The following sections specify the Client and Server
          behavior.</t>
        </section>

        <section anchor="aeropd-client" title="AERO Client Behavior">
          <t>AERO Clients discover the link-layer addresses of AERO Servers
          via static configuration (e.g., from a flat-file map of Server
          addresses and locations), or through an automated means such as DNS
          name resolution. In the absence of other information, the Client
          resolves the FQDN "linkupnetworks.[domainname]" where
          "linkupnetworks" is a constant text string and "[domainname]" is a
          DNS suffix for the Client's underlying network (e.g.,
          "example.com"). After discovering the link-layer addresses, the
          Client associates with one or more of the corresponding Servers.</t>

          <t>To associate with a Server, the Client acts as a requesting
          router to request ACPs through a DHCPv6 PD exchange <xref
          target="RFC3315"/><xref target="RFC3633"/>. The Client's DHCPv6
          Solicit message includes fe80::ffff:ffff as the IPv6 source address,
          'All_DHCP_Relay_Agents_and_Servers' as the IPv6 destination address,
          the address of the Client's underlying interface as the link-layer
          source address and the link-layer address of the Server as the
          link-layer destination address. The Client also includes a Client
          Identifier option with the Client's DUID, and an Identity
          Association for Prefix Delegation (IA_PD) option. If the Client is
          pre-provisioned with ACPs associated with the AERO service, it MAY
          also include the ACPs in the IA_PD to indicate its preferences to
          the DHCPv6 server. The Client finally includes any additional DHCPv6
          options (including any necessary authentication options to identify
          itself to the DHCPv6 server), and sends the encapsulated Solicit
          message via any available underlying interface.</t>

          <t>When the Client attempts to perform a DHCPv6 PD exchange with a
          Server that is too busy to service the request, the Client may
          receive an error status code such as "NoPrefixAvail" in the Server's
          Reply <xref target="RFC3633"/> or no Reply at all. In that case, the
          Client SHOULD discontinue DHCPv6 PD attempts through this Server and
          try another Server. When the Client receives a Reply from the AERO
          Server it creates a static neighbor cache entry with the Server's
          link-local address as the network-layer address and the Server's
          encapsulation address as the link-layer address. Next, the Client
          autoconfigures AERO addresses for each of the delegated ACPs and
          assigns the base AERO address to the AERO interface.</t>

          <t>The Client then prepares a unicast RS message to send to the
          Server in order to obtain a solicited RA. The Client includes its
          base AERO address as the network-layer source address, the Server's
          link-local address as the network-layer destination address, the
          Client's link-layer address as the link-layer source address, and
          Server's link-layer address as the link-layer destination address.
          The Client also includes one or more SLLAOs formatted as described
          in <xref target="interface"/> to register its link-layer address(es)
          with the Server.</t>

          <t>The first SLLAO MUST correspond to the underlying interface over
          which the Client will send the RS. The Client MAY include additional
          SLLAOs specific to other underlying interfaces, but if so it MUST
          have assurance that there will be no NATs on the paths to the Server
          via those interfaces (otherwise, the Client can register additional
          link-layer addresses with the Server by sending subsequent
          unsolicited NA messages after the initial RS/RA exchange). The
          Server will use the S/TLLAOs to populate its link-layer address
          information for the Client.</t>

          <t>When the Client receives an RA from the AERO Server (see <xref
          target="aeropd-server"/>), it configures a default route with the
          Server as the next hop via the AERO interface. The Client also
          caches any ASPs included in Prefix Information Options (PIOs) as
          ASPs to associate with the AERO link, and assigns the MTU/MFU values
          in the MTU options to its AERO interface while configuring an
          appropriate MRU. This configuration information applies to the AERO
          link as a whole, and all AERO nodes will use the same values..</t>

          <t>Following autoconfiguration, the Client sub-delegates the ACPs to
          its attached EUNs and/or the Client's own internal virtual
          interfaces. In the former case, the Client acts as a router for
          nodes on its attached EUNs. In the latter case, the Client acts as a
          host and can configure as many addresses as it wants from /64
          prefixes taken from the ACPs and assign them to either an internal
          virtual interface ("weak end-system") or to the AERO interface
          itself ("strong end-system") <xref target="RFC1122"/> while
          black-holing the remaining portions of the /64s. The Client
          subsequently renews its ACP delegations through each of its Servers
          by sending DHCPv6 Renew messages.</t>

          <t>After the Client registers its Interface IDs and their associated
          'P(i)' values, it may wish to change one or more Interface ID
          registrations, e.g., if an underlying interface becomes unavailable,
          if cost profiles change, etc. To do so, the Client prepares an
          unsolicited NA message to send over any available underlying
          interface. The NA MUST include a S/TLLAO specific to the selected
          available underlying interface as the first S/TLLAO and MAY include
          any additional S/TLLAOs specific to other underlying interfaces. The
          Client includes fresh 'P(i)' values in each S/TLLAO to update the
          Server's neighbor cache entry. If the Client wishes to disable some
          or all DSCPs for an underlying interface, it includes an S/TLLAO
          with 'P(i)' values set to 0 ("disabled").</t>

          <t>If the Client wishes to discontinue use of a Server it issues a
          DHCPv6 Release message to both delete the Server's neighbor cache
          entry and release the DHCPv6 PD.</t>
        </section>

        <section anchor="aeropd-server" title="AERO Server Behavior">
          <t>AERO Servers configure a DHCPv6 server function on their AERO
          links. AERO Servers arrange to add their encapsulation layer IP
          addresses (i.e., their link-layer addresses) to a static map of
          Server addresses for the link and/or the DNS resource records for
          the FQDN "linkupnetworks.[domainname]" before entering service.</t>

          <t>When an AERO Server receives a prospective Client's Solicit on
          its AERO interface, and the Server is too busy to service the
          message, it SHOULD return a Reply with status code "NoPrefixAvail"
          per <xref target="RFC3633"/>. Otherwise, the Server authenticates
          the message. If authentication succeeds, the Server determines the
          correct ACPs to delegate to the Client by searching the Client
          database.</t>

          <t>Next, the Server prepares a Reply message to send to the Client
          while using fe80::ID as the network-layer source address, the
          link-local address taken from the Client's Solicit as the
          network-layer destination address, the Server's link-layer address
          as the source link-layer address, and the Client's link-layer
          address as the destination link-layer address. The Server also
          includes an IA_PD option with the delegated ACPs. For IPv4 ACPs, the
          prefix included in the IA_PD option is in IPv4-mapped IPv6 address
          format and with prefix length set as specified in <xref
          target="aero-address"/>.</t>

          <t>When the Server sends the Reply message, it creates a static
          neighbor cache entry for the Client using the base AERO address as
          the network-layer address and with lifetime set to no more than the
          smallest PD lifetime. The Client will subsequently issue an RS
          message with one or more SLLAO options and with the Client's base
          AERO address as the source address.</t>

          <t>When the Server receives the RS message, it first verifies that a
          neighbor cache entry for the Client exists (otherwise, it discards
          the RS). The Server then updates the neighbor cache entry link-layer
          address(es) by recording the information in each SLLAO option
          indexed by the Interface ID and including the UDP port number, IP
          address and P(i) values. For the first SLLAO in the list, however,
          the Server records the actual encapsulation source UDP and IP
          addresses instead of those that appear in the SLLAO in case there
          was a NAT in the path.</t>

          <t>The Server then prepares a unicast RA message to send back to the
          Client using fe80::ID as the network-layer source address, the
          Client's base AERO address as the network-layer destination address,
          the Server's link-layer address as the source link-layer address,
          and the source link-layer address of the RS message as the
          destination link-layer address. In the RA message, the Server
          includes one or more PIOs that encode the ASPs for the AERO link,
          and with flags A=0; L=1. The Server also includes two MTU options -
          the first MTU option includes the MTU for the link and the second
          MTU option includes the MFU for the link (see <xref
          target="aeromtu"/>).</t>

          <t>When the Server delegates the ACPs, it also creates an IP
          forwarding table entry for each ACP so that the AERO BGP-based
          routing system will propagate the ACPs to all Relays that aggregate
          the corresponding ASP (see: <xref target="scaling"/>).</t>

          <t>After the initial DHCPv6 PD Solicit/Reply and IPv6 ND RS/RA
          exchanges, the AERO Server maintains the neighbor cache entry for
          the Client until the PD lifetimes expire. If the Client issues a
          Renew, the Server extends the PD lifetimes. If the Client issues a
          Release, or if the Client does not issue a Renew before the lifetime
          expires, the Server deletes the neighbor cache entry for the Client
          and withdraws the IP routes from the AERO routing system.</t>

          <section title="Lightweight DHCPv6 Relay Agent (LDRA)">
            <t>AERO Clients and Servers are always on the same link (i.e., the
            AERO link) from the perspective of DHCPv6. However, in some
            implementations the DHCPv6 server and AERO interface driver may be
            located in separate modules. In that case, the Server's AERO
            interface driver module can act as a Lightweight DHCPv6 Relay
            Agent (LDRA)<xref target="RFC6221"> </xref> to relay DHCPv6
            messages to and from the DHCPv6 server module.</t>

            <t>When the LDRA receives a DHCPv6 message from a Client addressed
            to either 'All_DHCP_Relay_Agents_and_Servers' or the Server's
            fe80::ID unicast address, it wraps the message in a Relay-Forward
            message header and includes an Interface-ID option that includes
            enough information to allow the LDRA to forward the resulting
            Reply message back to the Client (this information may include the
            Client's UDP and IP addresses, a security association identifier,
            etc). The LDRA then forwards the message to the DHCPv6 server.</t>

            <t>When the DHCPv6 server prepares a Reply message, it wraps the
            message in a Relay-Reply message and echoes the Interface-ID
            option. The DHCPv6 server then delivers the Relay-Reply message to
            the LDRA, which discards the Relay-Reply wrapper and delivers the
            DHCPv6 message to the Client based on the information in the
            Interface ID option.</t>
          </section>
        </section>
      </section>

      <section anchor="predirect" title="AERO Interface Route Optimization">
        <t>When a source Client forwards packets to a prospective
        correspondent Client within the same AERO link domain (i.e., one for
        which the packet's destination address is covered by an ASP), the
        source Client MAY initiate an AERO link route optimization procedure.
        The procedure is based on an exchange of IPv6 ND messages using a
        chain of AERO Servers and Relays as a trust basis.</t>

        <t>Although the Client is responsible for initiating route
        optimization, the Server is the policy enforcement point that
        determines whether route optimization is permitted. For example, on
        some AERO links route optimization would allow traffic to circumvent
        critical network-based traffic interception points. In those cases,
        the Server can simply discard any route optimization messages instead
        of forwarding them.</t>

        <t>The following sections specify the AERO link route optimization
        procedure.</t>

        <section anchor="avoidance-fig" title="Reference Operational Scenario">
          <t><xref target="no-onlink-prefix-fig"/> depicts the AERO link route
          optimization reference operational scenario, using IPv6 addressing
          as the example (while not shown, a corresponding example for IPv4
          addressing can be easily constructed). The figure shows an AERO
          Relay ('R1'), two AERO Servers ('S1', 'S2'), two AERO Clients ('C1',
          'C2') and two ordinary IPv6 hosts ('H1', 'H2'):</t>

          <figure anchor="no-onlink-prefix-fig"
                  title="AERO Reference Operational Scenario">
            <artwork><![CDATA[         +--------------+  +--------------+  +--------------+
         |   Server S1  |  |    Relay R1  |  |   Server S2  |
         +--------------+  +--------------+  +--------------+
             fe80::2            fe80::1           fe80::3
              L2(S1)             L2(R1)            L2(S2) 
                |                  |                 |
    X-----+-----+------------------+-----------------+----+----X
          |       AERO Link                               |
        L2(C1)                                          L2(C2)
 fe80::2001:db8:0:0                               fe80::2001:db8:1:0
  +--------------+                                 +--------------+
  |AERO Client C1|                                 |AERO Client C2|
  +--------------+                                 +--------------+
  2001:DB8:0::/48                                  2001:DB8:1::/48
          |                                                |
         .-.                                              .-.
      ,-(  _)-.   2001:db8:0::1      2001:db8:1::1     ,-(  _)-.
   .-(_  IP   )-.   +-------+          +-------+    .-(_  IP   )-.
 (__    EUN      )--|Host H1|          |Host H2|--(__    EUN      )
    `-(______)-'    +-------+          +-------+     `-(______)-'
]]></artwork>
          </figure>

          <t>In <xref target="no-onlink-prefix-fig"/>, Relay ('R1') assigns
          the administratively-provisioned link-local address fe80::1 to its
          AERO interface with link-layer address L2(R1), Server ('S1') assigns
          the address fe80::2 with link-layer address L2(S1),and Server ('S2')
          assigns the address fe80::3 with link-layer address L2(S2). Servers
          ('S1') and ('S2') next arrange to add their link-layer addresses to
          a published list of valid Servers for the AERO link.</t>

          <t>AERO Client ('C1') receives the ACP 2001:db8:0::/48 in a DHCPv6
          PD exchange via AERO Server ('S1') then assigns the address
          fe80::2001:db8:0:0 to its AERO interface with link-layer address
          L2(C1). Client ('C1') configures a default route and neighbor cache
          entry via the AERO interface with next-hop address fe80::2 and
          link-layer address L2(S1), then sub-delegates the ACP to its
          attached EUNs. IPv6 host ('H1') connects to the EUN, and configures
          the address 2001:db8:0::1.</t>

          <t>AERO Client ('C2') receives the ACP 2001:db8:1::/48 in a DHCPv6
          PD exchange via AERO Server ('S2') then assigns the address
          fe80::2001:db8:1:0 to its AERO interface with link-layer address
          L2(C2). Client ('C2') configures a default route and neighbor cache
          entry via the AERO interface with next-hop address fe80::3 and
          link-layer address L2(S2), then sub-delegates the ACP to its
          attached EUNs. IPv6 host ('H2') connects to the EUN, and configures
          the address 2001:db8:1::1.</t>
        </section>

        <section anchor="conops" title="Concept of Operations">
          <t>Again, with reference to <xref target="no-onlink-prefix-fig"/>,
          when source host ('H1') sends a packet to destination host ('H2'),
          the packet is first forwarded over the source host's attached EUN to
          Client ('C1'). Client ('C1') then forwards the packet via its AERO
          interface to Server ('S1') and also sends a Predirect message toward
          Client ('C2') via Server ('S1'). Server ('S1') then re-encapsulates
          and forwards both the packet and the Predirect message out the same
          AERO interface toward Client ('C2') via Relay ('R1').</t>

          <t>When Relay ('R1') receives the packet and Predirect message, it
          consults its forwarding table to discover Server ('S2') as the next
          hop toward Client ('C2'). Relay ('R1') then forwards both the packet
          and the Predirect message to Server ('S2'), which then forwards them
          to Client ('C2').</t>

          <t>After Client ('C2') receives the Predirect message, it process
          the message and returns a Redirect message toward Client ('C1') via
          Server ('S2'). During the process, Client ('C2') also creates or
          updates a dynamic neighbor cache entry for Client ('C1').</t>

          <t>When Server ('S2') receives the Redirect message, it
          re-encapsulates the message and forwards it on to Relay ('R1'),
          which forwards the message on to Server ('S1') which forwards the
          message on to Client ('C1'). After Client ('C1') receives the
          Redirect message, it processes the message and creates or updates a
          dynamic neighbor cache entry for Client ('C2').</t>

          <t>Following the above Predirect/Redirect message exchange,
          forwarding of packets from Client ('C1') to Client ('C2') without
          involving any intermediate nodes is enabled. The mechanisms that
          support this exchange are specified in the following sections.</t>
        </section>

        <section anchor="rmsg" title="Message Format">
          <t>AERO Redirect/Predirect messages use the same format as for IPv6
          ND Redirect messages depicted in Section 4.5 of <xref
          target="RFC4861"/>. AERO Redirect/Predirect messages formats are
          identical except that Redirect messages use Code=0, while Predirect
          messages use Code=1. The Redirect/Predirect message format is shown
          in <xref target="aero-redirect"/>:</t>

          <figure anchor="aero-redirect"
                  title="AERO Redirect/Predirect Message Format">
            <artwork><![CDATA[       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Type (=137)  |  Code (=0/1)  |          Checksum             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Reserved                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                                                               +
      |                                                               |
      +                       Target Address                          +
      |                                                               |
      +                                                               +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                                                               +
      |                                                               |
      +                     Destination Address                       +
      |                                                               |
      +                                                               +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Options ...
      +-+-+-+-+-+-+-+-+-+-+-+-
]]></artwork>
          </figure>

          <t/>
        </section>

        <section anchor="sending_pre" title="Sending Predirects">
          <t>When a Client forwards a packet with a source address from one of
          its ACPs toward a destination address covered by an ASP (i.e.,
          toward another AERO Client connected to the same AERO link), the
          source Client MAY send a Predirect message forward toward the
          destination Client via the Server.</t>

          <t>In the reference operational scenario, when Client ('C1')
          forwards a packet toward Client ('C2'), it MAY also send a Predirect
          message forward toward Client ('C2'), subject to rate limiting (see
          Section 8.2 of <xref target="RFC4861"/>). Client ('C1') prepares the
          Predirect message as follows:</t>

          <t><list style="symbols">
              <t>the link-layer source address is set to 'L2(C1)' (i.e., the
              link-layer address of Client ('C1')).</t>

              <t>the link-layer destination address is set to 'L2(S1)' (i.e.,
              the link-layer address of Server ('S1')).</t>

              <t>the network-layer source address is set to fe80::2001:db8:0:0
              (i.e., the base AERO address of Client ('C1')).</t>

              <t>the network-layer destination address is set to the AERO
              address corresponding to the destination address of Client
              ('C2').</t>

              <t>the Type is set to 137.</t>

              <t>the Code is set to 1 to indicate "Predirect".</t>

              <t>the Target Address is set to fe80::2001:db8:0:0 (i.e., the
              base AERO address of Client ('C1')).</t>

              <t>the Destination Address is set to the source address of the
              originating packet that triggered the Predirection event. (If
              the originating packet is an IPv4 packet, the address is
              constructed in IPv4-mapped IPv6 address format).</t>

              <t>the message includes one or more TLLAOs set to appropriate
              values for Client ('C1')'s underlying interfaces.</t>

              <t>the message includes one or more Route Information Options
              (RIOs) <xref target="RFC4191"/> that include Client ('C1')'s
              ACPs.</t>

              <t>the message SHOULD include a Timestamp option and a Nonce
              option.</t>

              <t>the message includes a Redirected Header Option (RHO) that
              contains the originating packet truncated if necessary to ensure
              that at least the network-layer header is included but the size
              of the message does not exceed 1280 bytes.</t>
            </list></t>

          <t>Note that the act of sending Predirect messages is cited as
          "MAY", since Client ('C1') may have advanced knowledge that the
          direct path to Client ('C2') would be unusable or otherwise
          undesirable. If the direct path later becomes unusable after the
          initial route optimization, Client ('C1') simply allows packets to
          again flow through Server ('S1').</t>
        </section>

        <section anchor="relaying_pre"
                 title="Re-encapsulating and Relaying Predirects">
          <t>When Server ('S1') receives a Predirect message from Client
          ('C1'), it first verifies that the TLLAOs in the Predirect are a
          proper subset of the Interface IDs in Client ('C1')'s neighbor cache
          entry. If the Client's TLLAOs are not acceptable, Server ('S1')
          discards the message. Otherwise, Server ('S1') validates the message
          according to the Redirect message validation rules in Section 8.1 of
          <xref target="RFC4861"/>, except that the Predirect has Code=1.
          Server ('S1') also verifies that Client ('C1') is authorized to use
          the ACPs encoded in the RIOs of the Predirect. If validation fails,
          Server ('S1') discards the Predirect; otherwise, it copies the
          correct UDP Port number and IP Address for Client ('C1')'s
          underlying link into the first TLLAO in case the addresses have been
          subject to NAT.</t>

          <t>Server ('S1') then examines the network-layer destination address
          of the Predirect to determine the next hop toward Client ('C2') by
          searching for the AERO address in the neighbor cache. Since Client
          ('C2') is not one of its neighbors, Server ('S1') re-encapsulates
          the Predirect and relays it via Relay ('R1') by changing the
          link-layer source address of the message to 'L2(S1)' and changing
          the link-layer destination address to 'L2(R1)'. Server ('S1')
          finally forwards the re-encapsulated message to Relay ('R1') without
          decrementing the network-layer TTL/Hop Limit field.</t>

          <t>When Relay ('R1') receives the Predirect message from Server
          ('S1') it determines that Server ('S2') is the next hop toward
          Client ('C2') by consulting its forwarding table. Relay ('R1') then
          re-encapsulates the Predirect while changing the link-layer source
          address to 'L2(R1)' and changing the link-layer destination address
          to 'L2(S2)'. Relay ('R1') then relays the Predirect via Server
          ('S2').</t>

          <t>When Server ('S2') receives the Predirect message from Relay
          ('R1') it determines that Client ('C2') is a neighbor by consulting
          its neighbor cache. Server ('S2') then re-encapsulates the Predirect
          while changing the link-layer source address to 'L2(S2)' and
          changing the link-layer destination address to 'L2(C2)'. Server
          ('S2') then forwards the message to Client ('C2').</t>
        </section>

        <section anchor="processing_pre"
                 title="Processing Predirects and Sending Redirects">
          <t>When Client ('C2') receives the Predirect message, it accepts the
          Predirect only if the message has a link-layer source address of one
          of its Servers (e.g., L2(S2)). Client ('C2') further accepts the
          message only if it is willing to serve as a redirection target.
          Next, Client ('C2') validates the message according to the Redirect
          message validation rules in Section 8.1 of <xref target="RFC4861"/>,
          except that it accepts the message even though Code=1 and even
          though the network-layer source address is not that of it's current
          first-hop router.</t>

          <t>In the reference operational scenario, when Client ('C2')
          receives a valid Predirect message, it either creates or updates a
          dynamic neighbor cache entry that stores the Target Address of the
          message as the network-layer address of Client ('C1') , stores the
          link-layer addresses found in the TLLAOs as the link-layer addresses
          of Client ('C1'), and stores the ACPs encoded in the RIOs of the
          Predirect as the ACPs for Client ('C1'). Client ('C2') then sets
          AcceptTime for the neighbor cache entry to ACCEPT_TIME.</t>

          <t>After processing the message, Client ('C2') prepares a Redirect
          message response as follows:</t>

          <t><list style="symbols">
              <t>the link-layer source address is set to 'L2(C2)' (i.e., the
              link-layer address of Client ('C2')).</t>

              <t>the link-layer destination address is set to 'L2(S2)' (i.e.,
              the link-layer address of Server ('S2')).</t>

              <t>the network-layer source address is set to fe80::2001:db8:1:0
              (i.e., the base AERO address of Client ('C2')).</t>

              <t>the network-layer destination address is set to
              fe80::2001:db8:0:0 (i.e., the base AERO address of Client
              ('C1')).</t>

              <t>the Type is set to 137.</t>

              <t>the Code is set to 0 to indicate "Redirect".</t>

              <t>the Target Address is set to fe80::2001:db8:1:0 (i.e., the
              base AERO address of Client ('C2')).</t>

              <t>the Destination Address is set to the destination address of
              the originating packet that triggered the Redirection event. (If
              the originating packet is an IPv4 packet, the address is
              constructed in IPv4-mapped IPv6 address format).</t>

              <t>the message includes one or more TLLAOs set to appropriate
              values for Client ('C2')'s underlying interfaces.</t>

              <t>the message includes one or more Route Information Options
              (RIOs) that include Client ('C2')'s ACPs.</t>

              <t>the message SHOULD include a Timestamp option and MUST echo
              the Nonce option received in the Predirect (i.e., if a Nonce
              option is included).</t>

              <t>the message includes as much of the RHO copied from the
              corresponding Predirect message as possible such that at least
              the network-layer header is included but the size of the message
              does not exceed 1280 bytes.</t>
            </list></t>

          <t>After Client ('C2') prepares the Redirect message, it sends the
          message to Server ('S2').</t>
        </section>

        <section anchor="relaying_re"
                 title="Re-encapsulating and Relaying Redirects">
          <t>When Server ('S2') receives a Redirect message from Client
          ('C2'), it first verifies that the TLLAOs in the Redirect are a
          proper subset of the Interface IDs in Client ('C2')'s neighbor cache
          entry. If the Client's TLLAOs are not acceptable, Server ('S2')
          discards the message. Otherwise, Server ('S2') validates the message
          according to the Redirect message validation rules in Section 8.1 of
          <xref target="RFC4861"/>. Server ('S2') also verifies that Client
          ('C2') is authorized to use the ACPs encoded in the RIOs of the
          Redirect message. If validation fails, Server ('S2') discards the
          Redirect; otherwise, it copies the correct UDP Port number and IP
          Address for Client ('C2')'s underlying link into the first TLLAO in
          case the addresses have been subject to NAT.</t>

          <t>Server ('S2') then examines the network-layer destination address
          of the Redirect to determine the next hop toward Client ('C1') by
          searching for the AERO address in the neighbor cache. Since Client
          ('C1') is not a neighbor, Server ('S2') re-encapsulates the Redirect
          and relays it via Relay ('R1') by changing the link-layer source
          address of the message to 'L2(S2)' and changing the link-layer
          destination address to 'L2(R1)'. Server ('S2') finally forwards the
          re-encapsulated message to Relay ('R1') without decrementing the
          network-layer TTL/Hop Limit field.</t>

          <t>When Relay ('R1') receives the Redirect message from Server
          ('S2') it determines that Server ('S1') is the next hop toward
          Client ('C1') by consulting its forwarding table. Relay ('R1') then
          re-encapsulates the Redirect while changing the link-layer source
          address to 'L2(R1)' and changing the link-layer destination address
          to 'L2(S1)'. Relay ('R1') then relays the Redirect via Server
          ('S1').</t>

          <t>When Server ('S1') receives the Redirect message from Relay
          ('R1') it determines that Client ('C1') is a neighbor by consulting
          its neighbor cache. Server ('S1') then re-encapsulates the Redirect
          while changing the link-layer source address to 'L2(S1)' and
          changing the link-layer destination address to 'L2(C1)'. Server
          ('S1') then forwards the message to Client ('C1').</t>
        </section>

        <section anchor="processing_re" title="Processing Redirects">
          <t>When Client ('C1') receives the Redirect message, it accepts the
          message only if it has a link-layer source address of one of its
          Servers (e.g., 'L2(S1)'). Next, Client ('C1') validates the message
          according to the Redirect message validation rules in Section 8.1 of
          <xref target="RFC4861"/>, except that it accepts the message even
          though the network-layer source address is not that of it's current
          first-hop router. Following validation, Client ('C1') then processes
          the message as follows.</t>

          <t>In the reference operational scenario, when Client ('C1')
          receives the Redirect message, it either creates or updates a
          dynamic neighbor cache entry that stores the Target Address of the
          message as the network-layer address of Client ('C2'), stores the
          link-layer addresses found in the TLLAOs as the link-layer addresses
          of Client ('C2') and stores the ACPs encoded in the RIOs of the
          Redirect as the ACPs for Client ('C2').. Client ('C1') then sets
          ForwardTime for the neighbor cache entry to FORWARD_TIME.</t>

          <t>Now, Client ('C1') has a neighbor cache entry with a valid
          ForwardTime value, while Client ('C2') has a neighbor cache entry
          with a valid AcceptTime value. Thereafter, Client ('C1') may forward
          ordinary network-layer data packets directly to Client ('C2')
          without involving any intermediate nodes, and Client ('C2') can
          verify that the packets came from an acceptable source. (In order
          for Client ('C2') to forward packets to Client ('C1'), a
          corresponding Predirect/Redirect message exchange is required in the
          reverse direction; hence, the mechanism is asymmetric.)</t>
        </section>

        <section anchor="server_client_re"
                 title="Server-to-Client and Client-to-Server Redirection">
          <t>In some environments, the Server nearest the target Client may
          need to serve as a proxy redirection target, e.g., if direct
          Client-to-Client communications are not possible. In that case, when
          the source Client sends a Predirect message the target Server
          prepares a corresponding Redirect the same as if it were the target
          Client (see: <xref target="processing_pre"/>), except that it writes
          its own link-layer address in the TLLAO option. The Server must then
          maintain a dynamic neighbor cache entry for the redirected source
          Client.</t>

          <t>Similarly, when the source Client must send all packets via its
          own Server and cannot act on a route optimization request, the
          source Server can send a Predirect message toward the target Client.
          The target Client then prepares a corresponding Redirect message the
          same as for Client-to-Client route optimization and sends the
          Redirect message back to the source Server.</t>

          <t>Thereafter, if a Client moves to a new Server, the old Server
          sends ICMP "Destination Unreachable" messages subject to rate
          limiting in response to data packets received from a correspondent
          node to report that the route optimization ForwardTime should be set
          to 0. The correspondent Client (or Server) then allows future
          packets destined to the departed Client to again flow through its
          own Server (or Relay).</t>

          <t>In any case, a Server MUST NOT send a BGP update to its Relays
          for Clients discovered through dynamic route optimization
          redirection. BGP updates are only to be sent for the Server's
          working set of statically-associated Clients.</t>
        </section>

        <section anchor="server_server_re"
                 title="Server-to-Server Redirection">
          <t>If neither the source nor target Clients are capable of sending
          packets other than via their own Servers, a Server-to-Server route
          optimization can still be employed. In that case, the source
          Client's Server can send a Predirect message via a Relay to the AERO
          address of the target Client, and the Relay will forward the message
          to the target Client's Server. The target Server prepares the
          Redirect message the same as if it were the target Client, except
          that it writes its own link-layer address in the TLLAO option then
          sends a Redirect message back to the source Server via the Relay.
          Both Servers must then maintain a dynamic neighbor cache entry for
          the redirected Clients.</t>

          <t>Thereafter, if a Client moves to a new Server, the old Server
          sends ICMP "Destination Unreachable" messages subject to rate
          limiting in response to data packets forwarded by the correspondent
          Server to report that the route optimization ForwardTime should be
          set to 0. The correspondent Server then allows future packets
          destined to the departed Client to again flow through its own
          Relay.</t>

          <t>In any case, a Server MUST NOT send a BGP update to its Relays
          for Clients discovered through dynamic route optimization
          redirection. BGP updates are only to be sent for the Server's
          working set of statically-associated Clients..</t>
        </section>
      </section>

      <section anchor="nud" title="Neighbor Unreachability Detection (NUD)">
        <t>AERO nodes perform Neighbor Unreachability Detection (NUD) by
        sending unicast NS messages with SLLAOs to elicit solicited NA
        messages from neighbors the same as described in <xref
        target="RFC4861"/>. NUD is performed either reactively in response to
        persistent L2 errors (see <xref target="aeroerr"/>) or proactively to
        test existing neighbor cache entries and/or update link-layer
        information.</t>

        <t>When an AERO node sends an NS/NA message, it MUST use one of its
        link-local addresses as the IPv6 source address and a link-local
        address of the neighbor as the IPv6 destination address. When an AERO
        node receives an NS message or a solicited NA message, it accepts the
        message if it has a neighbor cache entry for the neighbor; otherwise,
        it ignores the message.</t>

        <t>When a source Client is redirected to a target Client it SHOULD
        proactively test the direct path by sending an initial NS message to
        elicit a solicited NA response. While testing the path, the source
        Client can optionally continue sending packets via the Server,
        maintain a small queue of packets until target reachability is
        confirmed, or (optimistically) allow packets to flow directly to the
        target. The source Client SHOULD thereafter periodically test the
        direct path to the target Client (see Section 7.3 of <xref
        target="RFC4861"/>) in order to keep dynamic neighbor cache entries
        alive. If the source Client is unable to elicit a solicited NA
        response from the target Client after MaxRetry attempts, it SHOULD set
        ForwardTime to 0 and resume sending packets via one of its Servers.
        Otherwise, the source Client considers the path usable and SHOULD
        thereafter process any link-layer errors as a hint that the direct
        path to the target Client has either failed or has become
        intermittent.</t>

        <t>When ForwardTime for a dynamic neighbor cache entry expires, the
        source Client resumes sending any subsequent packets via a Server and
        may (eventually) attempt to re-initiate the AERO redirection process.
        When AcceptTime for a dynamic neighbor cache entry expires, the target
        Client discards any subsequent packets received directly from the
        source Client. When both ForwardTime and AcceptTime for a dynamic
        neighbor cache entry expire, the Client deletes the neighbor cache
        entry.</t>
      </section>

      <section anchor="aeromob" title="Mobility Management">
        <section anchor="llchange"
                 title="Announcing Link-Layer Address Changes">
          <t>When a Client needs to change its link-layer addresses, e.g., due
          to a mobility event, it sends unsolicited NAs to its neighbors using
          the new link-layer address as the source address and with TLLAOs
          that include the updated Client link-layer information.</t>

          <t>The Client MAY send up to MaxRetry unsolicited NA messages in
          parallel with sending actual data packets in case one or more NAs
          are lost. If all NAs are lost, the Client will eventually invoke NUD
          by sending NS messages that include SLLAOs.</t>
        </section>

        <section anchor="newlink" title="Bringing New Links Into Service">
          <t>When a Client needs to bring new underlying interfaces into
          service (e.g., when it activates a new data link), it sends
          unsolicited NAs to its neighbors using the new link-layer address as
          the source address and with TLLAOs that include the new Client
          link-layer information.</t>
        </section>

        <section anchor="rmlink" title="Removing Existing Links from Service">
          <t>When a Client needs to remove existing underlying interfaces from
          service (e.g., when it de-activates an existing data link), it sends
          unsolicited NAs to its neighbors with TLLAOs that include P(i)
          values set to "disabled".</t>

          <t>If the Client needs to send the unsolicited NAs over a link other
          than the one being removed from service, it MUST include a TLLAO for
          the sending link as the first TLLAO and include the TLLAO for the
          link being removed from service as an additional TLLAO.</t>
        </section>

        <section anchor="imcplicit" title="Implicit Mobility Management">
          <t>AERO interface neighbors MAY include a configuration knob that
          allows them to perform implicit mobility management in which no IPv6
          ND messaging is used. In that case, the Client only transmits
          packets over a single interface at a time, and the neighbor always
          observes packets arriving from the Client from the same link-layer
          source address.</t>

          <t>If the Client's underlying interface address changes (either due
          to a readdressing of the original interface or switching to a new
          interface) the neighbor immediately updates the neighbor cache entry
          for the Client and begins accepting and sending packets to the
          Client's new link-layer address. This implicit mobility method
          applies to use cases such as cellphones with both WiFi and Cellular
          interfaces where only one of the interfaces is active at a given
          time, and the Client automatically switches over to the backup
          interface if the primary interface fails.</t>
        </section>

        <section anchor="newsrv" title="Moving to a New Server">
          <t>When a Client associates with a new Server, it performs the
          Client procedures specified in <xref target="aeropd-client"/>.</t>

          <t>When a Client disassociates with an existing Server, it sends a
          DHCPv6 Release message via a new Server with its base AERO address
          as the network-layer source address and the unicast link-local
          address of the old Server as the network-layer destination address.
          The new Server then encapsulates the Release message in a DHCPv6
          Relay-Forward message header, writes the Client's source address in
          the 'peer-address' field, and writes its own link-local address in
          the IP source address (i.e., the new Server acts as a DHCPv6 relay
          agent). The new Server then forwards the message to a Relay, which
          forwards the message to the old Server based on the network-layer
          destination address.</t>

          <t>When the old Server receives the Release, it first authenticates
          the message then releases the DHCPv6 PDs and deletes the Client's
          ACP routes. The old Server then deletes the Client's neighbor cache
          entry so that any in-flight packets will be forwarded via a Relay to
          the new Server, which will forward them to the Client. The old
          Server finally returns a DHCPv6 Relay-Reply message via an AERO
          Relay to the new Server, which will decapsulate the DHCPv6 Reply
          message and forward it to the Client.</t>

          <t>When the new Server forwards the Reply message, the Client can
          delete both the default route and the neighbor cache entry for the
          old Server. (Note that since Release/Reply messages may be lost in
          the network the Client SHOULD retry until it gets a Reply indicating
          that the Release was successful. If the Client does not receive a
          Reply after MaxRetry attempts, the old Server may have failed and
          the Client should discontinue its Release attempts.)</t>

          <t>Note that this DHCPv6 relay-chaining approach is necessary to
          avoid failures, e.g., due to temporary routing fluctuations. In
          particular, the Client should always be able to forward messages via
          its new Server but may not always be able to send messages directly
          to an old Server. But, the new Server and Old Server should always
          be able to exchange messages with one another.</t>

          <t>Finally, Clients SHOULD NOT move rapidly between Servers in order
          to avoid causing excessive oscillations in the AERO routing system.
          Such oscillations could result in intermittent reachability for the
          Client itself, while causing little harm to the network. Examples of
          when a Client might wish to change to a different Server include a
          Server that has gone unreachable, topological movements of
          significant distance, etc.</t>
        </section>

        <section anchor="queue" title="Packet Queueing for Mobility">
          <t>AERO Clients and Servers should maintain a small queue of packets
          they have recently sent to an AERO neighbor, e.g., a 1 second
          window. If the AERO neighbor moves, the AERO node MAY retransmit the
          queued packets to ensure that they are delivered to the AERO
          neighbor's new location.</t>

          <t>Note that this may have performance implications for asymmetric
          paths. For example, if the AERO neighbor moves from a 50Mbps link to
          a 128Kbps link, retransmitting a 1 second window could cause
          significant congestion. However, any retransmission bursts will
          subside after the 1 second window.</t>
        </section>
      </section>

      <section anchor="mcast" title="Multicast Considerations">
        <t>When the underlying network does not support multicast, AERO
        Clients map link-scoped multicast addresses to the link-layer address
        of a Server, which acts as a multicast forwarding agent. The AERO
        Client also serves as an IGMP/MLD Proxy for its EUNs and/or hosted
        applications per <xref target="RFC4605"/> while using the link-layer
        address of the Server as the link-layer address for all multicast
        packets.</t>

        <t>When the underlying network supports multicast, AERO nodes use the
        multicast address mapping specification found in <xref
        target="RFC2529"/> for IPv4 underlying networks and use a TBD
        site-scoped multicast mapping for IPv6 underlying networks. In that
        case, border routers must ensure that the encapsulated site-scoped
        multicast packets do not leak outside of the site spanned by the AERO
        link.</t>
      </section>
    </section>

    <section anchor="variant" title="AERO Variations">
      <t>AERO can be used in many different variations based on the specific
      use case. The following sections discuss variations that adhere to the
      AERO principles while allowing selective application of AERO
      components.</t>

      <section anchor="hostonly"
               title="Operation on Host-Only IPv6 AERO Links">
        <t>IPv6 AERO links typically have ASPs that cover many candidate ACPs
        of length /64 or shorter. However, in some cases it may be desirable
        to use AERO over links that have only a /64 ASP. This can be
        accommodated by treating all Clients on the AERO link as simple hosts
        that receive /128 prefix delegations.</t>

        <t>In that case, each Client configures an
        administratively-provisioned link-local address instead of an AERO
        address, i.e., the same as for Servers and Relays. The Client
        discovers its link-local address by including an IA_NA option in its
        DHCPv6 Solicit message to the Server. The Server responds by returning
        the Client's administratively-provisioned link-local address in the
        IA_NA option plus any IPv6 addresses for the Client in IA_PD options
        with prefix length /128.</t>

        <t>For example, if the ASP for the host-only IPv6 AERO link is
        2001:db8:1000:2000::/64, each Client will receive one or more /128
        IPv6 prefix delegations such as 2001:db8:1000:2000::1/128,
        2001:db8:1000:2000::2/128, etc. The Client then assigns the /128s to
        the AERO interface as IPv6 addresses, and the Client's applications
        treat the AERO interface as an ordinary host interface.</t>

        <t>In this arrangement, the Client conducts route optimization in the
        same sense as discussed in <xref target="predirect"/>, except that the
        Predirect message network-layer source address is the Client's
        administratively-assigned link-local address and the network-layer
        destination address is the same as the destination address of the
        packet that triggered the redirection. All other aspects of AERO
        operation are the same as described in earlier sections.</t>

        <t>This has applicability for nodes that act as a Client on an
        "upstream" AERO link, but also act as a Server on "downstream" AERO
        links. More specifically, if the node acts as a Client to receive a
        /64 prefix from the upstream AERO link it can then act as a Server to
        provision /128s to Clients on downstream AERO links.</t>

        <t>Note that, due to the nature of the AERO address format, valid IPv6
        ACP lengths are either /64 or shorter, or exactly /128 (i.e., prefix
        lengths between /65 and /127 cannot be accommodated).</t>
      </section>

      <section anchor="nodhcp"
               title="Operation on AERO Links Without DHCPv6 Services">
        <t>When Servers on the AERO link do not provide DHCPv6 services,
        operation can still be accommodated through administrative
        configuration of ACPs on AERO Clients. In that case, administrative
        configurations of AERO interface neighbor cache entries on both the
        Server and Client are also necessary. However, this may interfere with
        the ability for Clients to dynamically change to new Servers, and can
        expose the AERO link to misconfigurations unless the administrative
        configurations are carefully coordinated.</t>
      </section>

      <section anchor="serverless" title="Operation on Server-less AERO Links">
        <t>In some AERO link scenarios, there may be no Servers on the link
        and/or no need for Clients to use a Server as an intermediary trust
        anchor. In that case, each Client acts as a Server unto itself to
        establish neighbor cache entries by performing direct Client-to-Client
        IPv6 ND message exchanges, and some other form of trust basis must be
        applied so that each Client can verify that the prospective neighbor
        is authorized to use its claimed ACP.</t>

        <t>When there is no Server on the link, Clients must arrange to
        receive ACPs and publish them via a secure alternate PD authority
        through some means outside the scope of this document.</t>
      </section>

      <section anchor="noclient" title="Operation on Client-less AERO Links">
        <t>In some environments, the AERO service may be useful for mobile
        nodes that do not implement the AERO Client function and do not
        perform encapsulation. For example, if the mobile node has a way of
        injecting its ACP into the access subnetwork routing system an AERO
        Server connected to the same access network can accept the ACP prefix
        injection as an indication that a new mobile node has come onto the
        subnetwork. The Server can then inject the ACP into the BGP routing
        system the same as if an AERO Client/Server DHCPv6 PD exchange had
        occurred. If the mobile node subsequently withdraws the ACP from the
        access network routing system, the Server can then withdraw the ACP
        from the BGP routing system.</t>

        <t>In this arrangement, AERO Servers and Relays are used in exactly
        the same ways as for environments where DHCPv6 Client/Server exchanges
        are supported. However, the access subnetwork routing systems must be
        capable of accommodating rapid ACP injections and withdrawals from
        mobile nodes with the understanding that the information must be
        propagated to all routers in the system. Operational experience has
        shown that this kind of routing system "churn" can lead to overall
        instability and routing system inconsistency.</t>
      </section>

      <section anchor="static-tunnel" title="Manually-Configured AERO Tunnels">
        <t>In addition to the dynamic neighbor discovery procedures for AERO
        link neighbors described above, AERO encapsulation can be applied to
        manually-configured tunnels. In that case, the tunnel endpoints use an
        administratively-provisioned link-local address and exchange NS/NA
        messages the same as for dynamically-established tunnels.</t>
      </section>

      <section anchor="pointtopoint"
               title="Encapsulation Avoidance on Relay-Server Dedicated Links">
        <t>In some environments, AERO Servers and Relays may be connected by
        dedicated point-to-point links, e.g., high speed fiberoptic leased
        lines. In that case, the Servers and Relays can participate in the
        AERO link the same as specified above but can avoid encapsulation over
        the dedicated links. In that case, however, the links would be
        dedicated for AERO and could not be multiplexed for both AERO and
        non-AERO communications.</t>
      </section>

      <section anchor="version"
               title="Encapsulation Protocol Version Considerations">
        <t>A source Client may connect only to an IPvX underlying network,
        while the target Client connects only to an IPvY underlying network.
        In that case, the target and source Clients have no means for reaching
        each other directly (since they connect to underlying networks of
        different IP protocol versions) and so must ignore any redirection
        messages and continue to send packets via their Servers.</t>
      </section>
    </section>

    <section anchor="implement" title="Implementation Status">
      <t>Production user-level and kernel-level AERO implementations have been
      developed and are undergoing internal testing within Boeing.</t>

      <t>An initial public release of the AERO proof-of-concept source code
      was announced on the intarea mailing list on August 21, 2015, and a
      pointer to the code is available in the list archives.</t>
    </section>

    <section anchor="iana" title="IANA Considerations">
      <t>The IANA has assigned a 4-octet Private Enterprise Number "45282" for
      AERO in the "enterprise-numbers" registry.</t>

      <t>The IANA has assigned the UDP port number "8060" for an earlier
      experimental version of AERO <xref target="RFC6706"/>. This document
      obsoletes <xref target="RFC6706"/> and claims the UDP port number "8060"
      for all future use.</t>

      <t>No further IANA actions are required.</t>
    </section>

    <section anchor="secure" title="Security Considerations">
      <t>AERO link security considerations are the same as for standard IPv6
      Neighbor Discovery <xref target="RFC4861"/> except that AERO improves on
      some aspects. In particular, AERO uses a trust basis between Clients and
      Servers, where the Clients only engage in the AERO mechanism when it is
      facilitated by a trust anchor.</t>

      <t>Redirect, Predirect and unsolicited NA messages SHOULD include a
      Timestamp option (see Section 5.3 of <xref target="RFC3971"/>) that
      other AERO nodes can use to verify the message time of origin.
      Predirect, NS and RS messages SHOULD include a Nonce option (see Section
      5.3 of <xref target="RFC3971"/>) that recipients echo back in
      corresponding responses.</t>

      <t>AERO links must be protected against link-layer address spoofing
      attacks in which an attacker on the link pretends to be a trusted
      neighbor. Links that provide link-layer securing mechanisms (e.g., IEEE
      802.1X WLANs) and links that provide physical security (e.g., enterprise
      network wired LANs) provide a first line of defense, however AERO nodes
      SHOULD also use DHCPv6 securing services (e.g., Secure DHCPv6 <xref
      target="I-D.ietf-dhc-sedhcpv6"/>, etc.) for Client authentication and
      network admission control. Following authenticated DHCPv6 PD procedures,
      AERO nodes MUST ensure that the source of data packets corresponds to
      the node to which the prefixes were delegated.</t>

      <t>AERO Clients MUST ensure that their connectivity is not used by
      unauthorized nodes on their EUNs to gain access to a protected network,
      i.e., AERO Clients that act as routers MUST NOT provide routing services
      for unauthorized nodes. (This concern is no different than for ordinary
      hosts that receive an IP address delegation but then "share" the address
      with other nodes via some form of Internet connection sharing.)</t>

      <t>AERO Clients, Servers and Relays on the open Internet are susceptible
      to the same attack profiles as for any Internet nodes. For this reason,
      IP security SHOULD be used when AERO is employed over
      unmanaged/unsecured links using securing mechanisms such as IPsec <xref
      target="RFC4301"/>, IKE <xref target="RFC5996"/> and/or TLS <xref
      target="RFC5246"/>. In some environments, however, the use of end-to-end
      security from Clients to correspondent nodes (i.e., other Clients and/or
      Internet nodes) could obviate the need for IP security between AERO
      Clients, Servers and Relays.</t>

      <t>AERO Servers and Relays present targets for traffic amplification DoS
      attacks. This concern is no different than for widely-deployed VPN
      security gateways in the Internet, where attackers could send spoofed
      packets to the gateways at high data rates. This can be mitigated by
      connecting Relays and Servers over dedicated links with no connections
      to the Internet and/or when connections to the Internet are only
      permitted through well-managed firewalls.</t>

      <t>Traffic amplfication DoS attacks can also target an AERO Client's low
      data rate links. This is a concern not only for Clients located on the
      open Internet but also for Clients in protected enclaves. AERO Servers
      can institute rate limits that protect Clients from receiving packet
      floods that could DoS low data rate links.</t>
    </section>

    <section anchor="ack" title="Acknowledgements">
      <t>Discussions both on IETF lists and in private exchanges helped shape
      some of the concepts in this work. Individuals who contributed insights
      include Mikael Abrahamsson, Mark Andrews, Fred Baker, Bob Braden,
      Stewart Bryant, Brian Carpenter, Wojciech Dec, Ralph Droms, Adrian
      Farrel, Sri Gundavelli, Brian Haberman, Joel Halpern, Tom Herbert,
      Sascha Hlusiak, Lee Howard, Andre Kostur, Ted Lemon, Andy Malis, Satoru
      Matsushima, Tomek Mrugalski, Alexandru Petrescu, Behcet Saikaya, Joe
      Touch, Bernie Volz, Ryuji Wakikawa and Lloyd Wood. Members of the IESG
      also provided valuable input during their review process that greatly
      improved the document. Discussions on the v6ops list in the December
      2015 through January 2016 timeframe further helped clarify AERO
      multi-addressing capabilities. Special thanks go to Stewart Bryant, Joel
      Halpern and Brian Haberman for their shepherding guidance during the
      publication of the AERO first edition.</t>

      <t>This work has further been encouraged and supported by Boeing
      colleagues including M. Wayne Benson, Dave Bernhardt, Cam Brodie,
      Balaguruna Chidambaram, Irene Chin, Bruce Cornish, Claudiu Danilov, Wen
      Fang, Anthony Gregory, Jeff Holland, Ed King, Gene MacLean III, Rob
      Muszkiewicz, Sean O'Sullivan, Kent Shuey, Brian Skeen, Mike Slane,
      Carrie Spiker, Brendan Williams, Julie Wulff, Yueli Yang, and other
      members of the BR&amp;T and BIT mobile networking teams. Wayne Benson is
      especially acknowledged for his outstanding work in converting the AERO
      proof-of-concept implementation into production-ready code.</t>

      <t>Earlier works on NBMA tunneling approaches are found in <xref
      target="RFC2529"/><xref target="RFC5214"/><xref target="RFC5569"/>.</t>

      <t>Many of the constructs presented in this second edition of AERO are
      based on the author's earlier works, including:</t>

      <t><list style="symbols">
          <t>The Internet Routing Overlay Network (IRON) <xref
          target="RFC6179"/><xref target="I-D.templin-ironbis"/></t>

          <t>Virtual Enterprise Traversal (VET) <xref target="RFC5558"/><xref
          target="I-D.templin-intarea-vet"/></t>

          <t>The Subnetwork Encapsulation and Adaptation Layer (SEAL) <xref
          target="RFC5320"/><xref target="I-D.templin-intarea-seal"/></t>

          <t>AERO, First Edition <xref target="RFC6706"/></t>
        </list>Note that these works cite numerous earlier efforts that are
      not also cited here due to space limitations. The authors of those
      earlier works are acknowledged for their insights.</t>

      <t>This work is aligned with the NASA Safe Autonomous Systems Operation
      (SASO) program under NASA contract number NNA16BD84C.</t>

      <t>This work is aligned with the FAA Aeronautical Telecommunications
      Network - Internet Protocol Services (ATN-IPS) program for the
      International Civil Aviation Organization (ICAO).</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.0768"?>

      <?rfc include="reference.RFC.0791"?>

      <?rfc include="reference.RFC.0792"?>

      <?rfc include="reference.RFC.2119"?>

      <?rfc include="reference.RFC.2003"?>

      <?rfc include="reference.RFC.2460"?>

      <?rfc include="reference.RFC.2473"?>

      <?rfc include="reference.RFC.2474"?>

      <?rfc include="reference.RFC.4213"?>

      <?rfc include="reference.RFC.4861"?>

      <?rfc include="reference.RFC.4862"?>

      <?rfc include="reference.RFC.6434"?>

      <?rfc include="reference.RFC.3633"?>

      <?rfc include="reference.RFC.3315"?>

      <?rfc include="reference.RFC.3971"?>

      <?rfc include="reference.RFC.4191"?>
    </references>

    <references title="Informative References">
      <?rfc include="reference.RFC.2675"?>

      <?rfc include="reference.RFC.1930"?>

      <?rfc include="reference.RFC.4271"?>

      <?rfc include="reference.RFC.2529"?>

      <?rfc include="reference.RFC.5214"?>

      <?rfc include="reference.RFC.4301"?>

      <?rfc include="reference.RFC.5569"?>

      <?rfc include="reference.RFC.6204"?>

      <?rfc include="reference.RFC.6980"?>

      <?rfc include="reference.RFC.0879"?>

      <?rfc include="reference.RFC.4821"?>

      <?rfc include="reference.RFC.6691"?>

      <?rfc include="reference.RFC.6935"?>

      <?rfc include="reference.RFC.6936"?>

      <?rfc include="reference.RFC.6438"?>

      <?rfc include="reference.RFC.6706"?>

      <?rfc include="reference.RFC.4963"?>

      <?rfc include="reference.RFC.6864"?>

      <?rfc include="reference.RFC.6146"?>

      <?rfc include="reference.RFC.7078"?>

      <?rfc include="reference.RFC.5996"?>

      <?rfc include="reference.RFC.6939"?>

      <?rfc include="reference.RFC.5522"?>

      <?rfc include="reference.RFC.4291"?>

      <?rfc include="reference.RFC.4994"?>

      <?rfc include="reference.RFC.5494"?>

      <?rfc include="reference.RFC.5246"?>

      <?rfc include="reference.RFC.6355"?>

      <?rfc include="reference.RFC.2923"?>

      <?rfc include="reference.RFC.3819"?>

      <?rfc include="reference.RFC.4443"?>

      <?rfc include="reference.RFC.1812"?>

      <?rfc include="reference.RFC.2131"?>

      <?rfc include="reference.RFC.5213"?>

      <?rfc include="reference.RFC.5844"?>

      <?rfc include="reference.RFC.6275"?>

      <?rfc include="reference.RFC.4555"?>

      <?rfc include="reference.RFC.1191"?>

      <?rfc include="reference.RFC.1981"?>

      <?rfc include="reference.RFC.1035"?>

      <?rfc include="reference.RFC.4592"?>

      <?rfc include="reference.RFC.3596"?>

      <?rfc include="reference.RFC.6179"?>

      <?rfc include="reference.RFC.5320"?>

      <?rfc include="reference.RFC.5558"?>

      <?rfc include="reference.RFC.5720"?>

      <?rfc include="reference.RFC.2784"?>

      <?rfc include="reference.RFC.2890"?>

      <?rfc include="reference.RFC.5949"?>

      <?rfc include="reference.RFC.6241"?>

      <?rfc include="reference.RFC.2983"?>

      <?rfc include="reference.RFC.3168"?>

      <?rfc include="reference.RFC.2764"?>

      <?rfc include="reference.RFC.6221"?>

      <?rfc include="reference.RFC.6422"?>

      <?rfc include="reference.RFC.4511"?>

      <?rfc include="reference.RFC.4605"?>

      <?rfc include="reference.RFC.1122"?>

      <?rfc include="reference.RFC.4459"?>

      <reference anchor="TUNTAP">
        <front>
          <title>http://en.wikipedia.org/wiki/TUN/TAP</title>

          <author fullname="Wikipedia" initials="W" surname="Wikipedia">
            <organization/>
          </author>

          <date month="October" year="2014"/>
        </front>
      </reference>

      <reference anchor="OVPN">
        <front>
          <title>http://openvpn.net</title>

          <author fullname="OpenVPN" initials="O" surname="OpenVPN">
            <organization/>
          </author>

          <date month="October" year="2016"/>
        </front>
      </reference>

      <?rfc include="reference.I-D.ietf-dhc-sedhcpv6"?>

      <?rfc include="reference.I-D.templin-ironbis"?>

      <?rfc include="reference.I-D.templin-intarea-seal"?>

      <?rfc include="reference.I-D.templin-intarea-vet"?>

      <?rfc include="reference.I-D.herbert-gue-fragmentation"?>

      <?rfc include="reference.I-D.ietf-nvo3-gue"?>

      <?rfc include="reference.I-D.templin-intarea-grefrag"?>

      <?rfc include="reference.I-D.ietf-intarea-tunnels"?>
    </references>

    <section anchor="minimal" title="AERO Alternate Encapsulations">
      <t>When GUE encapsulation is not needed, AERO can use common
      encapsulations such as IP-in-IP <xref target="RFC2003"/><xref
      target="RFC2473"/><xref target="RFC4213"/>, Generic Routing
      Encapsulation (GRE) <xref target="RFC2784"/><xref target="RFC2890"/> and
      others. The encapsulation is therefore only differentiated from non-AERO
      tunnels through the application of AERO control messaging and not
      through, e.g., a well-known UDP port number.</t>

      <t>As for GUE encapsulation, alternate AERO encapsulation formats may
      require encapsulation layer fragmentation. For simple IP-in-IP
      encapsulation, an IPv6 fragment header is inserted directly between the
      inner and outer IP headers when needed, i.e., even if the outer header
      is IPv4. The IPv6 Fragment Header is identified to the outer IP layer by
      its IP protocol number, and the Next Header field in the IPv6 Fragment
      Header identifies the inner IP header version. For GRE encapsulation, a
      GRE fragment header is inserted within the GRE header <xref
      target="I-D.templin-intarea-grefrag"/>.</t>

      <t><xref target="encaps"/> shows the AERO IP-in-IP encapsulation format
      before any fragmentation is applied:</t>

      <figure anchor="encaps"
              title="Minimal Encapsulation Format using IP-in-IP">
        <artwork><![CDATA[
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |     Outer IPv4 Header     |      |    Outer IPv6 Header      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |IPv6 Frag Header (optional)|      |IPv6 Frag Header (optional)|
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |      Inner IP Header      |      |       Inner IP Header     |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                           |      |                           |
     ~                           ~      ~                           ~
     ~    Inner Packet Body      ~      ~     Inner Packet Body     ~
     ~                           ~      ~                           ~
     |                           |      |                           |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+

     Minimal Encapsulation in IPv4      Minimal Encapsulation in IPv6

]]></artwork>
      </figure>

      <t><xref target="gre-encaps"/> shows the AERO GRE encapsulation format
      before any fragmentation is applied:</t>

      <t><figure anchor="gre-encaps" title="Minimal Encapsulation Using GRE">
          <artwork><![CDATA[
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Outer IP Header        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |          GRE Header           |
     | (with checksum, key, etc..)   |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     | GRE Fragment Header (optional)|
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |        Inner IP Header        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                               |
     ~                               ~
     ~      Inner Packet Body        ~
     ~                               ~
     |                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

]]></artwork>
        </figure></t>

      <t>Alternate encapsulation may be preferred in environments where GUE
      encapsulation would add unnecessary overhead. For example, certain
      low-bandwidth wireless data links may benefit from a reduced
      encapsulation overhead.</t>

      <t>GUE encapsulation can traverse network paths that are inaccessible to
      non-UDP encapsulations, e.g., for crossing Network Address Translators
      (NATs). More and more, network middleboxes are also being configured to
      discard packets that include anything other than a well-known IP
      protocol such as UDP and TCP. It may therefore be necessary to determine
      the potential for middlebox filtering before enabling alternate
      encapsulation in a given environment.</t>

      <t>In addition to IP-in-IP, GRE and GUE, AERO can also use security
      encapsulations such as IPsec and SSL/TLS. In that case, AERO control
      messaging and route determination occur before security encapsulation is
      applied for outgoing packets and after security decapsulation is applied
      for incoming packets.</t>

      <t>AERO is especially well suited for use with VPN system encapsulations
      such as OpenVPN <xref target="OVPN"/>.</t>
    </section>

    <section anchor="whentoinsert"
             title="When to Insert an Encapsulation Fragment Header">
      <t>An encapsulation fragment header is inserted when the AERO tunnel
      ingress needs to apply fragmentation to accommodate packets that must be
      delivered without loss due to a size restriction. Fragmentation is
      performed on the inner packet while encapsulating each inner packet
      fragment in outer IP and encapsulation layer headers that differ only in
      the fragment header fields.</t>

      <t>The fragment header can also be inserted in order to include a
      coherent Identification value with each packet, e.g., to aid in
      Duplicate Packet Detection (DPD). In this way, network nodes can cache
      the Identification values of recently-seen packets and use the cached
      values to determine whether a newly-arrived packet is in fact a
      duplicate. The Identification value within each packet could further
      provide a rough indicator of packet reordering, e.g., in cases when the
      tunnel egress wishes to discard packets that are grossly out of
      order.</t>

      <t>In some use cases, there may be operational assurance that no
      fragmentation of any kind will be necessary, or that only occasional
      large control messages will require fragmentation. In that case, the
      encapsulation fragment header can be omitted and ordinary fragmentation
      of the outer IP protocol version can be applied when necessary.</t>
    </section>

    <section title="Autoconfiguration for Constrained Platforms">
      <t>On some platforms (e.g., popular cell phone operating systems), the
      act of assigning a default IPv6 route and/or assigning an address to an
      interface may not be permitted from a user application due to security
      policy. Typically, those platforms include a TUN/TAP interface <xref
      target="TUNTAP"/> that acts as a point-to-point conduit between user
      applications and the AERO interface. In that case, the Client can
      instead generate a "synthesized RA" message. The message conforms to
      <xref target="RFC4861"/> and is prepared as follows:</t>

      <t><list style="symbols">
          <t>the IPv6 source address is the Client's AERO address</t>

          <t>the IPv6 destination address is all-nodes multicast</t>

          <t>the Router Lifetime is set to a time that is no longer than the
          ACP DHCPv6 lifetime</t>

          <t>the message does not include a Source Link Layer Address Option
          (SLLAO)</t>

          <t>the message includes a Prefix Information Option (PIO) with a /64
          prefix taken from the ACP as the prefix for autoconfiguration</t>
        </list>The Client then sends the synthesized RA message via the
      TUN/TAP interface, where the operating system kernel will interpret it
      as though it were generated by an actual router. The operating system
      will then install a default route and use StateLess Address
      AutoConfiguration (SLAAC) to configure an IPv6 address on the TUN/TAP
      interface. Methods for similarly installing an IPv4 default route and
      IPv4 address on the TUN/TAP interface are based on synthesized DHCPv4
      messages <xref target="RFC2131"/>.</t>
    </section>

    <section anchor="securitygw"
             title="Extending AERO Links Through Security Gateways">
      <t>When an enterprise mobile node moves from a campus LAN connection to
      a public Internet link, it must re-enter the enterprise via a security
      gateway that has both a physical interface connection to the Internet
      and a physical interface connection to the enterprise internetwork. This
      most often entails the establishment of a Virtual Private Network (VPN)
      link over the public Internet from the mobile node to the security
      gateway. During this process, the mobile node supplies the security
      gateway with its public Internet address as the link-layer address for
      the VPN. The mobile node then acts as an AERO Client to negotiate with
      the security gateway to obtain its ACP.</t>

      <t>In order to satisfy this need, the security gateway also operates as
      an AERO Server with support for AERO Client proxying. In particular,
      when a mobile node (i.e., the Client) connects via the security gateway
      (i.e., the Server), the Server provides the Client with an ACP in a
      DHCPv6 PD exchange the same as if it were attached to an enterprise
      campus access link. The Server then replaces the Client's link-layer
      source address with the Server's enterprise-facing link-layer address in
      all AERO messages the Client sends toward neighbors on the AERO link.
      The AERO messages are then delivered to other nodes on the AERO link as
      if they were originated by the security gateway instead of by the AERO
      Client. In the reverse direction, the AERO messages sourced by nodes
      within the enterprise network can be forwarded to the security gateway,
      which then replaces the link-layer destination address with the Client's
      link-layer address and replaces the link-layer source address with its
      own (Internet-facing) link-layer address.</t>

      <t>After receiving the ACP, the Client can send IP packets that use an
      address taken from the ACP as the network layer source address, the
      Client's link-layer address as the link-layer source address, and the
      Server's Internet-facing link-layer address as the link-layer
      destination address. The Server will then rewrite the link-layer source
      address with the Server's own enterprise-facing link-layer address and
      rewrite the link-layer destination address with the target AERO node's
      link-layer address, and the packets will enter the enterprise network as
      though they were sourced from a node located within the enterprise. In
      the reverse direction, when a packet sourced by a node within the
      enterprise network uses a destination address from the Client's ACP, the
      packet will be delivered to the security gateway which then rewrites the
      link-layer destination address to the Client's link-layer address and
      rewrites the link-layer source address to the Server's Internet-facing
      link-layer address. The Server then delivers the packet across the VPN
      to the AERO Client. In this way, the AERO virtual link is essentially
      extended *through* the security gateway to the point at which the VPN
      link and AERO link are effectively grafted together by the link-layer
      address rewriting performed by the security gateway. All AERO messaging
      services (including route optimization and mobility signaling) are
      therefore extended to the Client.</t>

      <t>In order to support this virtual link grafting, the security gateway
      (acting as an AERO Server) must keep static neighbor cache entries for
      all of its associated Clients located on the public Internet. The
      neighbor cache entry is keyed by the AERO Client's AERO address the same
      as if the Client were located within the enterprise internetwork. The
      neighbor cache is then managed in all ways as though the Client were an
      ordinary AERO Client. This includes the AERO IPv6 ND messaging signaling
      for Route Optimization and Neighbor Unreachability Detection.</t>

      <t>Note that the main difference between a security gateway acting as an
      AERO Server and an enterprise-internal AERO Server is that the security
      gateway has at least one enterprise-internal physical interface and at
      least one public Internet physical interface. Conversely, the
      enterprise-internal AERO Server has only enterprise-internal physical
      interfaces. For this reason security gateway proxying is needed to
      ensure that the public Internet link-layer addressing space is kept
      separate from the enterprise-internal link-layer addressing space. This
      is afforded through a natural extension of the security association
      caching already performed for each VPN client by the security
      gateway.</t>
    </section>
  </back>
</rfc>
