<?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-dhc-dhcp4o6-saddr-opt-07"
     ipr="trust200902" updates="7598">
  <!-- ***** FRONT MATTER ***** -->

  <front>
    <title abbrev="Softwire Provisioning with DHCP 4o6">Softwire Provisioning 
    using DHCPv4 Over DHCPv6</title>

    <author fullname="Ian Farrer" initials="I.F." surname="Farrer">
      <organization>Deutsche Telekom AG</organization>
      <address>
        <postal>
          <street>CTO-ATI, Landgrabenweg 151</street>
          <city>Bonn</city>
          <region>NRW</region>
          <code>53227</code>
          <country>Germany</country>
        </postal>
        <email>ian.farrer@telekom.de</email>
      </address>
    </author>

    <author fullname="Qi Sun" initials="Q." surname="Sun">
      <organization>Tsinghua University</organization>
      <address>
      <postal>
        <street/>
        <city>Beijing</city>
        <code>100084</code>
        <country>P.R. China</country>
      </postal>
      <phone>+86-10-6278-5822</phone>
      <email>sunqi.ietf@gmail.com</email>
      </address>
    </author>

    <author fullname="Yong Cui" initials="Y." surname="Cui">
      <organization>Tsinghua University</organization>
      <address>
      <postal>
        <street/>
        <city>Beijing</city>
        <code>100084</code>
        <country>P.R. China</country>
      </postal>
      <phone>+86-10-6260-3059</phone>
      <email>yong@csnet1.cs.tsinghua.edu.cn</email>
      </address>
    </author>

    <author fullname="Linhui Sun" initials="L." surname="Sun">
      <organization>Tsinghua University</organization>
      <address>
      <postal>
        <street/>
        <city>Beijing</city>
        <code>100084</code>
        <country>P.R. China</country>
      </postal>
      <phone>+86-10-6278-5822</phone>
      <email>lh.sunlinh@gmail.com</email>
      </address>
    </author>

    <date year=""/>
    <area>Internet</area>
    <workgroup>DHCWG</workgroup>

    <abstract>
      <t>DHCPv4 over DHCPv6 (RFC7341) is a mechanism for dynamically
        configuring IPv4 for use as an over-the-top service in a IPv6-only
        network. Softwires are an example of such a service. For DHCPv4 over DHCPv6 
        (DHCP 4o6) to function with some IPv4-over-IPv6 softwire mechanisms
        and deployment scenarios (e.g., RFC7596 or RFC7597), the operator
        needs to know the IPv6 address that the client will use as the 
        source of IPv4-in-IPv6 softwire tunnel. This address, in
        conjunction with the client's IPv4 address, and (in some deployments)
        the Port Set ID are used to create a binding table entry in the
        operator's softwire tunnel concentrator. This memo defines a
        DHCPv6 option to convey IPv6 parameters for establishing the softwire
        tunnel and a DHCPv4 option (to be used only with DHCP 4o6) to
        communicate the source tunnel IPv6 address between the DHCP 4o6
        client and server. It is designed to work in conjunction with
        the IPv4 address allocation process.
      </t>
      <t>DHCPv6 Options for Configuration of Softwire Address and 
        Port-Mapped Clients (RFC7598) describes a deterministic
        DHCPv6 based mechanism for provisioning softwires. This document 
        updates "DHCPv6 Options for Configuration of Softwire Address
        and Port-Mapped Clients" (RFC7598), allowing OPTION_S46_BR (90)
        to be enumerated in the DHCPv6 client's Option Request Option (ORO)
        request and appear directly within subsequent messages sent by
        the DHCPv6 server.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="Introduction" title="Introduction">
      <t>Deterministic IPv4-over-IPv6 transition technologies require
        that elements are pre-configured with binding rules for routing
        traffic to clients. This places a constraint on the choice of
        address used as the client's softwire source address: it must
        use a pre-determined prefix which is usually
        configured on the home gateway device. <xref target="RFC7598"/>
        describes a DHCPv6 based mechanism for provisioning such
        deterministic softwires.
      </t>

      <t>A dynamic provisioning model, such as using DHCPv4
        over DHCPv6 <xref target="RFC7341"/> (DHCP 4o6) allows much more
        flexibility in the location of the IPv4-over-IPv6 softwire source
        address. In this model, the IPv6 address is dynamically
        communicated back to the service provider allowing the
        corresponding softwire configuration to be created in the border
        router (BR).
      </t>

      <t>The DHCP 4o6 client and softwire client could be run on end
        devices attached to a network segment using any routable IPv6
        prefix allocated to an end-user, located anywhere within an arbitrary
        home network topology. Dynamic allocation also helps to optimize
        IPv4 resource usage as only clients which are actively renewing
        their IPv4 lease hold on to the address.
      </t>

      <t>This document describes a mechanism for dynamically provisioning
        softwires created using DHCP 4o6, including provisioning the
        client with the address of the softwire border router (BR) and
        informing the service provider of client's binding between
        the dynamically allocated IPv4 address and Port Set ID
        and the IPv6 address that the softwire Initiator will use for
        accessing IPv4-over-IPv6 services.
      </t>

      <t>The mechanism operates alongside the DHCP 4o6 message flows to
        communicate the binding information over the IPv6-only network.
        The DHCP 4o6 server provides a single point in the network
        which holds the current client binding information. The service
        provider can then use this binding information to provision
        other functional elements, such as the BR(s).
      </t>
    </section>

    <section title="Applicability">
      <t>The mechanism described in this document is only suitable for use for
      provisioning softwire clients via DHCP 4o6. The options described here
      are only applicable within the DHCP 4o6 message exchange process.
      Current softwire technologies suitable for extending to incorporate
      DHCP 4o6 with dynamic IPv4 address leasing include
      <xref target="RFC7597"/> and <xref target="RFC7596"/>.</t>
    </section>

    <section title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
      "MAY", and "OPTIONAL" in this document are to be interpreted as
      described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
      when, and only when, they appear in all capitals, as shown here.</t>
    </section>

    <section title="Solution Overview">
      <t>In order to provision a softwire, both IPv6 and IPv4 configuration
        needs to be passed to the client. To map this to the DHCP 4o6
        configuration process, the IPv6 configuration is carried in
        DHCPv6 options <xref target="I-D.ietf-dhc-rfc3315bis"/>, carried
        inside the DHCPv6 message DHCPV4-RESPONSE (21) sent by the server.
        OPTION_S46_BR (90) is used to provision the remote IPv6 address for
        the softwire border router (see <xref target="reuse-opt90"/> below).
        OPTION_S46_BIND_IPV6_PREFIX (TBD1), is optionally sent by the
        DHCP 4o6 server to indicate to the client a preferred IPv6
        prefix for binding the received IPv4 configuration and sourcing
        tunnel traffic. This may be necessary if there are multiple IPv6
        prefixes in use in the customer network (e.g., Unique Local Addresses
        (ULAs)), or if the specific IPv4-over-IPv6 transition mechanism
        requires the use of a particular prefix for any reason.
      </t>

      <t>
        IPv4 configuration is carried in DHCPv4 messages <xref target="RFC2131"/>,
        (inside the DHCP 4o6 option OPTION_DHCPV4_MSG (87)) using the mechanism
        described in <xref target="RFC7341"/>.
      </t>

      <t>
        In order for the client to communicate the softwire source
        address, a new DHCPv4 option OPTION_DHCP4O6_S46_SADDR (TBD2) is
        defined in this document. This is included in DHCPREQUEST
        messages sent by the client and is stored by the server for the
        lifetime of the IPv4 address lease.
      </t>

      <section title="Updating RFC7598 to Permit the Reuse of OPTION_S46_BR(90)" anchor="reuse-opt90">

        <t>Section 4.2 of <xref target="RFC7598"/> defines option
          OPTION_S46_BR(90) for communicating remote softwire border
          relay (BR) IPv6 address(es) to a client, but mandates that
          the option can only be used when encapsulated within one of
          the softwire container options: OPTION_S46_CONT_MAPE (94) or
          OPTION_S46_CONT_LW(96). From Section 3 of
          <xref target="RFC7598"/>:
        </t>

        <t><list style="empty">
          <t>"Softwire46 DHCPv6 clients that receive provisioning options that
            are not encapsulated in container options MUST silently ignore these
            options."</t>
          </list>
        </t>

        <t>This document updates <xref target="RFC7598"/>, removing
          this restriction for OPTION_S46_BR (90), allowing it to be
          enumerated in the client's ORO request and appear directly
          within subsequent messages sent by the DHCPv6 server.
        </t>
      </section>
    </section>

    <section title="DHCP 4o6 IPv6/IPv4 Binding Message Flow">
      <t>The following diagram shows the relevant extensions to the
        successful DHCP 4o6 IPv4 allocation client/server message flow for
        the softwire source address function. The full process, including
        error handling is described in <xref target="cli-behav"/>.
      </t>

      <t>In each step, the DHCPv6 portion of the message and any relevant
        option is shown above the arrow. The DHCP 4o6 content of the
        message and its relevant options are below the arrow. All the
        DHCPv4 messages are encapsulated in DHCPV4-QUERY (20)  or
        DHCPV4-RESPONSE (21) messages. Where relevant, the necessary
        options and their contents are shown.
      </t>

      <figure title="IPv6/IPv4 Binding Message Flow" anchor="msg_flow_fig">
        <artwork align="center"><![CDATA[
    DHCP 4o6                                              DHCP 4o6
     Client                                                Server
       |                                                      |
       |       DHCPv6 - DHCPV4-QUERY message containing       |
       |           OPTION_ORO(6) listing (90, TBD1)           |
Step 1 |----------------------------------------------------->|
       |            DHCPv4 - DHCPDISCOVER message             |
       |                                                      |
       |                                                      |
       |     DHCPv6 - DHCPV4-RESPONSE message containing      |
       | OPTION_S46_BR(90), OPTION_S46_BIND_IPV6_PREFIX(TDB1) |
       |     (bind-ipv6-prefix with service provider's        |
       |                  preferred prefix)                   |
Step 2 |<-----------------------------------------------------|
       |              DHCPv4 - DHCPOFFER message              |
       |         containing an available IPv4 address         |
       |                                                      |
       |             DHCPv6 - DHCPV4-QUERY message            |
Step 3 |----------------------------------------------------->|
       |     DHCPv4 - DHCPREQUEST message containing the      |
       | requested IPv4 address and OPTION_DHCP4O6_S46_SADDR  |
       |   (softwire-ipv6-src-address with client's bound     |
       |            IPv6 softwire source address)             |
       |                                                      |
       |                                                      |
       |           DHCPv6 - DHCPV4-RESPONSE message           |
Step 4 |<-----------------------------------------------------|
       |          DHCPv4 - DHCPACK message containing         |
       | the leased IPv4 address and OPTION_DHCP4O6_S46_SADDR |
       |    (softwire-ipv6-src-address with client's bound    |
       |              IPv6 softwire source address)           |
       |                                                      |
      ]]></artwork>
        </figure>

      <t>
        <list style="hanging" hangIndent="8">
          <t hangText="Step 1">The client constructs a DHCPv6
            'DHCPV4-QUERY(20)' message. This message contains two
            options: DHCPv6 OPTION_ORO (6) and OPTION_DHCPV4_MSG (87).
            OPTION_ORO lists '90' (OPTION_S46_BR) and 'TBD1'
            (OPTION_S46_BIND_IPV6_PREFIX). OPTION_DHCPV4_MSG contains a
            DHCPv4 DHCPDISCOVER message.
          </t>
          <t></t>

          <t hangText="Step 2">The server responds with a DHCPv6
            'DHCPV4-RESPONSE (21)' message. This message contains an
            OPTION_S46_BR (90) containing the IPv6 address of the BR for
            the client's softwire configuration. The message may also
            optionally contain OPTION_S46_BIND_IPV6_PREFIX (TBD1).
            OPTION_DHCPV4_MSG contains a DHCPv4 DHCPOFFER message. The
            DHCPv4 message contains an available IPv4 address.
          </t>
          <t></t>

          <t hangText="Step 3">The client sends with a DHCPv6
            'DHCPV4-QUERY(20)' message containing a DHCPv4 DHCPREQUEST
            message with the requested IPv4 address and
            OPTION_DHCP4O6_S46_SADDR (TBD2) with the IPv6
            address which the client will use as its softwire source
            address.
          </t>
          <t></t>

          <t hangText="Step 4">The server sends a DHCPv6
            'DHCPV4-RESPONSE (21)' message. OPTION_DHCPV4_MSG contains a
            DHCPv4 DHCPACK message with the allocated IPv4 address.
            OPTION_DHCP4O6_S46_SADDR with the client's bound softwire
            source address is included.
          </t>
        </list>
      </t>
    </section>

    <section title="DHCP Options">
      <section title="DHCPv6 Softwire Source Binding Prefix Hint Option" anchor="src-bind-pref-hint-opt">
        <t>The format of DHCPv6 Source Binding Prefix hint option is as
          follows:</t>
        <figure title="Format of OPTION_S46_BIND_IPV6_PREFIX">
          <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_BIND_IPV6_PREFIX  |         option-length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|bindprefix6-len|                                               |
