<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-dhc-dhcpv4-over-dhcpv6-ra-06" category="std" consensus="true" submissionType="IETF" xml:lang="en" number="9928" tocInclude="true" sortRefs="true" symRefs="true" version="3">

  <link href="https://datatracker.ietf.org/doc/draft-ietf-dhc-dhcpv4-over-dhcpv6-ra-06" rel="prev"/>
  <front>
    <title abbrev="DHCP 4o6 Relay Agent">DHCPv4 over DHCPv6 with Relay Agent Support</title>
    <seriesInfo name="RFC" value="9928"/>
    <author initials="C." surname="Porfiri" fullname="Claudio Porfiri">
      <organization>Ericsson</organization>
      <address>
        <email>claudio.porfiri@ericsson.com</email>
      </address>
    </author>
    <author initials="S." surname="Krishnan" fullname="Suresh Krishnan">
      <organization>Cisco</organization>
      <address>
        <email>suresh.krishnan@gmail.com</email>
      </address>
    </author>
    <author initials="J." surname="Arkko" fullname="Jari Arkko">
      <organization>Ericsson</organization>
      <address>
        <email>jari.arkko@ericsson.com</email>
      </address>
    </author>
    <author initials="M." surname="Kühlewind" fullname="Mirja Kühlewind">
      <organization>Ericsson</organization>
      <address>
        <email>mirja.kuehlewind@ericsson.com</email>
      </address>
    </author>
    <date year="2026" month="March"/>
    <area>INT</area>
    <workgroup>dhc</workgroup>
    <keyword>dhcp</keyword>
    <abstract>
      <?line 54?>

<t>This document describes a mechanism for networks
with legacy IPv4-only clients to use services provided by
DHCPv4 over DHCPv6 in a Relay Agent.
RFC 7341 specifies the use of DHCPv4 over DHCPv6 in the client only.
This document specifies an approach based on RFC 7341 that
allows a Relay Agent to implement the DHCPv4-over-DHCPv6 encapsulation and
decapsulation of DHCPv4 messages in DHCPv6 messages on behalf of a
DHCPv4 client.</t>
    </abstract>
  </front>
  <middle>
    <?line 66?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="RFC7341"/> describes a transport mechanism for carrying DHCPv4 <xref target="RFC2131"/>
messages using DHCPv6 <xref target="RFC9915"/> for dynamic provisioning
of IPv4 addresses and other DHCPv4-specific configuration parameters
across IPv6-only networks. The deployment of <xref target="RFC7341"/> requires support in
DHCP clients and at the DHCPv6 server.
However, if a client is embedded in a host that only supports IPv4
and cannot easily be replaced or updated (which could be due to any
number of technical or business reasons), this approach does not
work.</t>
      <t>Similarly, the DHCPv6 Relay Agent specification defined in <xref target="RFC9915"/>,
which also refers to <xref target="RFC6221"/> for the Lightweight DHCPv6 Relay Agent
(LDRA) behavior, does not provide any mechanism to handle legacy DHCPv4,
except by requiring the client to implement the DHCPv4-over-DHCPv6
encapsulation and decapsulation.</t>
      <t>This document specifies a solution based on <xref target="RFC7341"/> that can be
implemented in intermediate nodes such as switches or routers,
without putting any requirements on clients. No new protocols or extensions are needed;
instead, this document specifies a new use case for <xref target="RFC7341"/> that allows
a Relay Agent to perform the DHCPv4-over-DHCPv6 encapsulation and decapsulation instead of
the client.</t>
      <section anchor="applicability">
        <name>Applicability Scope</name>
        <t>The mechanisms described in this document apply to the configuration phase
of hosts that need to receive an IPv4 address when a DHCP server for IPv4 <xref target="RFC2131"/> is not
reachable directly from the host. Furthermore, the host is unable to implement
a DHCP client conformant to <xref target="RFC7341"/>, as it is connected to an IPv4-only
network. However, there is a DHCPv6 server that can provide IPv4 addresses by means of
the mechanisms specified in <xref target="RFC7341"/>.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The following terms and abbreviations are used in this document:</t>
      <dl newline="true">
        <dt>DHCP:</dt>
        <dd>
          <t>Refers to DHCPv4 and/or DHCPv6 if not otherwise specified.</t>
        </dd>
        <dt>DHCP Relay Agent:</dt>
        <dd>
          <t>Refers to a common concept in all of the following protocols, although the details differ
between them: the Bootstrap Protocol (BOOTP) <xref target="RFC0951"/> <xref target="RFC1542"/>, DHCPv4
<xref target="RFC2131"/> <xref target="RFC2132"/>, and DHCPv6 <xref target="RFC9915"/>.</t>
        </dd>
        <dt>DHCPv4:</dt>
        <dd>
          <t>Refers to DHCP as defined in <xref target="RFC2131"/>.</t>
        </dd>
        <dt>DHCPv4 over DHCPv6 (DHCP 4o6):</dt>
        <dd>
          <t>Refers to the architecture, the procedures, and the protocols specified in the
DHCPv4-over-DHCPv6 document <xref target="RFC7341"/>.</t>
        </dd>
        <dt>DHCPv4-over-DHCPv6 Relay Agent (4o6RA):</dt>
        <dd>
          <t>Refers to a Relay Agent that implements the DHCP 4o6
transport as specified in this document.</t>
        </dd>
        <dt>Layer 3 Relay Agent (L3RA):</dt>
        <dd>
          <t>Refers to a DHCP Relay Agent as specified in <xref target="RFC9915"/> that is not a LDRA.</t>
        </dd>
        <dt>Lightweight DHCPv6 Relay Agent (LDRA):</dt>
        <dd>
          <t>Refers to an extension of the original DHCPv6 Relay Agent specification, to allow
