<?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-6man-rio-redirect-00.txt"
     ipr="trust200902" updates="rfc4191, rfc4861">
  <front>
    <title abbrev="RIOs in Redirects">Route Information Options in Redirect
    Messages</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>

    <author fullname="James Woodyatt" initials="J.W." surname="Woodyatt">
      <organization>Google</organization>

      <address>
        <postal>
          <street>3400 Hillview Ave</street>

          <city>Palo Alto</city>

          <region>CA</region>

          <code>94304</code>

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

        <email>jhw@google.com</email>
      </address>
    </author>

    <date day="27" month="January" year="2017"/>

    <keyword>I-D</keyword>

    <keyword>Internet-Draft</keyword>

    <abstract>
      <t>The IPv6 Neighbor Discovery protocol provides a Redirect function
      allowing routers to inform recipients of a better next hop on the link
      toward the destination. This document specifies a backward-compatible
      extension to the Redirect function to allow routers to include routing
      information that the recipient can associate with the next hop.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">
      <t>"Neighbor Discovery for IP version 6 (IPv6)" <xref
      target="RFC4861"/><xref target="RFC2460"/> provides a Redirect function
      allowing routers to inform recipients of a better next hop on the link
      toward the destination. Further guidance for processing Redirect
      messages is given in "First-Hop Router Selection by Hosts in a
      Multi-Prefix Network" <xref target="RFC8028"/>.</t>

      <t>"Default Router Preferences and More-Specific Routes" <xref
      target="RFC4191"/> specifies a Route Information Option (RIO) that
      routers can include in Router Advertisement (RA) messages to inform
      recipients of more-specific routes. This document specifies a
      backward-compatible extension to allow routers to include RIOs in
      Redirect messages.</t>
    </section>

    <section anchor="terminology" title="Terminology">
      <t>The terminology in the normative references applies.</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="rioinredirect"
             title="Route Information Options in Redirect Messages">
      <t>The RIO is specified for inclusion in RA messages in Section 2.3 of
      <xref target="RFC4191"/>. The Redirect function is specified in Section
      8 of <xref target="RFC4861"/>. This specification permits routers to
      include RIOs in Redirect messages so that recipients can direct future
      packets to a better next hop for a destination *prefix* instead of just
      a specific destination. This specification therefore updates <xref
      target="RFC4191"/> and <xref target="RFC4861"/>, as discussed in the
      following sections.</t>

      <section anchor="valid" title="Validation of Redirect Messages">
        <t>The validation of Redirect messages follows Section 8.1 of <xref
        target="RFC4861"/>, which contains the following passage:</t>

        <t><list style="empty">
            <t>"The contents of any defined options that are not specified to
            be used with Redirect messages MUST be ignored and the packet
            processed as normal. The only defined options that may appear are
            the Target Link-Layer Address option and the Redirected Header
            option."</t>
          </list>This specification updates the above statement by adding RIOs
        to the list of defined options that may appear.</t>
      </section>

      <section anchor="router" title="Router Specification">
        <t>The Router Specification follows Section 8.2 of <xref
        target="RFC4861"/>, which provides a list of options that may appear
        in a Redirect message. This specification updates the list by
        including RIOs as permissible options. Routers therefore MAY send
        Redirect messages containing RIOs with values determined by a means
        outside the scope of this specification.</t>

        <t>After the initial router sends Redirect messages containing RIOs
        that are processed by the recipient, the redirection Target MAY send
        its own Redirect messages containing RIOs. These Redirect messages may
        be either "solicited" (i.e., an ordinary Redirect) or "unsolicited"
        (i.e., a Redirect generated without waiting for a packet to
        arrive).</t>

        <t>An unsolicited Redirect message includes a Destination Address and
        Redirected Header option that are either fabricated or derived from a
        remembered packet that was processed at an earlier time.
        Alternatively, the message could omit the Redirected Header option
        and/or set the Destination Address field to "::" (the IPv6 unspecified
        address). Such a message would still satisfy the message validation
        checks in Section 8.1 of <xref target="RFC4861"/>.</t>

        <t>Any router may send RA messages with RIOs at any time, but these
        may be dropped along some paths over layer-2 switch fabrics that
        implement RA filtering.</t>
      </section>

      <section anchor="host" title="Host Specification">
        <t>The Host Specification follows Section 8.3 of <xref
        target="RFC4861"/>, Section 3 of <xref target="RFC4191"/>, and Section
        3 of <xref target="RFC8028"/>. According to <xref target="RFC4861"/>,
        a host that receives a valid Redirect message updates its destination
        cache per the Destination Address and its neighbor cache per the
        Target Address. According to <xref target="RFC4191"/>, hosts can be
        classified as Type "A", "B" or "C" based on how they process valid RA
        messages, where a Type "C&rdquo; host updates its routing table per
        any RIO elements included in the message. Finally, according to <xref
        target="RFC8028"/>, a Type "C&rdquo; host operating on a Multi-Prefix
        Network with multiple default routes can make source address selection
        decisions based on information in its routing table decorated with
        information derived from the source of the RIO element.</t>

        <t>In light of these considerations, this document introduces a new
        Type "D&rdquo; behavior for hosts with the same behavior as a Type
        "C&rdquo; host, but which also process RIO elements in Redirect
        messages. Type "D&rdquo; hosts process Redirect messages with RIO
        elements by updating 1) their neighbor cache per the Target Address,
        2) their destination cache per the Destination Address, and 3) their
        routing tables per any RIO elements present. The host can then make
        source address selection decisions per <xref target="RFC8028"/> the
        same as described above.</t>

        <t>When a Type "D" host processes a Redirect message, it SHOULD first
        test the path to the Target using Neighbor Unreachability Detection
        (NUD) while continuing to send packets via the router that issued the
        Redirect until the NUD procedure converges. Thereafter, if a Route
        Lifetime expires (or if an RIO with Route Lifetime 0 arrives) the host
        removes the corresponding Prefix from its routing table and allows
        future packets to follow a different route.</t>

        <t>The behaviors of Type "A", "B&rdquo; and "C&rdquo; hosts defined in
        <xref target="RFC4191"/> are not changed by this specification. This
        specification updates Section 3 of <xref target="RFC4191"/> by
        introducing a new host Type "D", and updates Section 8.3 of <xref
        target="RFC4861"/> by permitting RIOs to appear in Redirect
        messages.</t>

        <section anchor="typed"
                 title="Type &quot;D&quot; Hosts with Delegated Prefixes">
          <t>Type "D" hosts may be holders of entire IPv6 prefix delegations
          instead of just a singleton address. For example, the host may
          connect an entourage of "Internet of Things" devices that derive
          their addresses from a delegated prefix. In that case, the host may
          itself serve as a redirection target in a manner consistent with the
          Router Specification above. Such Type "D" hosts act like a host in
          terms of processing received Redirects and act like a router in
          terms of sending Redirects.</t>
        </section>
      </section>
    </section>

    <section anchor="implement" title="Implementation Status">
      <t>The Redirect function and RIOs are widely deployed in IPv6
      implementations.</t>
    </section>

    <section anchor="iana" title="IANA Considerations">
      <t>This document introduces no IANA considerations.</t>
    </section>

    <section anchor="secure" title="Security Considerations">
      <t>Security considerations for Redirect messages that include RIOs are
      the same as for any IPv6 ND messages as specified in Section 11 of <xref
      target="RFC4861"/>. Namely, the protocol must take measures to secure
      IPv6 ND messages on links where spoofing attacks are possible.</t>

      <t>A spoofed Redirect message containing no RIOs could cause corruption
      in the host's destination cache while a spoofed Redirect message
      containing RIOs could corrupt the host's routing tables. While the
      latter would seem to be a more onerous result, the possibility for
      corruption is unacceptable in either case.</t>

      <t>"IPv6 ND Trust Models and Threats" <xref target="RFC3756"/> discusses
      spoofing attacks, and states that: "This attack is not a concern if
      access to the link is restricted to trusted nodes". "SEcure Neighbor
      Discovery (SEND)" <xref target="RFC3971"/> provides one possible
      mitigation for other cases.</t>

      <t><xref target="RFC6105"/> describes a layer-2 filtering technique
      called &ldquo;RA Guard&rdquo; intended for network operators to use in
      protecting hosts from receiving RA messages sent by nodes that are not
      among the set of default routers regarded as legitimate by the network
      operator. However, the RA Guard function defined in <xref
      target="RFC6105"/> does not filter ND Redirect messages. On networks
      with such RA Guard functions, blocked routers can use ND Redirect
      messages to inform hosts of routes for specific destination addresses.
      This draft introduces a new method by which such routers can inform Type
      D hosts of routes for more specific destination prefixes as well as
      addresses. On networks with layer-2 filters that protect hosts by
      restricting the delivery to hosts of both RA messages and ND Redirect
      messages from a limited set of legitimate routers, the host routing
      tables of both Type C and Type D hosts are protected by that layer-2
      filtering function.</t>
    </section>

    <section anchor="ack" title="Acknowledgements">
      <t>Joe Touch suggested a standalone draft to document this approach in
      discussions on the intarea list. The work was subsequently transferred
      to the 6man list, where the following individuals provided valuable
      feedback: Mikael Abrahamsson, Zied Bouziri, Brian Carpenter, Steinar
      Haug, Christian Huitema, Tomoyuki Sahara.</t>
    </section>
  </middle>

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

      <?rfc ?>

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

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

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

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

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

      <?rfc ?>

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

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

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

      <?rfc ?>
    </references>

    <section anchor="mobility" title="Link-layer Address Changes">
      <t>Type "D" hosts send unsolicited Neighbor Advertisements (NAs) to
      announce link-layer address changes per standard neighbor discovery
      <xref target="RFC4861"> </xref>. Link-layer address changes may be due
      to localized factors such as hot-swap of an interface card, but could
      also occur during movement to a new point of attachment on the same
      link.</t>
    </section>

    <section anchor="multilink"
             title="Interfaces with Multiple Link-Layer Addresses">
      <t>Type "D" host interfaces may have multiple connections to the link;
      each with its own link-layer address. Type "D" nodes can therefore
      include multiple link-layer address options in Redirects and other IPv6
      ND messages. Neighbors that receive these messages can cache and select
      link-layer addresses in a manner outside the scope of this
      specification.</t>
    </section>
  </back>
</rfc>