+-+-+-+-+-+-+-+-+             bind-ipv6-prefix                  .
.                            (variable length)                  .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

          <t><list style="symbols">
            <t>option-code: OPTION_S46_BIND_IPV6_PREFIX (TBD1)</t>
            <t>option-length: 1 + length of bind-ipv6-prefix, specified
              in bytes.
            </t>
            <t>bindprefix6-len: 8-bit field expressing the bit mask length
              of the IPv6 prefix specified in bind-ipv6-prefix. Valid
              values are 0 to 128.
            </t>
            <t>bind-ipv6-prefix: The IPv6 prefix indicating the preferred
              prefix for the client to bind the received IPv4 configuration
              to. The length is (bindprefix6-len + 7) / 8. The field is
              padded on the right with zero bits up to the next octet
              boundary when bind-ipv6-prefix is not evenly divisible by
              8. These padding bits are ignored by the receiver (see
              <xref target="hint-valid"/>).
            </t>
            </list>
          </t>

        <t>OPTION_S46_BIND_IPV6_PREFIX is a singleton. Servers MUST NOT
          send more than one instance of the OPTION_S46_BIND_IPV6_PREFIX
          option.
        </t>
    </section>

    <section title="DHCPv4 over DHCPv6 Softwire Source Address Option">
      <t>The format of DHCPv4 over DHCPv6 softwire source address
        option is as follows:</t>

      <figure title="Format of OPTION_DHCP4O6_S46_SADDR">
        <artwork align="center"><![CDATA[
 0                             1
 0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|      option-code      |     option-length     |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+           softwire-ipv6-src-address           +
.                  (128 bits)                   .
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
]]></artwork>
      </figure>

      <t><list style="symbols">
        <t>option-code: OPTION_DHCP4O6_S46_SADDR (TBD2)</t>
        <t>option-length: 16.</t>
        <t>softwire-ipv6-src-address: 16 bytes long; The IPv6
        address that is associated (either being requested
        for binding or currently bound) with the client's IPv4
        configuration.
        </t>
        </list>
      </t>
      <t>NB - The function of OPTION_DHCP4O6_S46_SADDR may
        seem similar to the DHCPv4 message's 'chaddr' field, or the
        Client Identifier (61) option in that it provides a lower-layer
        address which is unique that the server can use for identifying
        the client. However, as both of these are required to remain
        constant throughout the address lease lifetime, they cannot be
        used with the mechanism described in this document. This is
        because the client may only be able to construct the IPv6
        address to use as the source address after it has received the
        first DHCPV4-RESPONSE message from the server containing
        OPTION_S46_BIND_IPV6_PREFIX.
      </t>
    </section>

  </section>

    <section title="Client Behavior" anchor="cli-behav">
     <t>A client requiring dynamic softwire configuration first enables
       DHCP 4o6 configuration using the method described in Section 5
       of  <xref target="RFC7341"/>. If OPTION_DHCP4_O_DHCP6_SERVER is
       received in the corresponding REPLY message, the client MAY
       continue with the configuration process described below.
     </t>

     <t>Before the dynamic softwire configuration process can commence,
       the client MUST be configured with  a suitable IPv6 prefix to be used
       as the local softwire endpoint. This could be obtained using
       DHCPv6, RA/PIO or another mechanism.
     </t>

     <section title="Client Initialization" anchor="cli-init">
       <t>When constructing the initial DHCP 4o6 DHCPDISCOVER message,
         the client includes a DHCPv6 OPTION_ORO (6) within the options
         field of the DHCP-QUERY message. OPTION_ORO contains the option
         codes for OPTION_S46_BR (90) and
         OPTION_S46_BIND_IPV6_PREFIX (TBD1).
       </t>

       <t>On receipt of the DHCP 4o6 server's reply (a DHCPV4-RESPONSE
         containing a DHCPOFFER message), the client checks
         the contents of the DHCPv4-RESPONSE for the presence of a valid
         OPTION_S46_BR option. If this option is not present, or does not
         contain at least one valid IPv6 address for a BR, then the client
         MUST discard the message, as without the address of the BR the
         client cannot configure the softwire and so has no interface to
         request IPv4 configuration for.
       </t>

       <t>The DHCPV4-RESPONSE message may also include 
          OPTION_S46_BIND_IPV6_PREFIX, which is used by the operator
          to indicate a preferred prefix that the client should use to
          bind IPv4 configuration to. If received, the client first
          checks the option according to <xref target="hint-valid"/>. If
          valid, the client uses this prefix as the 'IPv6 binding prefix'
          and follows to the process described in Section 5.1
          of <xref target="RFC7596"/> in order to select an active IPv6
          prefix to construct the softwire. If no match is found,
          or the client doesn't receive OPTION_S46_BIND_IPV6_PREFIX the
          client MAY select any valid IPv6 prefix (of a suitable scope)
          to use as the tunnel source.
        </t>

        <t>Once the client has selected a suitable prefix, it MAY
          use either an existing IPv6 address that is already configured
          on an interface, or create a new address specifically for use
          as the softwire source address (e.g., using an Interface
          Identifier constructed as per Section 6 of
          <xref target="RFC7597"/>). If a new address is being created,
          the client MUST complete configuration of the new address,
          performing duplicate address detection (if required) before
          proceeding.
        </t>

        <t>The client then constructs a DHCPV4-QUERY message containing
          a DHCPv4 DHCPREQUEST message. OPTION_DHCP4O6_S46_SADDR is
          included in the options field of the DHCPREQUEST message
          with the IPv6 address of its softwire source address in the
          softwire-ipv6-src-address field.
        </t>

        <t>When the client receives a DHCPv4 DHCPACK message from the
          server, it checks the IPv6 address in OPTION_DHCP4O6_S46_SADDR
          against its active softwire source address. If they match,
          the allocation process has concluded. If there is a discrepancy
          then the process described in <xref target="addr-mismatch"/>
          is followed.
        </t>

        <t>If the client receives a DHCPv4 DHCPNAK message from
          the server, then the configuration process has been unsuccessful.
          The client then restarts the process from Step 1 of 
          <xref target="msg_flow_fig"/>.
        </t>
      </section>

      <section title="Renewing or Rebinding the IPv4 Address Lease and
        Softwire Source Address">
        <t>Whenever the client attempts to extend the lease time
          of the IPv4 address, OPTION_DHCP4O6_S46_SADDR with the IPv6
          address of its softwire source address in the
          softwire-ipv6-src-address field MUST be included in the DHCPREQUEST
          message.
        </t>

        <section title="Changing the Bound IPv6 Softwire Source Address" anchor="cli-addr-change">
          <t>Across the lifetime of the leased IPv4 address, it is possible that
            the client's IPv6 address will change, e.g., if there is an IPv6 re-
            numbering event.
          </t>
          <t>In this situation, the client MUST inform the server of the
            new address. This is done by sending a DHCPREQUEST message
            containing OPTION_DHCP4O6_S46_SADDR with the new IPv6
            source address.
          </t>
          <t>When the client receives a DHCPv4 DHCPACK message from the
            server, it checks the IPv6 address in OPTION_DHCP4O6_S46_SADDR
            against its active softwire source address. If they match,
            the allocation process has concluded. If there is a discrepancy
            then the process described in <xref target="addr-mismatch"/>
            is followed.
          </t>
          <t>If the client receives a DHCPv4 DHCPNAK message in response 
            from the server, then the change of the bound IPv6 Softwire 
            source address has been unsuccessful. In this case, the client 
            MUST stop using the new IPv6 source address. The client then 
            restarts the process from Step 1 of <xref target="msg_flow_fig"/>.
          </t>
        </section>
      </section>

      <section title="Releasing the IPv4 Address Lease and Softwire
        Source Address">
        <t>When the client no longer requires the IPv4 resource, it
          sends a DHCPv4 DHCPRELEASE message to the server. As the
          options field is unused in this message type, OPTION_DHCP4O6_S46_SADDR
          is not included.
        </t>
      </section>

      <section title="OPTION_S46_BIND_IPV6_PREFIX Validation Behavior"
        anchor="hint-valid">
       <t>On receipt of the OPTION_S46_BIND_IPV6_PREFIX option, the
         client makes the following validation checks:
       </t>
       <t><list style="symbols">
           <t>The received bindprefix6-len value is not larger than 128.
           </t>
           <t>The number of bytes received in the bind-ipv6-prefix field is consistent
              with the received bindprefix6-len value (calculated as described in
              <xref target="src-bind-pref-hint-opt"/>).
           </t>
         </list>
       </t>
       <t>If either check fails, the receiver discards the invalid 
         option and proceeds to attempt configuration as if the option had
         not been received.
       </t>

       <t>The receiver MUST only use bits from the bind-ipv6-prefix field up
         to the value specified in the bindprefix6-len when performing the
         longest prefix match. bind-ipv6-prefix bits beyond this value
         MUST be ignored.
       </t>
      </section>

      <section title="Client and Server Softwire Source Address Mismatch" anchor="addr-mismatch">
        <t>If the client receives a DHCPACK message with an
          OPTION_DHCP4O6_S46_SADDR containing an IPv6 address which
          differs from its active softwire source address, the client
          SHOULD wait for a randomized time interval and then resend the
          DHCPREQUEST message with the correct softwire source 
          address. <xref target="RFC2131"/> Section 4.1 descibes
          the retransmission backoff interval process.
        </t>

        <t>The default minimum time for the client to attempt retransmission
          is 60 seconds. If, after this time has expired, the client has not
          received a DHCPACK message with the correct bound IPv6 address, 
          client MAY send a DHCPRELEASE message and re-start the
          process described in <xref target="cli-behav"/>. 
          The re-try interval should be configurable and aligned with any
          server policy defining the minimum time interval for client
          address updates as described in
          <xref target="srv-cli-addr-change"/>. 
        </t>
      </section>

      <section title="Use With Dynamic, Shared IPv4 Addresses">
        <t><xref target="RFC7618"/> describes a mechanism for using DHCPv4
          to distribute dynamic, shared IPv4 addresses to clients. The
          mechanism described in this document is compatible with IPv4
          address sharing, and can be enabled by following the
          process described in Section 6 of <xref target="RFC7618"/>.
        </t>
      </section>
    </section>

    <section title="Server Behavior">
      <t>Beyond the normal DHCP 4o6 functionality defined in
        <xref target="RFC7341"/>, the server MUST also store the IPv6
        softwire source address of the client in the leasing address
        database, alongside the IPv4 address and client identifier.
      </t>
      
      <t>
        An OPTION_DHCP4O6_S46_SADDR containing the bound softwire source
        address MUST be sent in every DHCPACK message sent by the
        server.
      </t>

      <t>The binding entry between the client's IPv6 softwire source
        address and the leased IPv4 address is valid as long as the IPv4
        lease remains valid.
      </t>

      <section title="Changing the Bound IPv6 Source Address" 
        anchor="srv-cli-addr-change">
        <t>In the event that the server receives a DHCPREQUEST message
          for an active IPv4 lease containing a OPTION_DHCP4O6_S46_SADDR
          with an IPv6 address which differs from the address which
          is currently stored, the server updates the stored softwire
          source address with the new address supplied by the client,
          and sends a DHCPACK message containing the updated softwire
          source address in OPTION_DHCP4O6_S46_SADDR.
        </t>
        <t>The server MAY implement a policy enforcing a minimum time
          interval between a client updating its softwire source
          IPv6 address. If a client attempts to update the softwire
          source IPv6 address before the minimum time has expired,
          the server can either silently drop the client's 
          message or send back a DHCPACK message containing the
          existing IPv6 address binding in OPTION_DHCP4O6_S46_SADDR.
          If implemented, the default minimum client source address
          update interval is 60 seconds.
        </t>
      </section>

      <section title="Handling Conflicts Between Client's 
      Bound IPv6 Source Addresses">
      
      <t>In order for traffic to be forwarded correctly, 
       each CE's softwire IPv6 source addresses must be unique.
       To ensure this, on receipt of every client DHCPREQUEST
       message containing OPTION_DHCP4O6_S46_SADDR, the 
       DHCP 4o6 server MUST check the received IPv6 address
       against all existing CE source addresses stored for
       active client IPv4 leases. If there is a match,
       then the client's source address MUST NOT be stored
       or updated.</t>
       <t>Depending on where the client and server
       are in the address leasing lifecycle, the DHCP 4o6
       server then takes the following action:
       </t>

       <t><list style="symbols">
       <t>If the DHCP 4o6 does not have a current, active 
       IPv4 address lease for the client, then the DHCP
       address allocation process has not been succesful.
       The server returns a DHCPNAK message to the client.
       </t>

       <t>If the DHCP 4o6 does have a current, active 
       IPv4 address lease, then the source address update 
       process (see <xref target="srv-cli-addr-change"/>)
       has not been successful. The DHCP 4o6 server 
       can either silently drop the client's  message or
       return a DHCPACK message containing the existing IPv6 
       address binding in OPTION_DHCP4O6_S46_SADDR.
       </t>
       </list></t>
      </section>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>Security considerations which are applicable to
      <xref target="RFC7341"/> are also applicable here.</t>

      <t>A rogue client could attempt to use the mechanism described
      in <xref target="cli-addr-change"/> to redirect IPv4 traffic
      intended for another client to itself. This would be performed by
      sending a DHCPREQUEST message for another client's active IPv4
      lease containing the attacker's softwire IPv6 address in
      OPTION_DHCP4O6_S46_SADDR.</t>

      <t>For such an attack to be effective, the attacker would
      need to know both the client identifier and active IPv4
      address lease currently in use by another client. This could
      be attempted in three ways:</t>

      <t><list style="numbers">
      <t>One customer learning the active IPv4 address lease
         and client identifier of another customer via snooping
         the DHCP4o6 message flow between the client
         and server. The mechanism described in this document is
         intended for use in a typical ISP network topology with 
         a dedicated layer-2 access network per-client,
         meaning that snooping of another client's traffic is
         not possible. If the access network is a shared
         medium then it provisioning softwire clients using
         dynamic DHCP4o6 as described here is 
         NOT RECOMMENDED.</t>
         
      <t>Learning the active IPv4 address lease and client identifier
         via snooping the DHCP4o6 message flow between the client
         and server in the aggregation or core ISP network.
         In this case, the attacker requires a level
         of access to the ISP's infrastructure that means they can already
         intercept or interfere with traffic flows to the client.</t>
         
      <t>An attacker could attempt to brute-force guessing the IPv4
         lease address and client identifier tuple. The risk of
         this can be reduced by using a client identifier format
         which is not easily guessable, e.g., by using a random
         based client identifier (see <xref target="RFC7844"/>
         Section 3.5).</t>
         </list></t>

      <t>
      An attacker could attempt to redirect existing flows to a
      client unable to process the traffic. This type of attack can
      be prevented by implementing <xref target="BCP38"/> network ingress 
      filtering in conjunction with the BR source address validation processes
      described in <xref target="RFC7596"/> Section 5.2 and 
      <xref target="RFC7597"/> Section 8.1.
      </t>

      <t>A client may attempt to overload the server by sending
        multiple source address update messages (see <xref target="cli-addr-change"/>)
        in a short time frame. This risk can be reduced by implementing 
        a server policy enforcing a minimum time interval between client
        address changes as described in <xref target="srv-cli-addr-change"/>.
      </t>

      <section title="Client Privacy Considerations">
     <t><xref target="RFC7844"/> describes anonymity profiles for
     DHCP clients. These considerations and recommendations are
     also applicable to clients implementing the mechanism described
     in this document. As DHCP4o6 only uses DHCPv6 as a stateless
     transport for DHCPv4 messages, the "Anonymity Profile for DHCPv4"
     described in Section 3 is most relevant here.
     </t>

     <t>In addition to the considerations given in 
     <xref target="RFC7844"/>, the mechanism that the
     client uses for constructing the interface identifier 
     for its IPv6 softwire source address 
     (see <xref target="cli-init"/>), could result in the
     device being trackable across different networks
     and sessions, e.g., if the client's softwire
     IID is immutable.</t>
     
     <t>This can be mitigated by constructing the softwire source
     IPv6 address as per Section 6 of <xref target="RFC7597"/>.
     Here, the address' IID contains only the allocated IPv4 address
     (and port set identifier if <xref target="RFC7618"/> is
     being used). This means no additional client information is
     exposed to the DHCP4o6 server, and will also mean
     that the IID will change as the leased
     IPv4 address changes (e.g., between sessions when Section 3.5
     of <xref target="RFC7844"/> is implemented).</t>
     </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">
    <t>IANA is requested to assign the OPTION_S46_BIND_IPV6_PREFIX (TBD1)
      option code from the DHCPv6 "Option Codes" registry maintained at 
      http://www.iana.org/assignments/dhcpv6-parameters.</t>

    <t>IANA is requested to assign the OPTION_DHCP4O6_S46_SADDR (TBD2) option
      code from the "BOOTP Vendor Extensions and DHCP Options" registry maintained
      at http://www.iana.org/assignments/bootp-dhcp-parameters.</t>

    <t>IANA is requested to update the entry for DHCPv6 Option S46_BR (90) in the
       Option Codes table at
       https://www.iana.org/assignments/dhcpv6-parameters as follows:</t>

    <t>Old Entry:</t>
     <figure >
         <artwork align="left"><![CDATA[
    Value:             90
    Description:       OPTION_S46_BR
    Client ORO:        No
    Singleton Option:  No
    Reference:         [RFC7598]
]]></artwork></figure>
     <t>New Entry:</t>
     <figure >
         <artwork align="left"><![CDATA[
    Value:             90
    Description:       OPTION_S46_BR
    Client ORO:        Yes
    Singleton Option:  No
    Reference:         [RFC7598] [RFCXXXX]
]]></artwork>
      </figure>

