<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">

<?rfc rfcedstyle="yes"?>
<?rfc compact="yes"?>
<?rfc toc="yes"?>
   <?rfc tocdepth="5"?>
   <?rfc symrefs="yes"?>
   <?rfc sortrefs="yes"?>
   <?rfc comments="yes"?>
   <?rfc inline="yes"?>
   <?rfc subcompact="no"?>

   <rfc number="7291"  category="std" submissionType="IETF" consensus="yes" ipr="trust200902">
     <front>
       <title abbrev="PCP DHCP Options">DHCP Options for the Port Control
       Protocol (PCP)</title>

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

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

	     <city>Rennes</city>

	     <region></region>

	     <code>35000</code>

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

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

       <author fullname="Reinaldo Penno" initials="R." surname="Penno">
	 <organization>Cisco</organization>

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

	     <code></code>

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

	   <email>repenno@cisco.com</email>
	 </address>
       </author>

       <author fullname="Dan Wing" initials="D." surname="Wing">
	 <organization abbrev="Cisco">Cisco Systems, Inc.</organization>

	 <address>
	   <postal>
	     <street>170 West Tasman Drive</street>

	     <city>San Jose</city>

	     <region>California</region>

	     <code>95134</code>

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

	   <email>dwing@cisco.com</email>
	 </address>
       </author>

       <date  month="July" year="2014" />

       <workgroup>PCP Working Group</workgroup>

       <keyword>PCP Server discovery</keyword>
       <keyword>Port Mapping</keyword>
       <keyword>Shared Address</keyword>

       <abstract>
	 <t>This document specifies DHCP (IPv4 and IPv6) options to configure
	 hosts with Port Control Protocol (PCP) server IP addresses. The use of
	 DHCPv4 or DHCPv6 depends on the PCP deployment scenarios. 
 The set of deployment scenarios to which DHCPv4 or DHCPv6
 can be applied is outside the scope of this document.
