<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-troan-6man-universal-ra-option-06" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="false" consensus="true">

<front>
<title>The Universal IPv6 Configuration Option</title><seriesInfo value="draft-troan-6man-universal-ra-option-06" stream="IETF" status="standard" name="Internet-Draft"></seriesInfo>
<author initials="T." surname="Winters" fullname="T. Winters"><organization>QA Cafe</organization><address><postal><street></street>
</postal><email>tim@qacafe.com</email>
</address></author><author initials="O." surname="Troan" fullname="O. Troan"><organization>cisco</organization><address><postal><street></street>
</postal><email>ot@cisco.com</email>
</address></author><date/>
<area>Internet</area>
<workgroup>Network Working Group</workgroup>

<abstract>
<t>One of the original intentions for the IPv6 host configuration, was to configure
the network-layer parameters only with IPv6 ND, and use service discovery for
other configuration information. Unfortunately that hasn't panned out quite as
planned, and we are in a situation where all kinds of configuration options are
added to RAs. This document proposes a new universal option for RA
in a self-describing data format, with the list of elements maintained in
an IANA registry, with greatly relaxed rules for registration.</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>This document proposes a new universal option for the Router Advertisement IPv6
ND message <xref target="RFC4861"></xref>. Its purpose is to use the RA
messages as opaque carriers for configuration information between an agent
on a router and a host.</t>
<t>DHCP is suited to give per-client configuration information, while the RA
mechanism advertises configuration information to all hosts on the link. There
is a long running history of &quot;conflict&quot; between the two. The arguments go; there
is less fate-sharing in DHCP, DHCP doesn't deal with multiple sources of
information, or make it more difficult to change information independent of the
lifetimes, RA cannot be used to configure different information to different
clients and so on. And of course some options are only available in RAs and some
options are only available in DHCP.</t>
<t>While this proposal does not resolve the DHCP vs RA debate, it proposes a
solution to the problem of a very slow process of standardizing new Router Advertisement options,
and the IETF spending an inordinate amount of time arguing over new configuration
options in Router Advertisements.  It is possible in the future to use
the new universal option in DHCP, since this would lead to additional conflict resolution
an additional document will need to be considered for that.</t>
</section>