Layer 2 (L2) only devices to perform a Relay Agent function <xref target="RFC6221"/>.</t>
        </dd>
      </dl>
        <t>
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
    "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
    "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
    "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be
    interpreted as described in BCP&nbsp;14 <xref target="RFC2119"/> <xref
    target="RFC8174"/> when, and only when, they appear in all capitals, as
    shown here.
        </t>
      <?line -18?>

</section>
    <section anchor="dhcpv4-over-dhcpv6-relay-agent-4o6ra">
      <name>DHCPv4-over-DHCPv6 Relay Agent (4o6RA)</name>
      <t>This document assumes a network where IPv4-only hosts are connected
to a network that supports IPv6 and limited IPv4 services.</t>
      <t>To address such a network setup, this document extends
DHCPv6 Relay Agents with DHCPv4 over DHCPv6, as shown in <xref target="fig_4o6RA"/>.</t>
      <figure anchor="fig_4o6RA">
        <name>Architecture Example with Legacy DHCP Client</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="208" width="480" viewBox="0 0 480 208" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,64 L 8,128" fill="none" stroke="black"/>
              <path d="M 80,48 L 80,64" fill="none" stroke="black"/>
              <path d="M 80,128 L 80,144" fill="none" stroke="black"/>
              <path d="M 96,64 L 96,128" fill="none" stroke="black"/>
              <path d="M 176,64 L 176,128" fill="none" stroke="black"/>
              <path d="M 192,48 L 192,64" fill="none" stroke="black"/>
              <path d="M 192,128 L 192,144" fill="none" stroke="black"/>
              <path d="M 288,48 L 288,64" fill="none" stroke="black"/>
              <path d="M 288,128 L 288,144" fill="none" stroke="black"/>
              <path d="M 304,64 L 304,128" fill="none" stroke="black"/>
              <path d="M 384,64 L 384,128" fill="none" stroke="black"/>
              <path d="M 400,48 L 400,64" fill="none" stroke="black"/>
              <path d="M 400,128 L 400,144" fill="none" stroke="black"/>
              <path d="M 472,64 L 472,128" fill="none" stroke="black"/>
              <path d="M 96,32 L 176,32" fill="none" stroke="black"/>
              <path d="M 304,32 L 384,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
              <path d="M 176,64 L 304,64" fill="none" stroke="black"/>
              <path d="M 384,64 L 472,64" fill="none" stroke="black"/>
              <path d="M 96,96 L 176,96" fill="none" stroke="black"/>
              <path d="M 304,96 L 384,96" fill="none" stroke="black"/>
              <path d="M 8,128 L 96,128" fill="none" stroke="black"/>
              <path d="M 176,128 L 304,128" fill="none" stroke="black"/>
              <path d="M 384,128 L 472,128" fill="none" stroke="black"/>
              <path d="M 96,160 L 176,160" fill="none" stroke="black"/>
              <path d="M 304,160 L 384,160" fill="none" stroke="black"/>
              <path d="M 96,32 C 87.16936,32 80,39.16936 80,48" fill="none" stroke="black"/>
              <path d="M 176,32 C 184.83064,32 192,39.16936 192,48" fill="none" stroke="black"/>
              <path d="M 304,32 C 295.16936,32 288,39.16936 288,48" fill="none" stroke="black"/>
              <path d="M 384,32 C 392.83064,32 400,39.16936 400,48" fill="none" stroke="black"/>
              <path d="M 96,160 C 87.16936,160 80,152.83064 80,144" fill="none" stroke="black"/>
              <path d="M 176,160 C 184.83064,160 192,152.83064 192,144" fill="none" stroke="black"/>
              <path d="M 304,160 C 295.16936,160 288,152.83064 288,144" fill="none" stroke="black"/>
              <path d="M 384,160 C 392.83064,160 400,152.83064 400,144" fill="none" stroke="black"/>
              <g class="text">
                <text x="140" y="68">L2</text>
                <text x="340" y="68">IPv6</text>
                <text x="52" y="84">DHCPv4</text>
                <text x="136" y="84">Network</text>
                <text x="236" y="84">DHCPv6</text>
                <text x="344" y="84">Network</text>
                <text x="412" y="84">DHCP</text>
                <text x="448" y="84">4o6</text>
                <text x="52" y="100">Client</text>
                <text x="216" y="100">Relay</text>
                <text x="264" y="100">Agent</text>
                <text x="428" y="100">Server</text>
                <text x="220" y="116">with</text>
                <text x="264" y="116">4o6RA</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
           .-----------.             .-----------.
          |             |           |             |
 +--------+-+    L2   +-+-----------+-+  IPv6   +-+--------+
 |  DHCPv4  | Network |    DHCPv6     | Network | DHCP 4o6 |
 |  Client  +---------+  Relay Agent  +---------+  Server  |
 |          |         |   with 4o6RA  |         |          |
 +--------+-+         +-+-----------+-+         +-+--------+
          |             |           |             |
           '-----------'             '-----------'

]]></artwork>
        </artset>
      </figure>
      <t>This document specifies the encapsulation
and decapsulation specified in <xref target="RFC7341"/> to be performed in the Relay Agent
without requiring any changes on the DHCPv4 client.
In this case, it is up to the Relay Agent to provide the full DHCP
4o6 support, and the legacy DHCPv4 client is not aware that it is being served
via a DHCP 4o6 service.
As the 4o6RA acts as a DHCP 4o6 client, all prerequisites and configurations
that apply to the DHCP client in <xref section="5" sectionFormat="of" target="RFC7341"/> are also applied to the 4o6RA.</t>
      <t>As the 4o6RA takes the role of the client in respect to <xref target="RFC7341"/>,