</t>
       </abstract>

     </front>

     <middle>
       <section title="Introduction">
	 <t>This document defines DHCPv4 <xref target="RFC2131"></xref> and
	 DHCPv6 <xref target="RFC3315"></xref> options that can be used to
	 configure hosts with PCP server <xref target="RFC6887"></xref> IP
	 addresses.</t>

	 <t>This specification assumes a PCP server is reachable with one or
	 multiple IP addresses. As such, a list of IP addresses can be returned
	 in the DHCP PCP server option.</t>

	 <t>This specification allows returning one or multiple lists of PCP
	 server IP addresses. This is used as a hint to guide the PCP client when
	 determining whether to send PCP requests to one or multiple PCP servers.
	 Concretely, the PCP client needs an indication to decide whether entries
	 need to be instantiated in all PCP servers (e.g., multi-homing, multiple
	 PCP-controlled devices providing distinct services, etc.) or use one
	 IP address from the list (e.g., redundancy group scenario, proxy-based
	 model, etc.). Refer to <xref
	 target="PCP-DEPLOYMENT"></xref> for a discussion on
	 PCP deployment scenarios.</t>

	 <t>For guidelines on how a PCP client can use multiple IP addresses and
	 multiple PCP servers, see <xref
	 target="PCP-SERVER"></xref>.</t>

       <section 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>
       </section>

       </section>

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

	 <t><list style="symbols">
	     <t>"PCP server" denotes a functional element that receives and
	     processes PCP requests from a PCP client. A PCP server can be
	     co-located with or be separated from the function (e.g., NAT,
	     Firewall) it controls. Refer to <xref target="RFC6887"></xref>.</t>

	     <t>"PCP client" denotes a PCP software instance responsible for
	     issuing PCP requests to a PCP server. Refer to <xref
	     target="RFC6887"></xref>.</t>

	     <t>"DHCP" refers to both DHCPv4 <xref target="RFC2131"></xref> and
	     DHCPv6 <xref target="RFC3315"></xref>.</t>

	     <t>"DHCP client" denotes a node that initiates requests to obtain
	     configuration parameters from one or more DHCP servers.</t>

	     <t>"DHCP server" refers to a node that responds to requests from DHCP
	     clients.</t>
	   </list></t>
       </section>

       <section title="DHCPv6 PCP Server Option">
	 <t></t>

	 <section title="Format">
	   <t>The DHCPv6 PCP server option can be used to configure a list of
	   IPv6 addresses of a PCP server.</t>

	   <t>The format of this option is shown in <xref
	   target="dhcpv6_name_option"></xref>.</t>


	   <t><figure anchor="dhcpv6_name_option"
	       title="DHCPv6 PCP Server Option">
	       <preamble></preamble>

	       <artwork><![CDATA[
 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_PCP_SERVER      |         Option-length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                     PCP Server IPv6 Address                   |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              ...                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ]]></artwork>

	     </figure>The fields of the option shown in <xref
	   target="dhcpv6_name_option"></xref> are as follows:</t>

	   <t><list style="symbols">
	       <t>Option-code: OPTION_V6_PCP_SERVER (86; see <xref
	       target="iana6"></xref>)</t>

	       <t>Option-length: Length of the "PCP Server IPv6 Address(es)" field
	       in octets. MUST be a multiple of 16.</t>

	       <t>PCP Server IPv6 Addresses: Includes one or more IPv6 addresses
	       <xref target="RFC4291"></xref> of the PCP server to be used by the
	       PCP client. Note, IPv4-mapped IPv6 addresses (Section 2.5.5.2 of
	       <xref target="RFC4291"></xref>) are allowed to be included in this
	       option.</t>
	     </list></t>

	   <t>To return more than one PCP server to the
	   DHCPv6 client (as opposed to more than one address for a single PCP
	   server), the DHCPv6 server returns multiple instances of
	   OPTION_V6_PCP_SERVER.</t>
	 </section>

	 <section title="DHCPv6 Client Behavior">
	   <t>To discover one or more PCP servers, the DHCPv6 client requests PCP
	   server IP addresses by including OPTION_V6_PCP_SERVER in an Option
	   Request Option (ORO), as described in Section 22.7 of <xref
	   target="RFC3315"></xref>.</t>

	   <t>The DHCPv6 client MUST be prepared to receive multiple instances of
	   OPTION_V6_PCP_SERVER; each instance is to be treated as a separate PCP
	   server.</t>

	   <t>If an IPv4-mapped IPv6 address is received in OPTION_V6_PCP_SERVER,
	   it indicates that the PCP server has the corresponding IPv4
	   address.<list style="empty">
	       <t>Note: When presented with the IPv4-mapped prefix, current
	       versions of Windows and Mac OS generate IPv4 packets but will not
	       send IPv6 packets <xref target="RFC6052"></xref>. Representing
	       IPv4 addresses as IPv4-mapped IPv6 addresses follows the same
	       logic as in Section 5 of <xref target="RFC6887"></xref>.</t>
	     </list></t>

	   <t>The DHCPv6 client MUST silently discard multicast and host loopback
	   addresses <xref target="RFC6890"></xref> conveyed in
	   OPTION_V6_PCP_SERVER.</t>
	 </section>
       </section>

       <section title="DHCPv4 PCP Option">
	 <t></t>

	 <section title="Format">
	   <t>The DHCPv4 PCP server option can be used to configure a list of
	   IPv4 addresses of a PCP server. The format of this option is
	   illustrated in <xref target="dhcppcp"></xref>.</t>


           <t><figure anchor="dhcppcp" title="DHCPv4 PCP Server Option">

               <artwork><![CDATA[                                                          
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5                                                     
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                                                    
      |  Code         |     Length    |                                                    
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                                                    
      | List-Length   |   List of     |                                                    
      +-+-+-+-+-+-+-+-+  PCP Server   |                                                    
      /              IPv4 Addresses   /                                                    
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   ---                                              
      | List-Length   |   List of     |    |                                               
      +-+-+-+-+-+-+-+-+  PCP Server   |    |                                               
      /              IPv4 Addresses   /    |                                               
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    |                                               
      .             ...               . optional                                           
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    |                                               
      | List-Length   |   List of     |    |                                               
      +-+-+-+-+-+-+-+-+  PCP Server   |    |                                               
      /              IPv4 Addresses   /    |                                               
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   ---                                              
   ]]></artwork>

               <postamble></postamble>
             </figure></t>

	   <t>The descriptions of the fields are as follows:<list
	       style="symbols">
	       <t>Code: OPTION_V4_PCP_SERVER (158; see <xref
	       target="iana4"></xref>);</t>

	       <t>Length: Length of all included data in octets. The minimum
	       length is 5.</t>

	       <t>List-Length: Length of the "List of PCP Server IPv4 Addresses"
	       field in octets. MUST be a multiple of 4.</t>

	       <t>List of PCP Server IPv4 Addresses: Contains one or more IPv4
	       addresses of the PCP server to be used by the PCP client. The
	       format of this field is shown in <xref target="list"></xref>.</t>
           </list></t>



	     <t><figure anchor="list"
	       title="Format of the List of PCP Server IPv4 Addresses">
	       <artwork><![CDATA[
      0     8     16    24    32    40    48
      +-----+-----+-----+-----+-----+-----+--
      |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 | ...
      +-----+-----+-----+-----+-----+-----+--
	   IPv4 Address 1          IPv4 Address 2 ...]]></artwork>

	       <postamble>This format assumes that an IPv4 address is encoded as
	       a1.a2.a3.a4.</postamble>
	     </figure></t>

	       <t>OPTION_V4_PCP_SERVER can include multiple lists of PCP server
	       IPv4 addresses; each list is treated as a separate PCP server.
	       When several lists of PCP server IPv4 addresses are to be
	       included, the "List-Length" and "List of PCP Server IPv4
	       Addresses" fields are
	       repeated.</t>

	   <t>OPTION_V4_PCP_SERVER is a
	   concatenation-requiring option. As such, the mechanism specified in
	   <xref target="RFC3396"></xref> MUST be used if OPTION_V4_PCP_SERVER
	   exceeds the maximum DHCPv4 option size of 255 octets.</t>
	 </section>

	 <section title="DHCPv4 Client Behavior">
	   <t>To discover one or more PCP servers, the DHCPv4 client requests PCP
	   server IP addresses by including OPTION_V4_PCP_SERVER in a Parameter
	   Request List option <xref target="RFC2132"></xref>.</t>

	   <t>The DHCPv4 client MUST be prepared to receive multiple lists of PCP
	   server IPv4 addresses in the same DHCPv4 PCP server option; each list
	   is to be treated as a separate PCP server.</t>

	   <t>The DHCPv4 client MUST silently discard multicast and host loopback
	   addresses <xref target="RFC6890"></xref> conveyed in
	   OPTION_V4_PCP_SERVER.</t>
	 </section>
       </section>

       <section title="DHCP Server Configuration Guidelines">
	 <t>DHCP servers supporting the DHCP PCP server option can be configured
	 with a list of IP addresses of the PCP server(s). If multiple IP
	 addresses are configured, the DHCP server MUST be explicitly configured
	 whether all or some of these addresses refer to:</t>

	 <t><list style="numbers">
	     <t>the same PCP server: the DHCP server returns multiple addresses
	     in the same instance of the DHCP PCP server option.</t>

	     <t>distinct PCP servers: the DHCP server returns multiple lists of
	     PCP server IP addresses to the requesting DHCP client (encoded as
	     multiple OPTION_V6_PCP_SERVERs or in the same OPTION_V4_PCP_SERVER);
	     each list is referring to a distinct PCP server. For example,
	     multiple PCP servers may be configured to a PCP client in some
	     deployment contexts such as multi-homing. It is out of the scope of this
	     document to enumerate all deployment scenarios that require multiple
	     PCP servers to be returned.</t>
	   </list></t>

	 <t>Precisely how DHCP servers are configured to separate lists of IP
	 addresses according to which PCP server they address is out of the scope of
	 this document. However, DHCP servers MUST NOT combine the IP addresses
	 of multiple PCP servers and return them to the DHCP client as if they
	 belong to a single PCP server, and DHCP servers MUST NOT separate the
	 addresses of a single PCP server and return them as if they belong to
	 distinct PCP servers. For example, if an administrator configures the
	 DHCP server by providing a Fully Qualified Domain Name (FQDN) for a PCP
	 server, even if that FQDN resolves to multiple addresses, the DHCP
	 server MUST deliver them within a single server address block.</t>

	 <t>DHCPv6 servers that implement this option and that can populate the
	 option by resolving FQDNs will need a mechanism for indicating whether
	 to query for A records or only AAAA records. When a query returns A
	 records, the IP addresses in those records are returned in the DHCPv6
	 response as IPv4-mapped IPv6 addresses. <list style="empty">
	     <t>Discussion: The motivation for this design is to accommodate
	     deployment cases where an IPv4 connectivity service is provided
	     while only DHCPv6 is in use (e.g., an IPv4-only PCP server in a
	     Dual-Stack Lite (DS-Lite) context <xref target="RFC6333"></xref>).</t>
	   </list></t>

	 <t>Since this option requires support for IPv4-mapped IPv6 addresses, a
	 DHCPv6 server implementation will not be complete if it does not query
	 for A records and represent any that are returned as IPv4-mapped IPv6
	 addresses in DHCPv6 responses. This behavior is neither required nor
	 suggested for DHCPv6 options in general: it is specific to
	 OPTION_V6_PCP_SERVER. The mechanism whereby DHCPv6 implementations
	 provide this functionality is beyond the scope of this document.</t>

	 <t>For guidelines on providing context-specific configuration
	 information (e.g., returning a regional-based configuration) and
	 information on how a DHCP server might be configured with FQDNs that get
	 resolved on demand, see <xref
	 target="DHC-CONFIG"></xref>.</t>
       </section>

       <section title="Dual-Stack Hosts">
	 <t>A dual-stack host might receive a PCP server option via both DHCPv4 and
	 DHCPv6. For guidance on how a DHCP client can handle PCP server IP lists
	 for the same network but obtained via different mechanisms, see <xref
	 target="PCP-SERVER"></xref>.</t>
       </section>

       <section anchor="mif" title="Hosts with Multiple Interfaces">
	 <t>A host may have multiple network interfaces (e.g., 3G, IEEE 802.11,
	 etc.), each configured differently. Each PCP server learned MUST be
	 associated with the interface via which it was learned.</t>

	 <t>Refer to <xref target="PCP-SERVER"></xref> and
	 Section 8.4 of <xref target="RFC6887"></xref> for more discussion on
	 multi-interface considerations.</t>
       </section>

       <section anchor="Security" title="Security Considerations">
	 <t>The security considerations in <xref target="RFC2131"></xref> and
	 <xref target="RFC3315"></xref> are to be considered. PCP-related
	 security considerations are discussed in <xref
	 target="RFC6887"></xref>.</t>