<section anchor="conventions"><name>Conventions</name>
<t>The key words &quot;<bcp14>MUST</bcp14>&quot;, &quot;<bcp14>MUST NOT</bcp14>&quot;, &quot;<bcp14>REQUIRED</bcp14>&quot;, &quot;<bcp14>SHALL</bcp14>&quot;, &quot;<strong>SHALL
NOT</strong>&quot;, &quot;<bcp14>SHOULD</bcp14>&quot;, &quot;<bcp14>SHOULD NOT</bcp14>&quot;, &quot;<bcp14>RECOMMENDED</bcp14>&quot;, &quot;<bcp14>MAY</bcp14>&quot;, and
&quot;<bcp14>OPTIONAL</bcp14>&quot; in this document are to be interpreted as described in RFC 2119
<xref target="RFC2119"></xref>.</t>
<t>Additionally, the key words &quot;<strong>MIGHT</strong>&quot;, &quot;<strong>COULD</strong>&quot;, &quot;<strong>MAY WISH TO</strong>&quot;, &quot;<strong>WOULD
PROBABLY</strong>&quot;, &quot;<strong>SHOULD CONSIDER</strong>&quot;, and &quot;<strong>MUST (BUT WE KNOW YOU WON'T)</strong>&quot; in
this document are to interpreted as described in RFC 6919 <xref target="RFC6919"></xref>.</t>
</section>

<section anchor="introduction-1"><name>Introduction</name>
<t>This document specifies a new &quot;self-describing&quot; universal configuration option.
Currently new configuration option requires &quot;standards action&quot;. The proposal is
that no future IETF document will be required. The configuration option is described
directly in the universal configuration IANA registry.</t>
</section>

<section anchor="the-universal-ipv6-configuration-option"><name>The Universal IPv6 Configuration option</name>
<t>The option data is described using the schema language CDDL <xref target="RFC8610"></xref>, encoded
in CBOR <xref target="RFC7049"></xref>.</t>
<figure><name>IPv6 Configuration Option Format
</name>
<sourcecode type="ascii-art">     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
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     Type      |    Length     |   Data ...
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</sourcecode>
</figure>
<t>Fields:</t>

<dl>
<dt>Type:</dt>
<dd><t>42 for Universal IPv6 Configuration Option</t>
</dd>
<dt>Length:</dt>
<dd><t>The length of the option (including the type and length fields) in units of 8 octets.</t>
</dd>
<dt>Data:</dt>
<dd><t>CBOR encoded data.</t>
</dd>
</dl>
<t>The Option is zero-padded to nearest 8-octet boundary.</t>
<t>Example of an JSON instance of the option:</t>

<sourcecode type="json">{
    &quot;ietf&quot;: {
        &quot;dns&quot;: {
            &quot;dnssl&quot;: [
                &quot;example.com&quot;
            ],
            &quot;rdnss&quot;: [
                &quot;2001:db8::1&quot;,
                &quot;2001:db8::2&quot;
            ]
        },
        &quot;nat64&quot;: {
            &quot;prefix&quot;: &quot;64:ff9b::/96&quot;
        },
        &quot;rio&quot;: [
            {
                &quot;prefix&quot;: &quot;::/0&quot;,
                &quot;next-hop&quot;: &quot;fe80::1&quot;
            },
            {
                &quot;prefix&quot;: &quot;2001:db8::/32&quot;,
                &quot;next-hop&quot;: &quot;fe80::2&quot;
            }
        ]
    }
}
</sourcecode>
<t>The universal IPv6 Configuration option MUST be small enough to fit within a
single IPv6 ND packet. It then follows that a single element in the
dictionary cannot be larger than what fits within a single option. Different
elements can be split across multiple universal configuration options (in
separate packets). All IANA registered elements are under the &quot;ietf&quot; key in the
dictionary. Private configuration information can be included in the option
using different keys.</t>
<t>If information learnt via this option conflicts with other configuration
information learnt via Router Advertisement messages, that is
considered a configuration error. How those conflicts should be resolved is left
up to the implementation.</t>
</section>

<section anchor="cbor-encoding"><name>CBOR encoding</name>
<t>It is recommended that the user can configure the option using JSON. Likewise an
application registering interest in an option SHOULD be able to use string keys.
The CBOR encoding to save space, uses integers for map keys. The mapping table
between integer and string map keys are part of the IANA registry for the
option.</t>
<t>Values -23-23 encodes to a single byte in CBOR, and these values are reserved
for IETF used map keys.</t>
</section>

<section anchor="implementation-guidance"><name>Implementation Guidance</name>
<t>The purpose of this option is to allow users to use the RA as an opaque
carrier for configuration information without requiring code changes in the
option carrying infrastructure.</t>
<t>On the router there should be an API allowing a user to add
an element, e.g. a JSON object <xref target="RFC8259"></xref> or a pre-encoded CBOR string to RAs
sent on a given interface.</t>
<t>On the host side, an API SHOULD be available allowing applications to subscribe
to received configuration elements. It SHOULD be possible to subscribe to
configuration object by dictionary key.</t>
<t>The contents of any elements that are not recognized, either in whole or in
part, by the receiving host MUST be ignored and the remainder of option's
contents MUST be processed as normal.</t>
<t>An implementation SHOULD provide a &quot;JSON interface&quot; for configuring the option.</t>
</section>

<section anchor="implementation-status"><name>Implementation Status</name>
<t>The Universal IPv6 configuration option sending side is implemented in VPP
(<eref target="https://wiki.fd.io/view/VPP">https://wiki.fd.io/view/VPP</eref>).</t>
<t>The implementation is a prototype released under Apache license and available
at:
<eref target="https://github.com/vpp-dev/vpp/commit/156db316565e77de30890f6e9b2630bd97b0d61d">https://github.com/vpp-dev/vpp/commit/156db316565e77de30890f6e9b2630bd97b0d61d</eref>.</t>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>
<t>Unless there is a security relationship between the host and the router (e.g.
SEND), and even then, the consumer of configuration information can put no trust
in the information received.</t>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>
<t>IANA is requested to add a new registry for the Universal IPv6 Configuration
option. The registry should be named &quot;IPv6 Universal Configuration Information
Option&quot;.</t>
<t>The schema field follows the CDDL schema definition in <xref target="RFC8610"></xref>.</t>
<t>Changes and additions to the registry follow the policies below <xref target="RFC8126"></xref>:</t>
<table>
<thead>
<tr>
<th>Range</th>
<th>Registration Procedure</th>
</tr>
</thead>

<tbody>
<tr>
<td>-23-23</td>
<td>Standards Action</td>
</tr>

<tr>
<td>24-32767</td>
<td>Specification Required</td>
</tr>

<tr>
<td>32768-18446744073709551615</td>
<td>Expert Review</td>
</tr>
</tbody>
</table><t>A new registration requires a new CBOR key to parameter name assignment and a
CDDL definition.</t>

<section anchor="universal-configuration-option"><name>Universal configuration option</name>
<t>The IANA is requested to add the universal option to the
&quot;IPv6 Neighbor Discovery Option Formats&quot; registry with the value
of 42.</t>
</section>

<section anchor="initial-objects-in-the-registry"><name>Initial objects in the registry</name>
<t>The PVD <xref target="RFC8801"></xref> elements and DNS <xref target="RFC8106"></xref>) are included to provide an
alternative representation for the proposed new options in that draft.</t>
</section>

<section anchor="initial-objects-in-the-registry-1"><name>Initial objects in the registry</name>

<section anchor="cddl-json-mapping-parameters-to-cbor"><name>CDDL/JSON Mapping Parameters to CBOR</name>
<table>
<thead>
<tr>
<th>Parameter Name / JSON key</th>
<th>CBOR Key</th>
</tr>
</thead>

<tbody>
<tr>
<td>ietf</td>
<td>-23</td>
</tr>

<tr>
<td>pio</td>
<td>-22</td>
</tr>

<tr>
<td>mtu</td>
<td>-21</td>
</tr>

<tr>
<td>rio</td>
<td>-20</td>
</tr>

<tr>
<td>dns</td>
<td>-19</td>
</tr>

<tr>
<td>nat64</td>
<td>-18</td>
</tr>

<tr>
<td>ipv6-only</td>
<td>-17</td>
</tr>

<tr>
<td>pvd</td>
<td>-16</td>
</tr>

<tr>
<td>prefix</td>
<td>-15</td>
</tr>

<tr>
<td>preferred-lifetime</td>
<td>-14</td>
</tr>

<tr>
<td>valid-lifetime</td>
<td>-13</td>
</tr>

<tr>
<td>lifetime</td>
<td>-12</td>
</tr>

<tr>
<td>a-flag</td>
<td>-11</td>
</tr>

<tr>
<td>l-flag</td>
<td>-10</td>
</tr>

<tr>
<td>preference</td>
<td>-9</td>
</tr>

<tr>
<td>nexthop</td>
<td>-8</td>
</tr>

<tr>
<td>nssl</td>
<td>-7</td>
</tr>

<tr>
<td>dnss</td>
<td>-6</td>
</tr>

<tr>
<td>fqdn</td>
<td>-5</td>
</tr>

<tr>
<td>uri</td>
<td>-4</td>
</tr>
</tbody>
</table></section>

<section anchor="key-registry"><name>Key Registry</name>

<sourcecode type="cddl">+------------------------------------------------+-----------+
|CDDL                                            | Reference |
+------------------------------------------------+-----------+
|ietf = {                                        |           |
|  ? pio : [+ pio]                               |           |
|  ? rio : [+ rio]                               |           |
|  ? dns : dns                                   |           |
|  ? nat64: nat64                                |           |
|  ? ipv6-only: bool                             |           |
|  ? pvd : pvd                                   |           |
|}                                               |           |
|                                                |           |
|                                                |           |
|dns = {                                         | RFC8106   |
|  nssl : [* tstr]                               |           |
|  dnss : [+ ipv6-address]                       |           |
|  lifetime : uint .size 4                       |           |
|}                                               |           |
|                                                |           |
|nat64 = {                                       | RFC7050   |
|  prefix : ipv6-prefix                          |           |
|}                                               |           |
|ipv6-only : bool                                | [v6only]  |
|                                                |           |
|pvd = {                                         |           |
|  fqdn : tstr                                   |           |
|  uri : tstr                                    |           |
|  ? dns : dns                                   |           |
|  ? nat64: nat64                                |           |
|  ? pio : [+ pio]                               |           |
|  ? rio : [+ rio]                               |           |
|}                                               |           |
+------------------------------------------------+-----------+
</sourcecode>
</section>
</section>
</section>

</middle>

<back>
<references><name>Normative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4861.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6919.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7049.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8610.xml"/>
</references>
<references><name>Informative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8106.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8801.xml"/>
</references>

<section anchor="acknowledgements"><name>Acknowledgements</name>
<t>Many thanks to Dave Thaler for feedback and suggestions of a more effective CBOR encoding.
Thank you very much to Carsten Bormann for CBOR and CDDL help.</t>
</section>

</back>

</rfc>
