<?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-04"
     ipr="trust200902">
  <!-- ***** FRONT MATTER ***** -->

  <front>
    <title abbrev="Generic v4inv6 CPE Provisioning Profile">Unified
    IPv4-in-IPv6 Softwire CPE</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="21" month="April" year="2016" />

    <area>Internet</area>

    <workgroup>Softwire WG</workgroup>

    <keyword>provisioning, IPv4 service continuity, IPv4 address depletion,
    IPv4 over IPv6, DHCP, DHCPv6, MAP, MAP-T, MAP-E, DS-Lite</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 describes a specification whereby
      a single CPE can interwork with all of the standardized and proposed
      approaches to providing encapsulated IPv4 in IPv6 services.</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 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 prioritisation 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 prioritisation 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="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="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_V6_S46_PRIORITY      |         option-length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        s46-option-code        |         s46-option-code       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                ...            |         s46-option-code       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          </figure></t>

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

            <t>option-length: variable-length</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>Each defined s46_option_code MUST NOT appear more than once within
        the list of S46 option codes. The option MUST contain at least one
        s46-option-code.</t>
      </section>

      <section title="Client Behavior">
        <t>Clients MAY request option OPTION_V6_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_V6_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_V6_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 SHOULD configure the
            resulting S46 mechanism. Configuration for other S46 mechanisms
            MUST be discarded.</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>In the event that the client receives OPTION_V6_S46_PRIORITY with
        the following errors, it MUST be discarded:</t>

        <t><list style="symbols">
            <t>No s46-option-code field is included.</t>

            <t>Multiple s46-option-code fields with the same value are
            included.</t>
          </list></t>

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

        <t>In the event that a client receives an OPTION_V6_S46_PRIORITY
        option containing a value in s46-option-code representing an S46
        mechanism which the client has not implemented, this is not considered
        an error.</t>
      </section>

      <section title="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 option foo only
        if configured with specific values for foo and if the client requested
        it.</t>

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

      <section title="S46 Mechanisms and their Identifying Option Codes">
        <t>The following table shows the currently defined option codes and
        the S46 mechanisms which they represent. This list is complete at the
        time of writing, but should not be considered definitive as new S46
        mechanisms may be defined in the future.</t>

        <texttable anchor="table_options_s46"
                   title="DHCPv6 Option to S46 Mechanism Mappings">
          <ttcol align="left">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 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 sofwire 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 BR/AFTR
        instance which is actively serving a given CE. For example,
        a client which is configured to use MAP-E may send it's 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 mutliple softwire mechanisms, but
      do not implement the prioritisation 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 ORO message,
      but would not request OPTION_V6_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 complextity 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.</t>
    </section>

    <section title="IANA Considerations">
      <t>IANA is kindly requested to allocate the following DHCPv6 option
      code:<list>
          <t>TBD for OPTION_V6_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>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>Many thanks to O. Troan, S. Barth. A. Yourtchenko, B. Volz, T.
      Mrugalski 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.6333'?>

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

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

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