it is responsible for determining a suitable interface where it acts as a
DHCPv6 client, and it is responsible for locating a suitable DHCPv6
server or Relay Agent and obtaining the necessary IPv6 configuration.
As specified in <xref target="RFC7341"/>, the 4o6RA, acting as DHCP 4o6 client, therefore has to request
the DHCP 4o6 Server Address option from the server by sending the
Option Request option as described in <xref target="RFC9915"/>
before it can use the DHCP 4o6 transport.</t>
      <t>To maintain interoperability with existing DHCPv6 relays and servers,
the message format is unchanged from <xref target="RFC9915"/>. The 4o6RA implements
the same message types as a DHCPv6 Relay Agent (see <xref section="6" sectionFormat="of" target="RFC7341"/>).</t>
      <t>However, in this specification, the 4o6RA, instead of the client, creates the DHCPV4-QUERY message
and encapsulates the DHCP request message received from the legacy DHCPv4 client.</t>
      <t>When the DHCPV4-RESPONSE message is received by the DHCP 4o6 Relay Agent,
it looks for the DHCPv4 message option within this message.
If this option is not found or the DHCPv4-RESPONSE message is not well-formed,
it <bcp14>MUST</bcp14> be discarded.
If the DHCPv4 message option is present and correct, the 4o6RA <bcp14>MUST</bcp14> extract the DHCPv4
message and forward the encapsulated DHCPv4-RESPONSE to the requesting DHCPv4
client, given that the encapsulated DHCPv4-RESPONSE is correct and can be
actually forwarded.</t>
      <t>Layer 2 (L2) Relay Agents receiving DHCPV4-QUERY or DHCPV4-RESPONSE messages
<bcp14>MUST</bcp14> handle them as specified in <xref section="6" sectionFormat="of" target="RFC6221"/>.</t>
      <t>In any given environment, DHCPv6 servers to which DHCPV4-QUERY
requests are routed are expected to be compliant with DHCP 4o6 according
to <xref target="RFC7341"/>.  No additional requirements on DHCPv6 servers are set
by this specification.</t>
      <section anchor="intermediate-relays">
        <name>Intermediate Relays</name>
        <t>Intermediate relays shall behave according to <xref section="10" sectionFormat="of" target="RFC7341"/>.</t>
      </section>
      <section anchor="topology_considerations">
        <name>4o6RA and Topology Discovery</name>
        <t>In some networks, the configuration of a host may depend on the topology.
However, when a new host attaches to a network, it may be unaware
of the topology and, consequently, how it has to be configured.</t>
        <t>DHCPv4 <xref target="RFC2131"/> and DHCPv6 <xref target="RFC9915"/> specifications
describe how addresses can typically be allocated to clients based on network
topology information provided by a DHCP relay.</t>
        <t>Address/prefix allocation decisions are integral to the allocation of
addresses and prefixes in DHCP, as described in detail
in <xref target="RFC7969"/>. This specification aims to guarantee that the 4o6RA does not
break any legacy capability when used for topology discovery.</t>
        <t>Topology discovery as described in <xref target="RFC7969"/> differs between
IPv4 and IPv6 as follows:</t>
        <ul spacing="normal">
          <li>
            <t>IPv4: When using DHCP on IPv4, only the first Relay Agent <bcp14>SHOULD</bcp14>
set the giaddr field (<xref section="3.1" sectionFormat="of" target="RFC7969"/>). Thus, in a
network that has more than one Relay Agent, only part of the topology
is transported via DHCPv4.</t>
          </li>
          <li>
            <t>IPv6: When using DHCPv6, all Relay Agents <bcp14>SHOULD</bcp14> send
link-address and Interface-ID options that provide
information about the complete path
between the DHCPv6 client and the DHCPv6 server to the DHCPv6 server.</t>
          </li>
        </ul>
        <t>In Layer 2 networks, Lightweight DHCPv6 Relay Agents (LDRAs) <xref target="RFC6221"/>
can be used.</t>
        <t>When provided, the topology information is available at the DHCPv6
server in the form of a sequence of the link-address field and Interface-ID option.</t>
        <t>Then, topology information for the given IP address
can be obtained from the DHCPv6 server and used for configuration
or other purposes.</t>
        <t><xref target="RFC7341"/> enables the client to use DHCPv6 for topology discovery
