<?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-fa-netconf-dhcpv6-option-00"
     ipr="trust200902">
  <!-- ***** FRONT MATTER ***** -->

  <front>
    <title abbrev="NETCONF DHCPv6 Option">NETCONF DHCPv6 Option</title>

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

      <address>
        <postal>
          <street/>

          <city>Bonn</city>

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

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

    <author fullname="Mikael Abrahamsson" initials="M." surname="Abrahamsson">
      <organization>T-Systems</organization>

      <address>
        <postal>
          <street/>

          <city>Stockholm</city>

          <country>Sweden</country>
        </postal>

        <email>mikael.abrahamsson@t-systems.se</email>
      </address>
    </author>

    <date day="20" month="October" year="2013"/>

    <area>ops</area>

    <workgroup>Network Configuration WG</workgroup>

    <abstract>
      <t>This document defines DHCPv6 options for bootstrapping the NETCONF
      protocol on devices.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

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

  <middle>
    <section title="Introduction">
      <t>NETCONF <xref target="RFC6241"/> combined with the YANG <xref
      target="RFC6020"/> data modeling language provides an extensible
      mechanism for configuring and monitoring networked devices. One of the
      advantages that NETCONF/YANG offers over other network management
      protocols is that it is flexible enough to be adapted for use with
      almost any service on any device.</t>

      <t>The Dynamic Host Configuration Protocol for IPv6 <xref
      target="RFC3315"/> is widely in use for the configuration of network
      devices. This document describes a DHCPv6 option which can be used for
      provisioning the necessary parameters to bootstrap NETCONF connectivity
      so that a device can then obtain further configuration. An example
      device suitable for this type of configuration process would be a 
      managed home gateway router.</t>

      <t>This document uses the terms "client" and "server" to describe the
      hosts at either end of a NETCONF connection. "Client" should be
      understood to be the host that is actively initiating the NETCONF
      connection to the "Server". These definitions are used to align with the
      terminology in the DHCPv6 message flow.</t>
    </section>

    <section title="NETCONF DHCPv6 Container Option">
      <t>The following section describes the format of the NETCONF
      configuration container option. A container approach has been taken so
      that different NETCONF transport protocols can be supported. Currently 
      only two transport protocols have been defined, NETCONF over SSH 
      <xref target="RFC6242"/> and NETCONF over TLS <xref target="RFC5539"/>.
      If necessary in the future, the option could be extended to support
      additional transport protocols through the definition of new sub-options.
      </t>

      <figure align="center" anchor="netconf-dhcpv6-format"
              title="NETCONF DHCPv6 Option Format">
        <artwork><![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_NETCONF_CONT        |           option-len          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          sub-options                          |
|                          (variable)                           |
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>

      <t><list hangIndent="12" style="hanging">
          <t hangText="option-code">OPTION_NETCONF_CONT (TBA1)</t>
          
          <t hangText="option-len">Variable</t>

          <t hangText="sub-options">Contains one or more NETCONF configuration
          sub-options (described below).</t>
        </list></t>
    
    <section title="NETCONF over SSH Sub-Option">
    <t>Clients which implement NETCONF transport over Secure Shell (SSH) use
    the following sub-option to obtain configuration necessary to establish 
    a connection.</t>
    <t>The procedure for establishing NETCONF connectivity over SSH, is
    described in <xref target="RFC6242"/>.</t>

      <figure align="center" anchor="netconf-ssh-conf-format"
              title="NETCONF over SSH Sub-Option Format">
        <artwork><![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_NETCONF_SSH        |          option-len           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    priority   |             dest-port           |             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+             |
|                         server fqdn(s)                        |
|                       (variable length)                       |
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>

      <t><list hangIndent="20" style="hanging">
          <t hangText="option-code">OPTION_NETCONF_SSH (TBA2)</t>
          
          <t hangText="option-len">Variable</t>

          <t hangText="priority">8-bit integer. Described in Section 3.1</t>

          <t hangText="dest-port">16-bit integer to be used by the client as
          the destination layer 4 port to initiate the SSH connection to.</t>

          <t hangText="server-fqdn">List of FQDNs to use for the NETCONF
          server, formatted according to Section 8 of <xref
          target="RFC3315"/>.</t>
        </list></t>
        
        <t>In case the client receives more than one server address in the 
        server-fqdn field, the client SHOULD initiate connections to the 
        addresses in the order they are listed in the server-fqdn field, 
        attempting to  establish a connection to each server until one is 
        successfully established.</t>
        </section>

    <section title="NETCONF over TLS Sub-Option">
    <t>Clients which implement NETCONF transport over Transport Layer Security
    (TLS) use the following sub-option to obtain configuration necessary to 
    establish a connection.</t>
    <t>The procedure for establishing NETCONF connectivity over TLS, is 
    described in <xref target="RFC5539"/>.</t>

      <figure align="center" anchor="netconf-tls-conf-format"
              title="NETCONF over TLS Sub-Option Format">
        <artwork><![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_NETCONF_TLS          |          option-len           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    priority   |             dest-port           |             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+             |
|                        server-fqdn(s)                         |
|                       (variable length)                       |
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>

      <t><list hangIndent="12" style="hanging">
          <t hangText="option-code">OPTION_NETCONF_TLS (TBA3)</t>
          
          <t hangText="option-len">Variable</t>

          <t hangText="priority">8-bit integer. Described in Section 3.1<iref
          item="4.1"/></t>

          <t hangText="dest-port">16-bit integer to be used by the client as
          the destination layer 4 port for initiating the TLS connection</t>

          <t hangText="server-fqdn">List of FQDNs to use for the NETCONF
          server, formatted according to Section 8 of <xref
          target="RFC3315"/>.</t>
        </list></t>
        
        <t>In case the client receives more than one server FQDN in the 
        server-fqdn field, the client SHOULD initiate connections to the 
        addresses in the order they are listed in the server-fqdn field, 
        attempting to  establish a connection to each server until one is 
        successfully established.</t>
        </section>
        
    </section>

    <section title="DHCPv6 Client Behavior">
      <t>When a device which implements both NETCONF functionality and the
      DHCP option described in this document creates a DHCPv6 SOLICIT message,
      it SHOULD include OPTION_NETCONF_CONT (TBD) within the ORO field. </t>

      <t>On receipt of an DHCP ADVERTISE response message including the
      OPTION_NETCONF_CONT option, the client evaluates the sub-options which
      it contains as follows:</t>

      <t><list style="symbols">
          <t>If OPTION_NETCONF_CONT does not contain a transport sub-option
          implemented by the client, then it MUST be discarded by the client.</t>

          <t>If OPTION_NETCONF_CONT contains a single NETCONF transport
          protocol sub-option implemented by the client, then the client 
          SHOULD attempt establish a NETCONF session using the configured
          transport protocol.</t>

          <t>If OPTION_NETCONF_CONT contains multiple NETCONF transport
          protocol sub-options supported by the client, then the client SHOULD
          follow the procedure described below to establish a connection to
          the NETCONF server.</t>
        </list></t>

      <section anchor="priorities" title="Priorities">
        <t>As NETCONF is not limited to on specific transport protocol, the 
        NETCONF client and/or server may have been deployed with support for
        more than one NETCONF transport protocol.</t>

        <t>The 'priority' field contained within the transport protocol specific
        sub-options give the service provider a method of indicating to the
        client the order in which to attempt using the different supported 
        protocols to establish NETCONF connectivity.</t>
        
        <t>A client which supports two (or more) NETCONF transport
        protocols, and receives configuration parameters for at least two
        protocols SHOULD inspect the values of the priority field. The 
        sub-option with the highest priority value SHOULD be used as the first
        NETCONF protocol to attempt for establishing connectivity.</t>
        
        <t>In the event that this connection attempt is not successful, then
        the client SHOULD attempt to establish connectivity using the NETCONF
        transport protocol sub-option with the second highest priority, then
        the third highest priority, and so on until either a successful 
        connection has been established, or there are no more </t>
        
        <t>In the event that the client receives two options with the same
        priority, the client SHOULD implement a mechanism for prioritising one
        mechanism over the other. This mechanism is implementation
        specific.</t>
      </section>
    </section>

    <section title="DHCPv6 Server Behavior">
      <t>When a DHCPv6 server receives a client SOLICIT message containing the
      OPTION_NETCONF_CONT option code within the ORO field, it SHOULD respond
      with an ADVERTISE message containing the sub-options</t>

      <t>If the operator has deployed their NETCONF infrastructure with support
      for more than one NETCONF transport protocol and has a preference for
      clients to use one transport protocol over another, then the
      'priorities' field SHOULD be used within the NETCONF transport
      protocol sub-options to indicate to the client the order to attempt
      using the protocols for connectivity as described in Section 3.1.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>The NETCONF protocol relies on the underlying transport protocol to
      provide security. Security considerations described in <xref
      target="RFC5539"/> and <xref target="RFC6242"/> are also applicable to
      this document.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>IANA is kindly asked to allocate DHCPv6 option codes for 
      OPTION_NETCONF_CONT, OPTION_NETCONF_SSH and OPTION_NETCONF_TLS.</t>
    </section>
  
  <!-- Note - we need to work out whether only the container or all three
  of the options are global. -->

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>Many thanks to everyone.</t>
    </section>
  </middle>

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

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

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

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

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

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

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