<t>IANA is also requested to make a new entry for OPTION_S46_BIND_IPV6_PREFIX
(TBD1) in the Option Codes table at 
https://www.iana.org/assignments/dhcpv6-parameters:</t>

     <figure >
         <artwork align="left"><![CDATA[
    Value:             TDB1
    Description:       OPTION_S46_BIND_IPV6_PREFIX
    Client ORO:        Yes
    Singleton Option:  Yes
    Reference:         [RFCXXXX]
]]></artwork></figure>

    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The authors would like to thank Ted Lemon, Lishan Li, Tatuya
        Jinmei, Jonas Gorski and Razvan Becheriu for their contributions
        and comments.
      </t>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>
      <?rfc include="reference.RFC.2131"?>
      <?rfc include='reference.RFC.7341'?>
      <?rfc include='reference.RFC.7598'?>
      <?rfc include='reference.I-D.ietf-dhc-rfc3315bis'?>
      <?rfc include='reference.RFC.8174'?>
    </references>

    <references title="Informative References">
      <reference anchor="BCP38">
        <front>
          <title>Network Ingress Filtering:
            Defeating Denial of Service Attacks which employ
                  IP Source Address Spoofing
          https://tools.ietf.org/html/bcp38
          </title>

          <author>
            <organization>IETF</organization>
          </author>

          <date />
        </front>
        <seriesInfo name="RFC" value="2827"/>
        <seriesInfo name="BCP" value="38" />
      </reference>
      <?rfc include='reference.RFC.2827'?>
      <?rfc include='reference.RFC.7596'?>
      <?rfc include='reference.RFC.7597'?>
      <?rfc include='reference.RFC.7618'?>
      <?rfc include='reference.RFC.7844'?>
    </references>


  </back>
</rfc>