<!-- The following text has been updated per the RFC Editor Note.
-->
	 <t>
  The PCP server option defined here is applicable when operating
  under the simple threat model (Section 18.1 of <xref
  target="RFC6887"></xref>).   Operation
  under the advanced threat model (Section 18.2 of <xref
  target="RFC6887"></xref>) may
  or may not be appropriate; analysis of this question is out of the
  scope of this document.
</t>
       </section>

       <section anchor="IANA" title="IANA Considerations">
	 <t></t>

	 <section anchor="iana6" title="DHCPv6 Option">
	   <t>IANA has assigned the following new DHCPv6 Option Code in
	   the registry maintained in
<vspace />
	   &lt;http://www.iana.org/assignments/dhcpv6-parameters&gt;:</t>

	   <texttable style="headers">
	     <ttcol align="right">Option Name</ttcol>

	     <ttcol>Value</ttcol>

	     <c>OPTION_V6_PCP_SERVER</c>

	     <c>86</c>
	   </texttable>
	 </section>

	 <section anchor="iana4" title="DHCPv4 Option">
	   <t>IANA has assigned the following new DHCPv4 Option Code in
	   the registry maintained in
<vspace />
	   &lt;http://www.iana.org/assignments/bootp-dhcp-parameters&gt;:</t>

	   <texttable style="headers">
	     <ttcol align="right">Option Name</ttcol>

	     <ttcol>Tag</ttcol>

	     <ttcol>Data Length</ttcol>

	     <ttcol>Meaning</ttcol>

	     <c>OPTION_V4_PCP_SERVER</c>

	     <c>158</c>

	     <c>Variable; the minimum length is 5.</c>

	     <c>Includes one or multiple lists of PCP server IP addresses; each
	     list is treated as a separate PCP server.</c>
	   </texttable>

	   <t></t>
	 </section>
       </section>

       <section anchor="Acknowledgements" title="Acknowledgements">
	 <t>Many thanks to C.&nbsp;Jacquenet, R.&nbsp;Maglione, D.&nbsp;Thaler, T.&nbsp;Mrugalski, T.&nbsp;Reddy, S.&nbsp;Cheshire, M.&nbsp;Wasserman, C.&nbsp;Holmberg, A.&nbsp;Farrel, S.&nbsp;Farrel,
	 B.&nbsp;Haberman, and P.&nbsp;Resnick for their review and comments.</t>

	 <t>Special thanks to T.&nbsp;Lemon and B.&nbsp;Volz for their reviews and their
	 efforts to enhance this specification.</t>
       </section>
     </middle>

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

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

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

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

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

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

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

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

       <references title="Informative References">

