<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="3"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="yes"?>
<rfc category="std" docName="draft-ietf-softwire-unified-cpe-08"
     ipr="trust200902">
  <!-- ***** FRONT MATTER ***** -->

  <front>
    <title abbrev="OPTION_S46_PRIORITY DHCPv6 Option">Unified IPv4-in-IPv6
    Softwire CPE: A DHCPv6-based Prioritization Mechanism</title>

    <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
      <organization>Orange</organization>

      <address>
        <postal>
          <street></street>

          <city>Rennes</city>

          <country>France</country>
        </postal>

        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>

    <author fullname="Ian Farrer" initials="I." surname="Farrer">
      <organization>Deutsche Telekom</organization>

      <address>
        <postal>
          <street></street>

          <city></city>

          <country>Germany</country>
        </postal>

        <email>ian.farrer@telekom.de</email>
      </address>
    </author>

    <date day="" month="" year="" />

    <area>Internet</area>

    <workgroup>Softwire WG</workgroup>

    <keyword>Provisioning</keyword>

    <keyword>Softwire</keyword>

    <keyword>IPv4 over IPv6</keyword>

    <keyword>IPv4 service continuity</keyword>

    <keyword>IPv4 address depletion</keyword>

    <keyword>IPv4 over IPv6</keyword>

    <keyword>MAP</keyword>

    <keyword>MAP-T</keyword>

    <keyword>MAP-E</keyword>

    <keyword>DS-Lite</keyword>

    <keyword>Lightweight 4over6</keyword>

    <abstract>
      <t>In IPv6-only provider networks, transporting IPv4 packets
      encapsulated in IPv6 is a common solution to the problem of IPv4 service
      continuity. A number of differing functional approaches have been
      developed for this, each having their own specific characteristics. As
      these approaches share a similar functional architecture and use the
      same data plane mechanisms, this memo specifies a DHCPv6 option whereby
      a single CPE can interwork with all of the standardized and proposed
      approaches to providing encapsulated IPv4 in IPv6 services by providing
      a prioritization mechanism.</t>
    </abstract>

    <note title="Requirements Language">
      <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">RFC 2119</xref>.</t>
    </note>
  </front>

  <!-- ***** MIDDLE MATTER ***** -->

  <middle>
    <section title="Introduction">
      <t>IPv4 service continuity is one of the major technical challenges
      which must be considered during IPv6 migration. Over the past few years,
      a number of different approaches have been developed to assist with this
      problem (e.g., <xref target="RFC6333"></xref>, <xref
      target="RFC7596"></xref>, or <xref target="RFC7597"></xref>). These
      approaches, referred to as 'S46 mechanisms' in this document, exist in
      order to meet the particular deployment, scaling, addressing and other
      requirements of different service provider's networks.</t>

      <t>A common feature shared between all of the differing modes is the
      integration of softwire tunnel end-point functionality into the Customer
      Premise Equipment (CPE) router. Due to this inherent data plane
      similarity, a single CPE may be capable of supporting several different
      approaches. Users may also wish to configure a specific mode of
      operation.</t>

      <t>A service provider's network may also have more than one S46
      mechanism enabled in order to support a diverse CPE population with
      differing client functionality, such as during a migration between
      mechanisms, or where services require specific supporting softwire
      architectures.</t>

      <t>For softwire based services to be successfully established, it is
      essential that the customer end-node, the service provider end-node and
      provisioning systems are able to indicate their capabilities and
      preferred mode of operation.</t>

      <t>A number of DHCPv6 options for the provisioning of softwires have
      been standardized:</t>

      <t><list hangIndent="8" style="hanging">
          <t hangText="RFC6334">Defines DHCPv6 option 64 for configuring Basic
          Bridging BroadBand (B4, <xref target="RFC6333"></xref>) elements
          with the IPv6 address of the Address Family Transition Router (AFTR,
          <xref target="RFC6333"></xref>).</t>

          <t hangText="RFC7341">Defines DHCPv6 option 88 for configuring the
          address of a DHCPv4 over DHCPv6 server, which can then be used by a
          softwire client for obtaining further configuration.</t>

          <t hangText="RFC7598">Defines DHCPv6 options 94, 95 and 96 for
          provisioning Mapping of Address and Port with Encapsulation (MAP-E,
          <xref target="RFC7597"></xref>), Mapping of Address and Port using
          Translation (MAP-T, <xref target="RFC7599"></xref>), and Lightweight
          4over6 <xref target="RFC7596"></xref> respectively.</t>
        </list></t>

      <t>This document describes a DHCPv6 based prioritization method whereby
      a CPE which supports several S46 mechanisms and receives configuration
      for more than one can prioritise which mechanism to use. The method
      requires no server side logic to be implemented and only uses a simple
      S46 mechanism prioritization to be implemented in the CPE.</t>

      <t>The prioritization method as described here does not provide
      redundancy between S46 mechanisms for the client. I.e. If the highest
      priority S46 mechanism which has been provisioned to the client is not
      available for any reason, the means for identifying this and falling
      back to the S46 mechanism with the next highest priority is not in the
      scope of this document.</t>

      <section title="Terminology">
        <t>This document makes use of the following terms:</t>

        <t><list style="symbols">
            <t>Address Family Transition Router (AFTR): is the IPv4-in-IPv6
            tunnel termination point and the NAT44 function deployed in the
            operator's network <xref target="RFC6333"></xref>.</t>

            <t>Border Relay (BR): a MAP-enabled router managed by the service
            provider at the edge of a MAP domain. A BR has at least an
            IPv6-enabled interface and an IPv4 interface connected to the
            native IPv4 network <xref target="RFC7597"></xref>.</t>

            <t>Customer Premise Equipment (CPE): denotes the equipment at the
            customer edge that terminates the customer end of an IPv6
            transitional tunnel. In some documents (e.g., <xref
            target="RFC7597"></xref>), this functional entity is called CE
            (Customer Edge).</t>
          </list></t>
      </section>

      <section title="Rationale">
        <t>The following rationale has been adopted for this document:</t>

        <t><list style="format (%d)">
            <t>Simplify solution migration paths: Define unified CPE behavior,
            allowing for smooth migration between the different s46
            mechanisms.</t>

            <t>Deterministic CPE co-existence behavior: Specify the behavior
            when several S46 mechanisms co-exist in the CPE.</t>

            <t>Deterministic service provider co-existence behavior: Specify
            the behavior when several modes co-exist in the service providers
            network.</t>

            <t>Re-usability: Maximize the re-use of existing functional blocks
            including tunnel end-points, port restricted NAPT44, forwarding
            behavior, etc.</t>

            <t>Solution agnostic: Adopt neutral terminology and avoid (as far
            as possible) overloading the document with solution-specific
            terms.</t>

            <t>Flexibility: Allow operators to compile CPE software only for
            the mode(s) necessary for their chosen deployment context(s).</t>

            <t>Simplicity: Provide a model that allows operators to only
            implement the specific mode(s) that they require without the
            additional complexity of unneeded modes.</t>
          </list></t>
      </section>

      <section title="DHCPv6 S46 Priority Option">
        <t>The S46 Priority Option is used to convey a priority order of IPv4
        service continuity mechanisms. <xref
        target="img-option-s46-prio"></xref> shows the format of the S46
        Priority Option.</t>

        <t><figure align="center" anchor="img-option-s46-prio"
            title="S46 Priority Option">
            <preamble></preamble>

            <artwork align="center"><![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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      OPTION_S46_PRIORITY      |         option-length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        s46-option-code        |        s46-option-code        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              ...              |        s46-option-code        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure></t>

        <t><list style="symbols">
            <t>option-code: OPTION_S46_PRIORITY (TBD)</t>

            <t>option-length: &gt;=2 and a multiple of 2, in octets.</t>

            <t>s46-option-code: 16-bits long IANA registered option code of
            the DHCPv6 option which is used to identify the softwire
            mechanism. S46 mechanism are prioritized in the appearance order
            in the S46 Priority Option.</t>
          </list></t>

        <t>Codes in OPTION_S46_PRIORITY are processed in order; in the event that a client
        receives more than one s46-option-code with a particular value, this should be
        considered as invalid. DHCP servers MAY validate the list of s46-option-code
        values to detect invalid values and duplicates.  The option MUST contain at
        least one s46-option-code.</t>
      </section>

      <section title="DHCPv6 Client Behavior">
        <t>Clients MAY request option OPTION_S46_PRIORITY, as defined in <xref
        target="RFC3315"></xref>, Sections 17.1.1, 18.1.1, 18.1.3, 18.1.4,
        18.1.5, and 22.7. As a convenience to the reader, we mention here that
        the client includes requested option codes in the Option Request
        Option.</t>

        <t>Upon receipt of a DHCPv6 Advertise message from the server
        containing OPTION_S46_PRIORITY the client performs the following
        steps:</t>

        <t><list style="numbers">
            <t>Check the contents of the DHCPv6 message for options containing
            valid S46 mechanism configuration. A candidate list of possible
            S46 mechanisms is created from these option codes.</t>

            <t>Check the contents of OPTION_S46_PRIORITY for the DHCPv6 option
            codes contained in the included s46-option-code fields. From this,
            an S46 mechanism priority list is created, ordered from highest to
            lowest following the appearance order.</t>

            <t>Sequentially check the priority list against the candidate list
            until a match is found.</t>

            <t>When a match is found, the client MUST configure the resulting
            S46 mechanism.</t>
          </list></t>

        <t>In the event that no match is found between the priority list and
        the candidate list, the client MAY proceed with configuring one or
        more of the provisioned S46 softwire mechanism(s). In this case, which
        mechanism(s) are chosen by the client is implementation-specific and
        not defined here.</t>

        <t>If an invalid OPTION_S46_PRIORITY option is received, the client
        MAY proceed with configuring the provisioned S46 mechanisms as if
        OPTION_S46_PRIORITY had not been received.</t>

        <t>If an unknown option code is received in OPTION_S46_PRIORITY
        option, the client MUST skip it and continue processing other listed
        option codes if they exist. The initial option codes that are allowed
        to be included in a OPTION_S46_PRIORITY option are listed in <xref
        target="codes"></xref>.</t>
      </section>

      <section title="DHCPv6 Server Behavior">
        <t>Sections 17.2.2 and 18.2 of <xref target="RFC3315"></xref> govern
        server operation in regards to option assignment. As a convenience to
        the reader, we mention here that the server will send a particular
        option code only if configured with specific values for that option
        code and if the client requested it.</t>

        <t>Option OPTION_S46_PRIORITY is a singleton. Servers MUST NOT send
        more than one instance of the OPTION_S46_PRIORITY option.</t>
      </section>
    </section>

    <section title="Operator Deployment Considerations for Deploying     Multiple Sotfwire Mechanisms">
      <t>The following sub-sections describe some considerations for operators
      who are planning on implementing multiple softwire mechanisms in their
      network (e.g., during a migration between mechanisms).</t>

      <section title="Client Address Planning">
        <t>As an operator's available IPv4 resources are likely to be limited,
        it may be desirable to use a common range of IPv4 addresses across all
        of the active Softwire mechanisms. However, this is likely to result
        in difficulties in routing ingress IPv4 traffic to the correct Border
        Relay (BR)/AFTR instance which is actively serving a given CE. For
        example, a client which is configured to use MAP-E may send its
        traffic to the MAP-E BR, but on the return path, the ingress IP
        traffic gets routed to a MAP-T BR. The resulting translated packet
        that gets forwarded to the MAP-E client will be dropped.</t>

        <t>Therefore, operators are advised to use separate IPv4 pools for
        each of the different mechanisms to simplify planning and IPv4
        routing.</t>

        <t>For IPv6 planning there is less of a constraint as the BR/AFTR
        elements for the different mechanisms can contain configuration for
        overlapping client's IPv6 addresses, providing only one mechanism is
        actively serving a given client at a time. However, the IPv6 address
        that is used as the tunnel concentrator's endpoint (BR/AFTR address)
        needs to be different for each mechanisms to ensure correct
        operation.</t>
      </section>

      <section title="Backwards Compatability with Existing Softwire Clients">
        <t>Deployed clients which can support multiple softwire mechanisms,
        but do not implement the prioritization mechanism described here may
        require additional planning. In this scenario, the CPE would request
        configuration for all of the supported softwire mechanisms in its
        DHCPv6 Option Request Option (ORO), but would not request
        OPTION_S46_PRIORITY. By default, the DHCPv6 server will respond with
        configuration for all of the requested mechanisms which could result
        in unpredictable and unwanted client configuration.</t>

        <t>In this scenario, it may be necessary for the operator to implement
        logic within the DHCPv6 server to identify such clients and only
        provision them with configuration for a single softwire mechanism. It
        should be noted that this can lead to complexity and reduced
        scalability in the DHCPv6 server implementation due to the addition
        DHCPv6 message processing overhead.</t>
      </section>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>Security considerations discussed in <xref target="RFC6334"></xref>
      and <xref target="RFC7598"></xref> apply for this document.</t>

      <t>Misbehaving intermediate nodes may alter the content of the S46
      Priority Option. This may lead to setting a different IPv4 service
      continuity mechanism than the one initially preferred by the network
      side. Also, a misbehaving node may alter the content of the S46 Priority
      Option and other DHCPv6 options (e.g., DHCPv6 Option #64 or #90) so that
      the traffic is intercepted by an illegitimate node. Those attacks are
      not unique to the S46 Priority Option but are applicable to any DHCPv6
      option that can be altered by a misbehaving intermediate node.</t>
    </section>

    <section title="IANA Considerations">
      <t>IANA is kindly requested to allocate the following DHCPv6 option
      code:<list>
          <t>TBD for OPTION_S46_PRIORITY</t>
        </list>All values should be added to the DHCPv6 option code space
      defined in Section 24.3 of <xref target="RFC3315"></xref>.</t>

      <section anchor="codes"
               title="S46 Mechanisms and their Identifying Option Codes">
        <t>This document requests that IANA create a new registry entitled
        "Option Codes permitted in the S46 Priority Option". This registry
        will enumerate the set of DHCPv6 Option Codes that can be included in
        OPTION_S46_PRIORITY option. Options may be added to this list using
        the IETF Review process described in Section 4.1 of <xref
        target="RFC5226"></xref>.</t>

        <t>The following table shows the option codes which are currently
        defined and the S46 mechanisms which they represent. The contents of
        this table shows the format and the initial values for the new
        registry. Option codes that have not been requested to be added
        according to the stated procedure should not be mentioned at all in
        the table, and should not be listed as "reserved" or "unassigned". The
        valid range of values for the registry is the range of DHCPv6 Option
        Codes (1-65535).</t>

        <texttable anchor="table_options_s46"
                   title="DHCPv6 Option to S46 Mechanism Mappings">
          <ttcol align="center">Option Code</ttcol>

          <ttcol align="center">S46 Mechanism</ttcol>

          <ttcol align="center">Reference</ttcol>

          <c>64</c>

          <c>DS-Lite</c>

          <c><xref target="RFC6334"></xref></c>

          <c>88</c>

          <c>DHCPv4 over DHCPv6</c>

          <c><xref target="RFC7341"></xref></c>

          <c>94</c>

          <c>MAP-E</c>

          <c><xref target="RFC7598"></xref></c>

          <c>95</c>

          <c>MAP-T</c>

          <c><xref target="RFC7598"></xref></c>

          <c>96</c>

          <c>Lightweight 4over6</c>

          <c><xref target="RFC7598"></xref></c>
        </texttable>
      </section>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>Many thanks to O. Troan, S. Barth. A. Yourtchenko, B. Volz, T.
      Mrugalski, J. Scudder, P. Kyzivat, F. Baker, and B. Campbell for their
      input and suggestions.</t>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

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

      <?rfc include='reference.RFC.6334'?>

      <?rfc include='reference.RFC.7341'?>

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

      <?rfc include='reference.RFC.3315'?>
    </references>

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

      <?rfc include='reference.RFC.6333'?>

      <?rfc include='reference.RFC.7596'?>

      <?rfc include='reference.RFC.7597'?>

      <?rfc include='reference.RFC.7599'?>
    </references>
  </back>
</rfc>