even within a DHCPv4 context, as the DHCPv6 Relay Agent knows
the interface where the encapsulated DHCP request is received.
However, as shown in <xref target="fig_4o6RA_RA"/>, the introduction of DHCP 4o6 at
the edge of the IPv6 network hides the Layer 2 network from the DHCPv6 RA.
As such, moving DHCP 4o6 to an intermediate node rather than performing it at the client breaks
the topology propagation, as 4o6RA-only solutions do not provide any interface
information in the encapsulated message.</t>
        <figure anchor="fig_4o6RA_RA">
          <name>Broken Topology Information</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="208" width="576" viewBox="0 0 576 208" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,64 L 8,128" fill="none" stroke="black"/>
                <path d="M 80,48 L 80,64" fill="none" stroke="black"/>
                <path d="M 80,128 L 80,144" fill="none" stroke="black"/>
                <path d="M 96,64 L 96,128" fill="none" stroke="black"/>
                <path d="M 120,64 L 120,128" fill="none" stroke="black"/>
                <path d="M 200,64 L 200,128" fill="none" stroke="black"/>
                <path d="M 224,64 L 224,128" fill="none" stroke="black"/>
                <path d="M 240,48 L 240,64" fill="none" stroke="black"/>
                <path d="M 240,128 L 240,144" fill="none" stroke="black"/>
                <path d="M 272,48 L 272,64" fill="none" stroke="black"/>
                <path d="M 272,128 L 272,144" fill="none" stroke="black"/>
                <path d="M 304,64 L 304,128" fill="none" stroke="black"/>
                <path d="M 344,64 L 344,128" fill="none" stroke="black"/>
                <path d="M 416,64 L 416,128" fill="none" stroke="black"/>
                <path d="M 480,64 L 480,128" fill="none" stroke="black"/>
                <path d="M 496,48 L 496,64" fill="none" stroke="black"/>
                <path d="M 496,128 L 496,144" fill="none" stroke="black"/>
                <path d="M 568,64 L 568,128" fill="none" stroke="black"/>
                <path d="M 96,32 L 224,32" fill="none" stroke="black"/>
                <path d="M 288,32 L 480,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                <path d="M 120,64 L 200,64" fill="none" stroke="black"/>
                <path d="M 224,64 L 304,64" fill="none" stroke="black"/>
                <path d="M 344,64 L 416,64" fill="none" stroke="black"/>
                <path d="M 480,64 L 568,64" fill="none" stroke="black"/>
                <path d="M 96,96 L 120,96" fill="none" stroke="black"/>
                <path d="M 200,96 L 224,96" fill="none" stroke="black"/>
                <path d="M 304,96 L 344,96" fill="none" stroke="black"/>
                <path d="M 416,96 L 480,96" fill="none" stroke="black"/>
                <path d="M 8,128 L 96,128" fill="none" stroke="black"/>
                <path d="M 120,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 224,128 L 304,128" fill="none" stroke="black"/>
                <path d="M 344,128 L 416,128" fill="none" stroke="black"/>
                <path d="M 480,128 L 568,128" fill="none" stroke="black"/>
                <path d="M 96,160 L 224,160" fill="none" stroke="black"/>
                <path d="M 288,160 L 480,160" fill="none" stroke="black"/>
                <path d="M 96,32 C 87.16936,32 80,39.16936 80,48" fill="none" stroke="black"/>
                <path d="M 224,32 C 232.83064,32 240,39.16936 240,48" fill="none" stroke="black"/>
                <path d="M 288,32 C 279.16936,32 272,39.16936 272,48" fill="none" stroke="black"/>
                <path d="M 480,32 C 488.83064,32 496,39.16936 496,48" fill="none" stroke="black"/>
                <path d="M 96,160 C 87.16936,160 80,152.83064 80,144" fill="none" stroke="black"/>
                <path d="M 224,160 C 232.83064,160 240,152.83064 240,144" fill="none" stroke="black"/>
                <path d="M 288,160 C 279.16936,160 272,152.83064 272,144" fill="none" stroke="black"/>
                <path d="M 480,160 C 488.83064,160 496,152.83064 496,144" fill="none" stroke="black"/>
                <g class="text">
                  <text x="124" y="52">L2</text>
                  <text x="168" y="52">Network</text>
                  <text x="356" y="52">IPv6</text>
                  <text x="408" y="52">Network</text>
                  <text x="52" y="84">DHCPv4</text>
                  <text x="156" y="84">L2</text>
                  <text x="256" y="84">4o6</text>
                  <text x="380" y="84">DHCPv6</text>
                  <text x="508" y="84">DHCP</text>
                  <text x="544" y="84">4o6</text>
                  <text x="52" y="100">Client</text>
                  <text x="156" y="100">Switch</text>
                  <text x="264" y="100">Relay</text>
                  <text x="376" y="100">Relay</text>
                  <text x="524" y="100">Server</text>
                  <text x="264" y="116">Agent</text>
                  <text x="376" y="116">Agent</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
           .-----------------.     .-------------------------.
          |    L2 Network     |   |        IPv6 Network       |
 +--------+-+  +---------+  +-+---+---+    +--------+       +-+--------+
 |  DHCPv4  |  |   L2    |  |  4o6    |    | DHCPv6 |       | DHCP 4o6 |
 |  Client  +--+ Switch  +--+  Relay  +----+ Relay  +-------+  Server  |
 |          |  |         |  |  Agent  |    | Agent  |       |          |
 +--------+-+  +---------+  +-+---+---+    +--------+       +-+--------+
          |                   |   |                           |
           '-----------------'     '-------------------------'

]]></artwork>
          </artset>
        </figure>
        <t>In order to provide full topology information, it is <bcp14>RECOMMENDED</bcp14> that
any implementation of 4o6RA be combined
with an LDRA implementation <xref target="RFC6221"/> in a back-to-back structure and that the
LDRA implementation includes a mechanism to obtain interface information that
can be used to provide the Interface-ID option to outgoing
DHCPV4-QUERY messages, as specified in <xref section="5.3.2" sectionFormat="of" target="RFC6221"/>.</t>
        <t>The internal mechanisms to exchange interface information,
their format, and whether the interface information contains an indication that a 4o6RA
is involved, are out of the scope for this document.</t>
        <t>The resulting architecture is shown in <xref target="fig_4o6LDRA"/> where