<!-- draft-ietf-dhc-topo-conf: I-D Exists -->

<reference anchor='DHC-CONFIG'>
<front>
<title>Customizing DHCP Configuration on the Basis of Network Topology</title>

<author initials='T' surname='Lemon' fullname='Ted Lemon'>
    <organization />
</author>

<author initials='T' surname='Mrugalski' fullname='Tomek Mrugalski'>
    <organization />
</author>

<date month='February' day='14' year='2014' />

</front>
<seriesInfo name='Work in' value='Progress' />
</reference>


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

<!-- draft-ietf-pcp-server-selection: I-D Exists -->

<reference anchor='PCP-SERVER'>
<front>
<title>PCP Server Selection</title>

<author initials='M' surname='Boucadair' fullname='Mohamed Boucadair'>
    <organization />
</author>

<author initials='R' surname='Penno' fullname='Reinaldo Penno'>
    <organization />
</author>

<author initials='D' surname='Wing' fullname='Dan Wing'>
    <organization />
</author>

<author initials='P' surname='Patil' fullname='Prashanth Patil'>
    <organization />
</author>

<author initials='T' surname='Reddy' fullname='Tirumaleswar Reddy'>
    <organization />
</author>

<date month='April' day='28' year='2014' />

</front>

<seriesInfo name='Work in' value='Progress' />

</reference>

<!-- draft-boucadair-pcp-deployment-cases: I-D Exists -->

<reference anchor='PCP-DEPLOYMENT'>
<front>
<title>Port Control Protocol (PCP) Deployment Models</title>

<author initials='M' surname='Boucadair' fullname='Mohamed Boucadair'>
    <organization />
</author>

<date month='April' day='16' year='2014' />

</front>

<seriesInfo name='Work in' value='Progress' />

</reference>


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