the Relay Agent is implementing 4o6RA and LDRA and has an internal interface to
propagate topology information from 4o6RA to LDRA.</t>
        <figure anchor="fig_4o6LDRA">
          <name>Topology Information Preserved with LDRA</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="224" width="528" viewBox="0 0 528 224" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,80 L 8,144" fill="none" stroke="black"/>
                <path d="M 80,48 L 80,80" fill="none" stroke="black"/>
                <path d="M 80,144 L 80,160" fill="none" stroke="black"/>
                <path d="M 96,80 L 96,144" fill="none" stroke="black"/>
                <path d="M 120,80 L 120,144" fill="none" stroke="black"/>
                <path d="M 200,80 L 200,144" fill="none" stroke="black"/>
                <path d="M 224,80 L 224,144" fill="none" stroke="black"/>
                <path d="M 240,48 L 240,80" fill="none" stroke="black"/>
                <path d="M 240,144 L 240,160" fill="none" stroke="black"/>
                <path d="M 272,48 L 272,80" fill="none" stroke="black"/>
                <path d="M 272,144 L 272,160" fill="none" stroke="black"/>
                <path d="M 296,80 L 296,144" fill="none" stroke="black"/>
                <path d="M 376,80 L 376,144" fill="none" stroke="black"/>
                <path d="M 432,80 L 432,144" fill="none" stroke="black"/>
                <path d="M 488,48 L 488,80" fill="none" stroke="black"/>
                <path d="M 488,144 L 488,160" fill="none" stroke="black"/>
                <path d="M 520,80 L 520,144" fill="none" stroke="black"/>
                <path d="M 96,32 L 224,32" fill="none" stroke="black"/>
                <path d="M 288,32 L 472,32" fill="none" stroke="black"/>
                <path d="M 8,80 L 96,80" fill="none" stroke="black"/>
                <path d="M 120,80 L 200,80" fill="none" stroke="black"/>
                <path d="M 224,80 L 376,80" fill="none" stroke="black"/>
                <path d="M 432,80 L 520,80" fill="none" stroke="black"/>
                <path d="M 96,112 L 120,112" fill="none" stroke="black"/>
                <path d="M 200,112 L 224,112" fill="none" stroke="black"/>
                <path d="M 376,112 L 432,112" fill="none" stroke="black"/>
                <path d="M 8,144 L 96,144" fill="none" stroke="black"/>
                <path d="M 120,144 L 200,144" fill="none" stroke="black"/>
                <path d="M 224,144 L 376,144" fill="none" stroke="black"/>
                <path d="M 432,144 L 520,144" fill="none" stroke="black"/>
                <path d="M 96,176 L 224,176" fill="none" stroke="black"/>
                <path d="M 288,176 L 472,176" fill="none" stroke="black"/>
                <path d="M 96,32 C 87.16936,32 80,39.16936 80,48" fill="none" stroke="black"/>
                <path d="M 224,32 C 232.83064,32 240,39.16936 240,48" fill="none" stroke="black"/>
                <path d="M 288,32 C 279.16936,32 272,39.16936 272,48" fill="none" stroke="black"/>
                <path d="M 472,32 C 480.83064,32 488,39.16936 488,48" fill="none" stroke="black"/>
                <path d="M 96,176 C 87.16936,176 80,168.83064 80,160" fill="none" stroke="black"/>
                <path d="M 224,176 C 232.83064,176 240,168.83064 240,160" fill="none" stroke="black"/>
                <path d="M 288,176 C 279.16936,176 272,168.83064 272,160" fill="none" stroke="black"/>
                <path d="M 472,176 C 480.83064,176 488,168.83064 488,160" fill="none" stroke="black"/>
                <g class="text">
                  <text x="108" y="52">L2</text>
                  <text x="152" y="52">Network</text>
                  <text x="196" y="52">or</text>
                  <text x="348" y="52">IPv6</text>
                  <text x="400" y="52">Network</text>
                  <text x="136" y="68">IPv6-Only</text>
                  <text x="196" y="68">Link</text>
                  <text x="52" y="100">DHCPv4</text>
                  <text x="156" y="100">L2</text>
                  <text x="256" y="100">4o6</text>
                  <text x="332" y="100">LDRA</text>
                  <text x="460" y="100">DHCP</text>
                  <text x="496" y="100">4o6</text>
                  <text x="52" y="116">Client</text>
                  <text x="156" y="116">Switch</text>
                  <text x="264" y="116">Relay</text>
                  <text x="320" y="116">RFC</text>
                  <text x="356" y="116">6221</text>
                  <text x="476" y="116">Server</text>
                  <text x="264" y="132">Agent</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
           .-----------------.     .------------------------.
          |  L2 Network or    |   |       IPv6 Network       |
          |  IPv6-Only Link   |   |                          |
 +--------+-+  +---------+  +-+---+--+---------+      +------+---+
 |  DHCPv4  |  |   L2    |  |  4o6   |  LDRA   |      | DHCP 4o6 |
 |  Client  +--+ Switch  +--+  Relay + RFC 6221+------+  Server  |
 |          |  |         |  |  Agent |         |      |          |
 +--------+-+  +---------+  +-+---+--+---------+      +------+---+
          |                   |   |                          |
           '-----------------'     '------------------------'

]]></artwork>
          </artset>
        </figure>
        <t>In a simple case, where the same node hosts the 4o6RA and the DHCP 4o6 server,
it might be enough to only use 4o6RA, as shown in <xref target="fig_4o6RAserver"/>, where
CPE stands for "Customer Premises Equipment".</t>
        <figure anchor="fig_4o6RAserver">
          <name>Topology Information Preserved by 4o6 Relay Agent in DHCP Server</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="208" width="344" viewBox="0 0 344 208" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,64 L 8,128" fill="none" stroke="black"/>
                <path d="M 80,48 L 80,64" fill="none" stroke="black"/>
                <path d="M 80,128 L 80,144" fill="none" stroke="black"/>
                <path d="M 96,64 L 96,128" fill="none" stroke="black"/>
                <path d="M 176,64 L 176,128" fill="none" stroke="black"/>
                <path d="M 192,48 L 192,64" fill="none" stroke="black"/>
                <path d="M 192,128 L 192,144" fill="none" stroke="black"/>
                <path d="M 248,64 L 248,128" fill="none" stroke="black"/>
                <path d="M 336,64 L 336,128" fill="none" stroke="black"/>
                <path d="M 96,32 L 176,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                <path d="M 176,64 L 336,64" fill="none" stroke="black"/>
                <path d="M 96,96 L 176,96" fill="none" stroke="black"/>
                <path d="M 8,128 L 96,128" fill="none" stroke="black"/>
                <path d="M 176,128 L 336,128" fill="none" stroke="black"/>
                <path d="M 96,160 L 176,160" fill="none" stroke="black"/>
                <path d="M 96,32 C 87.16936,32 80,39.16936 80,48" fill="none" stroke="black"/>
                <path d="M 176,32 C 184.83064,32 192,39.16936 192,48" fill="none" stroke="black"/>
                <path d="M 96,160 C 87.16936,160 80,152.83064 80,144" fill="none" stroke="black"/>
                <path d="M 176,160 C 184.83064,160 192,152.83064 192,144" fill="none" stroke="black"/>
                <g class="text">
                  <text x="100" y="52">L2</text>
                  <text x="144" y="52">Network</text>
                  <text x="52" y="84">DHCP</text>
                  <text x="208" y="84">4o6</text>
                  <text x="276" y="84">DHCP</text>
                  <text x="312" y="84">4o6</text>
                  <text x="52" y="100">Client</text>
                  <text x="216" y="100">Relay</text>
                  <text x="292" y="100">Server</text>
                  <text x="36" y="116">on</text>
                  <text x="64" y="116">CPE</text>
                  <text x="216" y="116">Agent</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
           .-----------.
          | L2 Network  |
 +--------+-+         +-+------+----------+
 |   DHCP   |         |  4o6   | DHCP 4o6 |
 |  Client  +---------+  Relay +  Server  |
 |  on CPE  |         |  Agent |          |
 +--------+-+         +-+------+----------+
          |             |
           '-----------'

]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="deployment-considerations">
      <name>Deployment Considerations</name>
      <t>As clients are unaware of the presence of 4o6RA, the network
deployment needs to ensure that all DHCPv4 broadcast and unicast messages to and
from clients are steered via a 4o6RA.
This can be achieved by placing the 4o6RA in a central position
that can intercept all traffic from the clients or by using Network Address
Translation (NAT) with the 4o6RA address for unicast messages.</t>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>This document specifies the applicability of DHCP 4o6 in a scenario where legacy IPv4 clients are
connected to DHCP 4o6 Relay Agents that perform the encapsulation and decapsulation.
This document does not change anything else in the DHCP 4o6 specification <xref target="RFC7341"/>;
therefore, the security considerations of that document still apply.
Specifically, since the legacy IPv4 client is not aware of the encapsulation and decapsulation,
4o6RA has to provide the protections that are specified in the security
considerations in <xref section="12" sectionFormat="of" target="RFC7341"/>.</t>
      <t>The mechanisms defined here differ from <xref target="RFC7341"/> as they allow the DHCP client
to send and receive DHCPv4 messages, whereas in <xref target="RFC7341"/>, the client
only sends DHCPv6 messages. This makes it possible that in improperly configured
networks where the client is located on the same Layer 2 scope of a DHCPv4 server,
DHCPv4 messages could reach a DHCPv4 server without using the 4o6RA.
While this can cause erroneous state in both clients and servers
and potentially even lead to misconfigurations that impact reachability,
this is seen as a deployment error rather than a security concern.
Further, even though this mechanism may be used for attacks from within the network,
this is not a new concern introduced by this specification.</t>
      <t>More generally, legacy IPv4 clients are not aware of this mechanism; however, even
when DHCP 4o6 is used, the client does not have any control about the
information provided by the Relay Agent.
As such, this change does not raise any additional security concerns.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6221.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7341.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9915.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0951.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1542.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2131.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2132.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7969.xml"/>
      </references>
    </references>
    <?line 376?>

<section anchor="usecase">
      <name>Example Use Case: Topology Discovery for IPv4-Only Radio Unit in 3GPP RAN with Switched Fronthaul</name>
      <t>In 3GPP mobile network architecture, the User Equipment (UE) is
connected via a Radio Access Network (RAN).  RAN is built up with
Baseband Units (BBUs) and Radio Units (RUs). A radio Fronthaul (FH) network
connects RUs and BBUs.  Each RU and BBU is an IP host, and they may
support IPv4 only, IPv6 only, or both, depending on the vendor and the
model.
Each RU is unique as it is tied to a set of antennas, and each antenna
is serving a specific Cell and Sector.
Each RU is configured by the BBU depending on the Cell and Sectors it serves.
However, that dependency is only specified by the cabling between RUs and antennas.
BBUs can be cabled to RUs directly or via a Layer 2 switched network.</t>
      <figure anchor="bb_connected_to_ru">
        <name>3GPP RAN Where RUs Are Cabled Directly to BBUs</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="256" viewBox="0 0 256 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
              <path d="M 8,112 L 8,160" fill="none" stroke="black"/>
              <path d="M 8,208 L 8,256" fill="none" stroke="black"/>
              <path d="M 8,288 L 8,336" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,80" fill="none" stroke="black"/>
              <path d="M 80,112 L 80,160" fill="none" stroke="black"/>
              <path d="M 80,208 L 80,256" fill="none" stroke="black"/>
              <path d="M 80,288 L 80,336" fill="none" stroke="black"/>
              <path d="M 104,144 L 104,176" fill="none" stroke="black"/>
              <path d="M 104,208 L 104,224" fill="none" stroke="black"/>
              <path d="M 128,48 L 128,160" fill="none" stroke="black"/>
              <path d="M 128,224 L 128,304" fill="none" stroke="black"/>
              <path d="M 152,144 L 152,240" fill="none" stroke="black"/>
              <path d="M 248,144 L 248,240" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 80,48 L 128,48" fill="none" stroke="black"/>
              <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
              <path d="M 8,112 L 80,112" fill="none" stroke="black"/>
              <path d="M 80,144 L 104,144" fill="none" stroke="black"/>
              <path d="M 152,144 L 248,144" fill="none" stroke="black"/>
              <path d="M 8,160 L 80,160" fill="none" stroke="black"/>
              <path d="M 128,160 L 152,160" fill="none" stroke="black"/>
              <path d="M 104,176 L 152,176" fill="none" stroke="black"/>
              <path d="M 8,208 L 80,208" fill="none" stroke="black"/>
              <path d="M 104,208 L 152,208" fill="none" stroke="black"/>
              <path d="M 80,224 L 104,224" fill="none" stroke="black"/>
              <path d="M 128,224 L 152,224" fill="none" stroke="black"/>
              <path d="M 152,240 L 248,240" fill="none" stroke="black"/>
              <path d="M 8,256 L 80,256" fill="none" stroke="black"/>
              <path d="M 8,288 L 80,288" fill="none" stroke="black"/>
              <path d="M 80,304 L 128,304" fill="none" stroke="black"/>
              <path d="M 8,336 L 80,336" fill="none" stroke="black"/>
              <g class="text">
                <text x="40" y="52">RU2</text>
                <text x="40" y="132">RU3</text>
                <text x="196" y="180">Baseband</text>
                <text x="196" y="212">Unit</text>
                <text x="40" y="228">RU4</text>
                <text x="40" y="308">RU2</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
     +--------+
     |  RU2   +-----+
     |        |     |
     +--------+     |
                    |
     +--------+     |
     |  RU3   |     |
     |        +--+  |  +-----------+
     +--------+  |  +--+           |
                 +-----+ Baseband  |
                       |           |
     +--------+  +-----+   Unit    |
     |  RU4   +--+  +--+           |
     |        |     |  +-----------+
     +--------+     |
                    |
     +--------+     |
     |  RU2   +-----+
     |        |
     +--------+
]]></artwork>
        </artset>
      </figure>
      <t>In <xref target="bb_connected_to_ru"/>, the BBU is directly cabled to a set of RUs, and the
BBU can recognize the relationship between RUs and Cell/Sectors
based on the cabling between the RUs and antennas.</t>
      <t>When BBUs and RUs are connected via a Layer 2 switched network,
the added level of complexity requires the BBUs to have a deeper
knowledge of the topology in order to properly configure the RUs,
involving knowledge of all the cabling in the switched network.</t>
      <t>Examples for switched networks are shown in <xref section="3" sectionFormat="of" target="RFC7969"/>
and demonstrate the different levels of complexity.
An example of a FH is depicted in <xref target="l2_switched_fh"/>.</t>
      <figure anchor="l2_switched_fh">
        <name>3GPP RAN with Layer 2 Switched Fronthaul Example</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="544" viewBox="0 0 544 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
              <path d="M 8,112 L 8,160" fill="none" stroke="black"/>
              <path d="M 8,192 L 8,240" fill="none" stroke="black"/>
              <path d="M 8,272 L 8,320" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,80" fill="none" stroke="black"/>
              <path d="M 80,112 L 80,160" fill="none" stroke="black"/>
              <path d="M 80,192 L 80,240" fill="none" stroke="black"/>
              <path d="M 80,272 L 80,320" fill="none" stroke="black"/>
              <path d="M 152,48 L 152,144" fill="none" stroke="black"/>
              <path d="M 152,208 L 152,304" fill="none" stroke="black"/>
              <path d="M 168,48 L 168,80" fill="none" stroke="black"/>
              <path d="M 168,208 L 168,240" fill="none" stroke="black"/>
              <path d="M 224,48 L 224,144" fill="none" stroke="black"/>
              <path d="M 224,208 L 224,304" fill="none" stroke="black"/>
              <path d="M 272,48 L 272,320" fill="none" stroke="black"/>
              <path d="M 296,64 L 296,144" fill="none" stroke="black"/>
              <path d="M 296,224 L 296,304" fill="none" stroke="black"/>
              <path d="M 336,64 L 336,96" fill="none" stroke="black"/>
              <path d="M 392,64 L 392,144" fill="none" stroke="black"/>
              <path d="M 392,224 L 392,304" fill="none" stroke="black"/>
              <path d="M 432,48 L 432,320" fill="none" stroke="black"/>
              <path d="M 456,144 L 456,224" fill="none" stroke="black"/>
              <path d="M 536,144 L 536,224" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 152,48 L 224,48" fill="none" stroke="black"/>
              <path d="M 80,64 L 152,64" fill="none" stroke="black"/>
              <path d="M 296,64 L 392,64" fill="none" stroke="black"/>
              <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
              <path d="M 168,80 L 224,80" fill="none" stroke="black"/>
              <path d="M 272,96 L 296,96" fill="none" stroke="black"/>
              <path d="M 336,96 L 392,96" fill="none" stroke="black"/>
              <path d="M 8,112 L 80,112" fill="none" stroke="black"/>
              <path d="M 80,128 L 152,128" fill="none" stroke="black"/>
              <path d="M 224,128 L 272,128" fill="none" stroke="black"/>
              <path d="M 392,128 L 432,128" fill="none" stroke="black"/>
              <path d="M 152,144 L 224,144" fill="none" stroke="black"/>
              <path d="M 296,144 L 392,144" fill="none" stroke="black"/>
              <path d="M 456,144 L 536,144" fill="none" stroke="black"/>
              <path d="M 8,160 L 80,160" fill="none" stroke="black"/>
              <path d="M 432,176 L 456,176" fill="none" stroke="black"/>
              <path d="M 8,192 L 80,192" fill="none" stroke="black"/>
              <path d="M 152,208 L 224,208" fill="none" stroke="black"/>
              <path d="M 80,224 L 152,224" fill="none" stroke="black"/>
              <path d="M 296,224 L 392,224" fill="none" stroke="black"/>
              <path d="M 456,224 L 536,224" fill="none" stroke="black"/>
              <path d="M 8,240 L 80,240" fill="none" stroke="black"/>
              <path d="M 168,240 L 224,240" fill="none" stroke="black"/>
              <path d="M 272,256 L 296,256" fill="none" stroke="black"/>
              <path d="M 8,272 L 80,272" fill="none" stroke="black"/>
              <path d="M 80,288 L 152,288" fill="none" stroke="black"/>
              <path d="M 224,288 L 272,288" fill="none" stroke="black"/>
              <path d="M 392,288 L 432,288" fill="none" stroke="black"/>
              <path d="M 152,304 L 224,304" fill="none" stroke="black"/>
              <path d="M 296,304 L 392,304" fill="none" stroke="black"/>
              <path d="M 8,320 L 80,320" fill="none" stroke="black"/>
              <g class="text">
                <text x="40" y="52">RU1</text>
                <text x="132" y="52">P1</text>
                <text x="196" y="68">L2RA</text>
                <text x="364" y="84">L3RA</text>
                <text x="180" y="100">L2</text>
                <text x="132" y="116">P2</text>
                <text x="188" y="116">Switch</text>
                <text x="40" y="132">RU2</text>
                <text x="180" y="132">#1</text>
                <text x="348" y="132">Router</text>
                <text x="484" y="180">DHCP</text>
                <text x="492" y="196">Server</text>
                <text x="40" y="212">RU3</text>
                <text x="132" y="212">P1</text>
                <text x="492" y="212">#1</text>
                <text x="196" y="228">L2RA</text>
                <text x="180" y="260">L2</text>
                <text x="340" y="260">Baseband</text>
                <text x="132" y="276">P2</text>
                <text x="188" y="276">Switch</text>
                <text x="340" y="276">Unit</text>
                <text x="40" y="292">RU4</text>
                <text x="180" y="292">#2</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
     +--------+
     |  RU1   |     P1 +-+------+     |                   |
     |        +--------+ | L2RA |     |  +----+------+    |
     +--------+        | +------+     |  |    | L3RA |    |
                       |  L2    |     +--+    +------+    |
     +--------+     P2 | Switch |     |  |           |    |
     |  RU2   +--------+  #1    +-----+  |   Router  +----+
     |        |        +--------+     |  +-----------+    |  +---------+
     +--------+                       |                   |  |         |
                                      |                   +--+ DHCP    |
     +--------+                       |                   |  | Server  |
     |  RU3   |     P1 +-+------+     |                   |  |   #1    |
     |        +--------+ | L2RA |     |  +-----------+    |  +---------+
     +--------+        | +------+     |  |           |    |
                       |  L2    |     +--+ Baseband  |    |
     +--------+     P2 | Switch |     |  |   Unit    |    |
     |  RU4   +--------+  #2    +-----+  |           +----+
     |        |        +--------+     |  +-----------+    |
     +--------+                       |                   |
]]></artwork>
        </artset>
      </figure>
      <t>If IPv6 is used and all RUs are capable of DHCPv6 in <xref target="l2_switched_fh"/>,
DHCP topology knowledge can be used for solving the RU configuration problem.
Such solution would use the topology discovery mechanisms described in <xref section="3.2" sectionFormat="of" target="RFC7969"/>.</t>
      <t>If RUs are capable of IPv4 only but implement a DHCP 4o6 client according to <xref target="RFC7341"/>, the same topology discovery mechanisms are applicable.</t>
      <t>If RUs are capable of IPv4 only and cannot implement a DHCP 4o6 client according to <xref target="RFC7341"/>,
the topology discovery mechanisms described in <xref section="3.2" sectionFormat="of" target="RFC7969"/> can be used by introducing 4o6RA in the switches as described in this document.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to acknowledge interesting discussions in
this problem space with <contact fullname="Sarah Gannon"/>, <contact fullname="Ines Ramadza"/>, and <contact fullname="Siddharth Sharma"/>,
as well as reviews and comments provided by <contact fullname="Éric Vyncke"/>, <contact fullname="Mohamed Boucadair"/>,
<contact fullname="David Lamparter"/>, <contact fullname="Michael Richardson"/>, <contact fullname="Alan DeKok"/>, <contact fullname="Dale Worley"/>, <contact fullname="Paul Wouters"/>,
<contact fullname="Deb Cooley"/>, <contact fullname="Erik Kline"/>, <contact fullname="Ketan Talaulikar"/>, <contact fullname="Mike Bishop"/>, and <contact fullname="Roman Danyliw"/>.</t>
    </section>
  </back>
</rfc>
