rfc8801xml2.original.xml | rfc8801.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | ||||
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | ||||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" | ||||
docName="draft-ietf-intarea-provisioning-domains-11" number="8801" | ||||
submissionType="IETF" category="std" consensus="true" obsoletes="" | ||||
updates="" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" | ||||
version="3"> | ||||
<front> | ||||
<title abbrev="Provisioning Domains">Discovering Provisioning Domain Names | ||||
and Data</title> | ||||
<seriesInfo name="RFC" value="8801"/> | ||||
<author initials="P." surname="Pfister" fullname="Pierre Pfister"> | ||||
<organization>Cisco</organization> | ||||
<address> | ||||
<postal> | ||||
<street>11 Rue Camille Desmoulins</street> | ||||
<city>Issy-les-Moulineaux</city><code>92130</code> | ||||
<country>France</country> | ||||
</postal> | ||||
<email>ppfister@cisco.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="É." surname="Vyncke" fullname="Éric Vyncke"> | ||||
<organization>Cisco</organization> | ||||
<address> | ||||
<postal> | ||||
<street>De Kleetlaan, 6</street> | ||||
<city>Diegem</city><code>1831</code> | ||||
<country>Belgium</country> | ||||
</postal> | ||||
<email>evyncke@cisco.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="T." surname="Pauly" fullname="Tommy Pauly"> | ||||
<organization>Apple Inc.</organization> | ||||
<address> | ||||
<postal> | ||||
<street>One Apple Park Way</street> | ||||
<city>Cupertino</city><region>California</region><code>95014</code> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>tpauly@apple.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="D." surname="Schinazi" fullname="David Schinazi"> | ||||
<organization>Google LLC</organization> | ||||
<address> | ||||
<postal> | ||||
<street>1600 Amphitheatre Parkway</street> | ||||
<city>Mountain | ||||
View</city><region>California</region><code>94043</code> | ||||
<country>United States of America</country> | ||||
</postal> | ||||
<email>dschinazi.ietf@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author initials="W." surname="Shao" fullname="Wenqin Shao"> | ||||
<organization>Cisco</organization> | ||||
<address> | ||||
<postal> | ||||
<street>11 Rue Camille Desmoulins</street> | ||||
<city>Issy-les-Moulineaux</city><code>92130</code> | ||||
<country>France</country> | ||||
</postal> | ||||
<email>wenshao@cisco.com</email> | ||||
</address> | ||||
</author> | ||||
<date year="2020" month="July"/> | ||||
<keyword>IPv6</keyword> | ||||
<keyword>Provisioning</keyword> | ||||
<keyword>DHCP</keyword> | ||||
<keyword>PvD</keyword> | ||||
<abstract> | ||||
<t>Provisioning Domains (PvDs) are defined as consistent | ||||
sets of network configuration information. PvDs allows hosts to manage | ||||
connections to multiple networks and interfaces simultaneously, such as | ||||
when a home router provides connectivity through both a broadband and | ||||
cellular network provider.</t> | ||||
<t>This document defines a mechanism for explicitly identifying PvDs | ||||
through | ||||
a Router Advertisement (RA) option. This RA option announces a PvD identifier, | ||||
which hosts can compare to differentiate between PvDs. The option can directly | ||||
carry some information about a PvD and can optionally point to | ||||
PvD Additional Information that can be retrieved using HTTP over TLS.</t> | ||||
</abstract> | ||||
</front> | ||||
<middle> | ||||
<section anchor="introduction" numbered="true" toc="default"> | ||||
<name>Introduction</name> | ||||
<t>Provisioning Domains (PvDs) are defined in <xref target="RFC7556" | ||||
format="default"/> as consistent | ||||
sets of network configuration information. This information includes | ||||
properties that are traditionally associated with a single networking | ||||
interface, such as source addresses, DNS configuration, proxy configuration, | ||||
and gateway addresses.</t> | ||||
<t>Clients that are aware of PvDs can take advantage of multiple network | ||||
interfaces simultaneously. This enables using two PvDs in parallel for | ||||
separate connections or for multi-path transports.</t> | ||||
<t>While most PvDs today are discovered implicitly (such as by receiving | ||||
information via Router Advertisements from a router on a network | ||||
that a client host directly connects to), <xref target="RFC7556" | ||||
format="default"/> also defines the notion | ||||
of Explicit PvDs. IPsec Virtual Private Networks are considered Explicit PvDs, | ||||
but Explicit PvDs can also be discovered via the local network router. | ||||
Discovering Explicit PvDs allows two key advancements in managing multiple | ||||
PvDs:</t> | ||||
<ol spacing="normal" type="1"> | ||||
<li>The ability to discover and use multiple PvDs on a single | ||||
interface, | ||||
such as when a local router can provide connectivity to two different | ||||
Internet Service Providers.</li> | ||||
<li>The ability to associate Additional Information about PvDs to | ||||
describe | ||||
the properties of the network.</li> | ||||
</ol> | ||||
<t>While <xref target="RFC7556" format="default"/> defines the concept | ||||
of Explicit PvDs, it does not define | ||||
the mechanism for discovering multiple Explicit PvDs on a single network | ||||
and their Additional Information.</t> | ||||
<t>This document specifies a way to identify PvDs with Fully Qualified | ||||
Domain Names (FQDNs), called PvD IDs. Those identifiers are advertised in | ||||
a new Router Advertisement (RA) <xref target="RFC4861" format="default"/> | ||||
option called | ||||
the PvD Option, which, when present, associates | ||||
the PvD ID with all the information present in the Router Advertisement | ||||
as well as any configuration object, such as addresses, derived from | ||||
it. The PvD Option may also contain a set of | ||||
other RA options, along with an optional inner Router Advertisement | ||||
message header. These options and optional inner header are only visible | ||||
to 'PvD-aware' hosts, allowing such hosts to have a specialized view of the | ||||
network configuration.</t> | ||||
<t>Since PvD IDs are used to identify different ways to access the | ||||
Internet, multiple PvDs (with different PvD IDs) can be provisioned on | ||||
a single host interface. Similarly, the same PvD ID could be used on | ||||
different interfaces of a host in order to inform that those PvDs | ||||
ultimately provide equivalent services.</t> | ||||
<t>This document also introduces a mechanism for hosts to retrieve | ||||
optional Additional Information related to a specific PvD by means of an | ||||
HTTP-over-TLS query using a URI derived from the PvD ID. The retrieved | ||||
JSON object contains Additional Information that would typically be | ||||
considered too large to be directly included in the Router | ||||
Advertisement but might be considered useful to the applications, or | ||||
even sometimes users, when choosing which PvD should be used.</t> | ||||
<t>For example, if Alice has both a cellular network provider and a | ||||
broadband provider in her home, her PvD-aware devices and applications | ||||
would be aware of both available uplinks. These applications | ||||
could fail-over between these networks or run connections over both | ||||
(potentially using multi-path transports). Applications could also select | ||||
specific uplinks based on the properties of the network; for example, | ||||
if the cellular network provides free high-quality video streaming, | ||||
a video-streaming application could select that network while most of the | ||||
other traffic on Alice's device uses the broadband provider.</t> | ||||
<section anchor="specification-of-requirements" numbered="true" | ||||
toc="default"> | ||||
<name>Specification of Requirements</name> | ||||
<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 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="terminology" numbered="true" toc="default"> | ||||
<name>Terminology</name> | ||||
<t>This document uses the following terminology:</t> | ||||
<dl newline="false" spacing="normal"> | ||||
<dt>Provisioning Domain (PvD):</dt> | ||||
<dd> | ||||
A set of network configuration information; for more information, see <xref | ||||
target="RFC7556" format="default"/>.</dd> | ||||
<dt>PvD ID:</dt> | ||||
<dd> | ||||
A Fully Qualified Domain Name (FQDN) used to identify a PvD.</dd> | ||||
<dt>Explicit PvD:</dt> | ||||
<dd> | ||||
A PvD uniquely identified with a PvD ID. For more information, see <xref | ||||
target="RFC7556" format="default"/>.</dd> | ||||
<dt>Implicit PvD:</dt> | ||||
<dd> | ||||
A PvD that, in the absence of a PvD ID, | ||||
is identified by the host interface to which it is attached and the | ||||
address of the advertising router. See also <xref target="RFC7556" | ||||
format="default"/>.</dd> | ||||
<dt>PvD-aware host:</dt> | ||||
<dd> | ||||
A host that supports the association of | ||||
network configuration information into PvDs and the use of these | ||||
PvDs as described in this document. Also named "PvD-aware node" in <xref | ||||
target="RFC7556" format="default"/>.</dd> | ||||
</dl> | ||||
</section> | ||||
<section anchor="ra" numbered="true" toc="default"> | ||||
<name>Provisioning Domain Identification Using Router | ||||
Advertisements</name> | ||||
<t>Explicit PvDs are identified by a PvD ID. The PvD ID is a Fully | ||||
Qualified Domain Name (FQDN) that identifies the network operator. | ||||
Network operators <bcp14>MUST</bcp14> use names that they own or manage to | ||||
avoid naming conflicts. The same PvD ID <bcp14>MAY</bcp14> be used in | ||||
several access networks when they ultimately provide identical services | ||||
(e.g., in all home networks subscribed to the same service); else, the | ||||
PvD ID <bcp14>MUST</bcp14> be different to follow <xref | ||||
target="RFC7556" sectionFormat="of" section="2.4"/>.</t> | ||||
<section anchor="pvd-id-option-for-router-advertisements" | ||||
numbered="true" toc="default"> | ||||
<name>PvD Option for Router Advertisements</name> | ||||
<t>This document introduces a Router Advertisement (RA) option called | ||||
the PvD Option. It is used to convey the FQDN identifying a given PvD (see | ||||
<xref target="format" format="default"/>), bind the PvD ID with configuration | ||||
information received over DHCPv4 (see <xref target="dhcpv4" | ||||
format="default"/>), enable | ||||
the use of HTTP over TLS to retrieve the PvD Additional Information | ||||
JSON object (see <xref target="data" format="default"/>), as well as contain | ||||
any other | ||||
RA options that would otherwise be valid in the RA.</t> | ||||
<figure anchor="format"> | ||||
<name>PvD Option Format</name> | ||||
<artwork name="" type="" align="left" alt=""><![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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Type | Length |H|L|R| Reserved | Delay | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Sequence Number | ... | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ... | ||||
... PvD ID FQDN ... | ||||
... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
... | Padding | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| ... | ||||
... Router Advertisement message header ... | ||||
... (Only present when R-flag is set) ... | ||||
... | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Options ... | ||||
+-+-+-+-+-+-+-+-+-+-+-+- | ||||
]]></artwork> | ||||
</figure> | ||||
<dl newline="false" spacing="normal"> | ||||
<dt>Type:</dt> | ||||
<dd> | ||||
(8 bits) Set to 21.</dd> | ||||
<dt>Length:</dt> | ||||
<dd> | ||||
(8 bits) The length of the option in | ||||
units of 8 octets, including the Type and Length fields, the | ||||
Router Advertisement message header, if any, as well as the RA | ||||
options that are included within the PvD Option.</dd> | ||||
<dt>H-flag:</dt> | ||||
<dd> | ||||
(1 bit) 'HTTP' flag stating whether some PvD Additional Information is made | ||||
available through HTTP over TLS, as described in <xref target="data" | ||||
format="default"/>.</dd> | ||||
<dt>L-flag:</dt> | ||||
<dd> | ||||
(1 bit) 'Legacy' flag stating whether the PvD is associated with | ||||
IPv4 information assigned using DHCPv4 (see <xref target="dhcpv4" | ||||
format="default"/>).</dd> | ||||
<dt>R-flag:</dt> | ||||
<dd> | ||||
(1 bit) 'Router Advertisement' flag stating whether the PvD Option header is | ||||
followed (right after padding to the next 64-bit boundary) by a Router | ||||
Advertisement message header (see <xref target="RFC4861" | ||||
sectionFormat="of" section="4.2"/>). The usage of the inner message header | ||||
is described in | ||||
<xref target="host" format="default"/>.</dd> | ||||
<dt>Reserved:</dt> | ||||
<dd> | ||||
(9 bits) Reserved for later use. It | ||||
<bcp14>MUST</bcp14> be set to zero by the sender and ignored by the | ||||
receiver.</dd> | ||||
<dt>Delay:</dt> | ||||
<dd> | ||||
(4 bits) Unsigned integer used to delay HTTP GET queries from hosts by a | ||||
randomized backoff (see <xref target="retr" format="default"/>). If the | ||||
H-flag is not set, senders <bcp14>SHOULD</bcp14> set the delay to zero, and | ||||
receivers <bcp14>SHOULD</bcp14> ignore the value.</dd> | ||||
<dt>Sequence Number:</dt> | ||||
<dd> | ||||
(16 bits) Sequence number for the PvD Additional Information, as described | ||||
in | ||||
<xref target="data" format="default"/>. If the H-flag is not set, senders | ||||
<bcp14>SHOULD</bcp14> set the Sequence Number to zero, and receivers | ||||
<bcp14>SHOULD</bcp14> ignore the value.</dd> | ||||
<dt>PvD ID FQDN:</dt> | ||||
<dd> | ||||
The FQDN used as PvD ID encoded in DNS format, as described in <xref | ||||
target="RFC1035" sectionFormat="of" section="3.1"/>. Domain name compression | ||||
as described in <xref target="RFC1035" sectionFormat="of" section="4.1.4"/> | ||||
<bcp14>MUST NOT</bcp14> be used.</dd> | ||||
<dt>Padding:</dt> | ||||
<dd> | ||||
Zero or more padding octets to the next 8-octet boundary (see <xref | ||||
target="RFC4861" sectionFormat="of" section="4.6"/>). It <bcp14>MUST</bcp14> | ||||
be set to zero by the sender and ignored by the receiver.</dd> | ||||
<dt>RA message header:</dt> | ||||
<dd> | ||||
(16 octets) When the R-flag is set, a full Router Advertisement message | ||||
header as specified in <xref target="RFC4861" format="default"/>. The sender | ||||
<bcp14>MUST</bcp14> set the Type field to 134 (the value for "Router | ||||
Advertisement") and set the Code field to 0. Receivers <bcp14>MUST</bcp14> | ||||
ignore both of these fields. The Checksum field <bcp14>MUST</bcp14> be set | ||||
to 0 | ||||
by the sender; non-zero checksums <bcp14>MUST</bcp14> be ignored by the | ||||
receiver without causing the processing of the message to fail. All other | ||||
fields are to be set and parsed as specified in <xref target="RFC4861" | ||||
format="default"/> or any updating documents.</dd> | ||||
<dt>Options:</dt> | ||||
<dd> | ||||
Zero or more RA options that would otherwise be valid as part of the Router | ||||
Advertisement main body but are instead included in the PvD Option so as to | ||||
be ignored by hosts that are not PvD aware.</dd> | ||||
</dl> | ||||
<t><xref target="pvd_example" format="default"/> shows an example of a | ||||
PvD Option with "example.org" as the PvD ID FQDN and includes both a | ||||
Recursive DNS Server (RDNSS) option and a Prefix Information | ||||
Option. It has a Sequence Number of 123 and indicates the presence of | ||||
PvD Additional Information that is expected to be fetched with a delay | ||||
factor of 1.</t> | ||||
<figure anchor="pvd_example"> | ||||
<name>Example PvD Option</name> | ||||
<artwork name="" type="" align="left" alt=""><![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 | ||||
+---------------+-----------------------------------------------+ | ||||
| Type: 21 | Length: 12 |1|0|0| Reserved |Delay:1| | ||||
+---------------+-------------------------------+---------------+ | ||||
| Seq number: 123 | 7 | e | | ||||
+---------------+-----------------------------------------------+ | ||||
| x | a | m | p | | ||||
+---------------------------------------------------------------+ | ||||
| l | e | 3 | o | | ||||
+---------------------------------------------------------------+ | ||||
| r | g | 0 | 0 (padding) | | ||||
+---------------------------------------------------------------+ | ||||
| 0 (padding) | 0 (padding) | 0 (padding) | 0 (padding) | | ||||
+---------------+---------------+---------------+---------------+ | ||||
| RDNSS option (RFC 8106) length: 5 ... | ||||
... ... | ||||
... | | ||||
+---------------------------------------------------------------+ | ||||
| Prefix Information Option (RFC 4861) length: 4 ... | ||||
... | | ||||
... | | ||||
+---------------------------------------------------------------+ | ||||
]]></artwork> | ||||
</figure> | ||||
</section> | ||||
<section anchor="router" numbered="true" toc="default"> | ||||
<name>Router Behavior</name> | ||||
<t>A router <bcp14>MAY</bcp14> send RAs containing one PvD Option but | ||||
<bcp14>MUST NOT</bcp14> include more than one PvD Option in each | ||||
RA. The PvD Option <bcp14>MUST NOT</bcp14> contain further PvD | ||||
Options.</t> | ||||
<t>The PvD Option <bcp14>MAY</bcp14> contain zero, one, or more RA | ||||
options that would otherwise be valid as part of the same RA. Such | ||||
options are processed by PvD-aware hosts and ignored by other hosts as | ||||
per <xref sectionFormat="of" section="4.2" | ||||
target="RFC4861"/>.</t> | ||||
<t>In order to provide multiple different PvDs, a router | ||||
<bcp14>MUST</bcp14> send multiple RAs. RAs sent from different | ||||
link-local source addresses establish distinct Implicit PvDs in the | ||||
absence of a PvD Option. Explicit PvDs <bcp14>MAY</bcp14> share | ||||
link-local source addresses with an Implicit PvD and any number of | ||||
other Explicit PvDs.</t> | ||||
<t>In other words, different Explicit PvDs <bcp14>MAY</bcp14> be | ||||
advertised with RAs using the same link-local source address, but | ||||
different Implicit PvDs, advertised by different RAs, | ||||
<bcp14>MUST</bcp14> use different link-local addresses because these | ||||
Implicit PvDs are identified by the source addresses of the RAs. If a | ||||
link-local address on the router is changed, then any new RA will be | ||||
interpreted as a different Implicit PvD by PvD-aware hosts.</t> | ||||
<t>As specified in <xref target="RFC4861" format="default"/> and <xref | ||||
target="RFC6980" format="default"/>, when the set of options causes | ||||
the size of an advertisement to exceed the link MTU, multiple router | ||||
advertisements <bcp14>MUST</bcp14> be sent to avoid fragmentation, | ||||
each containing a subset of the options. In such cases, the PvD Option | ||||
header (i.e., all fields except the Options field) | ||||
<bcp14>MUST</bcp14> be repeated in all the transmitted RAs. | ||||
The options within the Options field <bcp14>MAY</bcp14> be transmitted only | ||||
once, included in one of the transmitted PvD Options.</t> | ||||
</section> | ||||
<section anchor="non-pvd-aware-host-behavior" numbered="true" | ||||
toc="default"> | ||||
<name>Non-PvD-Aware Host Behavior</name> | ||||
<t>As the PvD Option has a new option code, non-PvD-aware hosts will | ||||
simply ignore the PvD Option and all the options it contains (see | ||||
<xref target="RFC4861" sectionFormat="of" section="4.2"/>). This | ||||
ensures the backward compatibility required in <xref target="RFC7556" | ||||
sectionFormat="of" section="3.3"/>. This behavior allows for a | ||||
mixed-mode network where a mix of PvD-aware and non-PvD-aware hosts | ||||
coexist.</t> | ||||
</section> | ||||
<section anchor="host" numbered="true" toc="default"> | ||||
<name>PvD-Aware Host Behavior</name> | ||||
<t>Hosts <bcp14>MUST</bcp14> associate received RAs and included | ||||
configuration information (e.g., Router Valid Lifetime, Prefix | ||||
Information <xref target="RFC4861" format="default"/>, Recursive DNS | ||||
Server <xref target="RFC8106" format="default"/>, and Routing | ||||
Information | ||||
<xref target="RFC4191" format="default"/> options) with the Explicit | ||||
PvD identified by the first PvD Option present in the received RA, if | ||||
any, or with the Implicit PvD identified by the host interface and the | ||||
source address of the received RA otherwise. If an RA message header | ||||
is present both within the PvD Option and outside it, the header | ||||
within the PvD Option takes precedence.</t> | ||||
<t>In case multiple PvD Options are found in a given RA, hosts | ||||
<bcp14>MUST</bcp14> ignore all but the first PvD Option.</t> | ||||
<t>If a host receives PvD Options flags that it does not recognize | ||||
(currently in the Reserved field), it <bcp14>MUST</bcp14> ignore these | ||||
flags.</t> | ||||
<t>Similarly, hosts <bcp14>MUST</bcp14> associate all network | ||||
configuration objects (e.g., default routers, addresses, more specific | ||||
routes, and DNS Recursive Resolvers) with the PvD associated with the | ||||
RA that provisioned the object. For example, addresses that are | ||||
generated using a received Prefix Information Option (PIO) are | ||||
associated with the PvD of the last received RA that included the | ||||
given PIO.</t> | ||||
<t>PvD IDs <bcp14>MUST</bcp14> be compared in a case-insensitive | ||||
manner as defined by | ||||
<xref target="RFC4343" format="default"/>. For example, "pvd.example.com." or | ||||
"PvD.Example.coM." | ||||
would refer to the same PvD.</t> | ||||
<t>While performing PvD-specific operations such as resolving names, | ||||
executing the default address selection algorithm <xref | ||||
target="RFC6724" format="default"/>, or executing the default router | ||||
selection algorithm when forwarding packets <xref target="RFC4861" | ||||
format="default"/> <xref target="RFC4191" format="default"/> | ||||
<xref target="RFC8028" format="default"/>, hosts and applications | ||||
<bcp14>MAY</bcp14> consider only the configuration associated with any | ||||
non-empty subset of PvDs. For example, a host <bcp14>MAY</bcp14> | ||||
associate a given process with a specific PvD, or a specific set of | ||||
PvDs, while associating another process with another PvD. A PvD-aware | ||||
application might also be able to select, on a per-connection basis, | ||||
which PvDs should be used. In particular, constrained devices such as | ||||
small battery-operated devices (e.g., Internet of Things (IoT)) or | ||||
devices with limited | ||||
CPU or memory resources may purposefully use a single PvD while | ||||
ignoring some received RAs containing different PvD IDs.</t> | ||||
<t>The way an application expresses its desire to use a given PvD, or | ||||
a set of PvDs, and the way this selection is enforced are out of the | ||||
scope of this document. Useful insights about these considerations can | ||||
be found in <xref target="I-D.kline-mif-mpvd-api-reqs" | ||||
format="default"/>.</t> | ||||
<section anchor="dhcpv6" numbered="true" toc="default"> | ||||
<name>DHCPv6 Configuration Association</name> | ||||
<t>When a host retrieves stateless configuration elements using | ||||
DHCPv6 (e.g., DNS recursive resolvers or DNS domain search lists | ||||
<xref target="RFC3646" format="default"/>), they <bcp14>MUST</bcp14> | ||||
be associated with all the Explicit and Implicit PvDs received on | ||||
the same interface and contained in an RA with the O-flag set <xref | ||||
target="RFC4861" format="default"/>.</t> | ||||
<t>When a host retrieves stateful assignments using DHCPv6, such | ||||
assignments <bcp14>MUST</bcp14> be associated with the received PvD that was | ||||
received with RAs with the M-flag set and including a matching PIO. | ||||
A PIO is considered to match a DHCPv6 assignment when the IPv6 prefix | ||||
from the PIO includes the assignment from DHCPv6. For example, | ||||
if a PvD's associated PIO defines the prefix <tt>2001:db8:cafe::/64</tt>, | ||||
a DHCPv6 IA_NA message that assigns the address | ||||
<tt>2001:db8:cafe::1234:4567</tt> | ||||
would be considered to match.</t> | ||||
<t>In cases where an address would be assigned by DHCPv6 and no | ||||
matching | ||||
PvD could be found, hosts <bcp14>MAY</bcp14> associate the assigned address | ||||
with any | ||||
Implicit PvD received on the same interface or to multiple Implicit PvDs | ||||
received on the same interface. This is intended to resolve | ||||
backward-compatibility | ||||
issues with rare deployments choosing to assign addresses with DHCPv6 while | ||||
not sending any matching PIO. Implementations are suggested to flag or log | ||||
such scenarios as errors to help detect misconfigurations.</t> | ||||
</section> | ||||
<section anchor="dhcpv4" numbered="true" toc="default"> | ||||
<name>DHCPv4 Configuration Association</name> | ||||
<t>Associating DHCPv4 <xref target="RFC2131" format="default"/> | ||||
configuration elements with Explicit PvDs allows hosts to treat a | ||||
set of IPv4 and IPv6 configurations as a single PvD with shared | ||||
properties. For example, consider a router that provides two | ||||
different uplinks. One could be a broadband network that has data | ||||
rate and streaming properties described in PvD Additional | ||||
Information and that provides both IPv4 and IPv6 network access. The | ||||
other could be a cellular network that provides only IPv6 network | ||||
access and uses NAT64 <xref target="RFC6146" format="default"/>. The | ||||
broadband network can be represented by an Explicit PvD that points | ||||
to the Additional Information and also marks association with DHCPv4 | ||||
information. The cellular network can be represented by a different | ||||
Explicit PvD that is not associated with DHCPv4.</t> | ||||
<t>When a PvD-aware host retrieves configuration elements from | ||||
DHCPv4, the information is associated either with a single Explicit | ||||
PvD on that interface or else with all Implicit PvDs on the same | ||||
interface.</t> | ||||
<t>An Explicit PvD indicates its association with DHCPv4 information | ||||
by setting the L-flag in the PvD Option. If there is exactly one | ||||
Explicit PvD that sets this flag, hosts <bcp14>MUST</bcp14> | ||||
associate the DHCPv4 information with that PvD. Multiple Explicit | ||||
PvDs on the same interface marking this flag is a misconfiguration, | ||||
and hosts <bcp14>SHOULD NOT</bcp14> associate the DHCPv4 information | ||||
with any Explicit PvD in this case.</t> | ||||
<t>If no single Explicit PvD claims association with DHCPv4, the | ||||
configuration elements coming from DHCPv4 <bcp14>MUST</bcp14> be | ||||
associated with all Implicit PvDs identified by the interface on | ||||
which the DHCPv4 transaction happened. This maintains existing host | ||||
behavior.</t> | ||||
</section> | ||||
<section anchor="connection-sharing-by-the-host" numbered="true" | ||||
toc="default"> | ||||
<name>Connection Sharing by the Host</name> | ||||
<t>The situation in which a host shares connectivity from an | ||||
upstream interface (e.g., cellular) to a downstream interface (e.g., | ||||
Wi-Fi) is known as 'tethering'. Techniques such as ND Proxy <xref | ||||
target="RFC4389" format="default"/>, 64share <xref target="RFC7278" | ||||
format="default"/>, or prefix delegation (e.g., using DHCPv6-PD | ||||
<xref target="RFC8415" format="default"/>) may be used for that | ||||
purpose.</t> | ||||
<t>Whenever the RAs received from the upstream interface contain a | ||||
PvD Option, hosts that are sharing connectivity | ||||
<bcp14>SHOULD</bcp14> include a PvD Option within the RAs sent | ||||
downstream with:</t> | ||||
<ul spacing="normal"> | ||||
<li>The same PvD ID FQDN</li> | ||||
<li>The same H-flag, Delay, and Sequence Number values</li> | ||||
<li>The L-flag set whenever the host is sharing IPv4 connectivity | ||||
received from the same upstream interface</li> | ||||
<li>The bits in the Reserved field set to 0</li> | ||||
</ul> | ||||
<t>The values of the R-flag, Router Advertisement message | ||||
header, and Options field depend on whether or not the connectivity should | ||||
be shared only with PvD-aware hosts (see <xref target="router" | ||||
format="default"/>). In particular, | ||||
all options received within the upstream PvD Option and included in | ||||
the downstream RA <bcp14>SHOULD</bcp14> be included in the downstream PvD | ||||
Option.</t> | ||||
</section> | ||||
<section anchor="usage-of-dns-servers" numbered="true" toc="default"> | ||||
<name>Usage of DNS Servers</name> | ||||
<t>PvD-aware hosts can be provisioned with recursive DNS servers via | ||||
RA options passed within an Explicit PvD, via RA options associated | ||||
with an Implicit PvD, via DHCPv6 or DHCPv4, or from some other | ||||
provisioning mechanism that creates an Explicit PvD (such as a VPN). | ||||
In all of these cases, the recursive DNS server addresses | ||||
<bcp14>SHOULD</bcp14> be | ||||
associated with the corresponding PvD. Specifically, queries sent | ||||
to a configured recursive DNS server <bcp14>SHOULD</bcp14> be sent from a | ||||
local IP | ||||
address that was provisioned for the PvD via RA or DHCP. Answers | ||||
received from the DNS server <bcp14>SHOULD</bcp14> only be used on the same | ||||
PvD.</t> | ||||
<t>PvD-aware applications will be able to select which PvD(s) to use | ||||
for DNS resolution and connections, which allows them to effectively | ||||
use multiple Explicit PvDs. In order to support non-PvD-aware | ||||
applications, however, PvD-aware hosts <bcp14>SHOULD</bcp14> ensure | ||||
that non-PvD-aware name resolution APIs like "getaddrinfo" only use | ||||
resolvers from a single PvD for a given query. Handling DNS across | ||||
PvDs is discussed in <xref sectionFormat="of" section="5.2.1" | ||||
target="RFC7556"/>, and PvD APIs are discussed in <xref | ||||
sectionFormat="of" section="6" target="RFC7556" | ||||
format="default"/>.</t> | ||||
<t>Maintaining the correct usage of DNS within PvDs avoids various | ||||
practical errors such as:</t> | ||||
<ul spacing="normal"> | ||||
<li>A PvD associated with a VPN or otherwise private network may | ||||
provide DNS answers that contain addresses inaccessible over | ||||
another PvD. This includes the DNS queries to retrieve PvD | ||||
Additional Information, which could otherwise send identifying | ||||
information to the recursive DNS system (see <xref target="retr" | ||||
format="default"/>).</li> | ||||
<li>A PvD that uses a NAT64 <xref target="RFC6146" | ||||
format="default"/> and DNS64 | ||||
<xref target="RFC6147" format="default"/> will synthesize IPv6 addresses in | ||||
DNS | ||||
answers that are not globally routable and would be invalid on | ||||
other PvDs. Conversely, an IPv4 address resolved via DNS on | ||||
another PvD cannot be directly used on a NAT64 network.</li> | ||||
</ul> | ||||
</section> | ||||
</section> | ||||
</section> | ||||
<section anchor="data" numbered="true" toc="default"> | ||||
<name>Provisioning Domain Additional Information</name> | ||||
<t>Additional information about the network characteristics can be | ||||
retrieved based on the PvD ID. This set of information is called PvD | ||||
Additional Information and is encoded as a JSON object <xref | ||||
target="RFC8259" format="default"/>. This JSON object is restricted to | ||||
the Internet JSON (I-JSON) profile, as defined in <xref target="RFC7493" | ||||
format="default"/>.</t> | ||||
<t>The purpose of this JSON object is to provide Additional Information | ||||
to applications on a client host about the connectivity that is provided | ||||
using a given interface and source address. It typically includes data | ||||
that would be considered too large, or not critical enough, to be | ||||
provided within an RA option. The information contained in this object | ||||
<bcp14>MAY</bcp14> be used by the operating system, network libraries, | ||||
applications, or users in order to decide which set of PvDs should be | ||||
used for which connection, as described in <xref target="host" | ||||
format="default"/>.</t> | ||||
<t>The Additional Information related to a PvD is specifically intended | ||||
to be optional and is targeted at optimizing or informing the behavior | ||||
of user-facing hosts. This information can be extended to provide hints | ||||
for host system behavior (such as captive portal or walled-garden PvD | ||||
detection) or application behavior (describing application-specific | ||||
services offered on a given PvD). This content may not be appropriate | ||||
for light-weight IoT devices. IoT devices might | ||||
need only a subset of the information and would in some cases prefer a | ||||
smaller representation like Concise Binary Object Representation (CBOR) | ||||
<xref target="RFC7049" format="default"/>. Delivering a reduced version | ||||
of the PvD Additional Information designed for such devices is not | ||||
defined in this document.</t> | ||||
<section anchor="retr" numbered="true" toc="default"> | ||||
<name>Retrieving the PvD Additional Information</name> | ||||
<t>When the H-flag of the PvD Option is set, hosts <bcp14>MAY</bcp14> | ||||
attempt to retrieve the PvD Additional Information associated with a | ||||
given PvD by performing an HTTP-over-TLS <xref target="RFC2818" | ||||
format="default"/> GET query to | ||||
<tt>https://<PvD-ID>/.well-known/pvd</tt>. Inversely, hosts | ||||
<bcp14>MUST NOT</bcp14> do so whenever the H-flag is not set.</t> | ||||
<t>Recommendations for how to use TLS securely can be found in <xref | ||||
target="RFC7525" format="default"/>.</t> | ||||
<t>When a host retrieves the PvD Additional Information, it | ||||
<bcp14>MUST</bcp14> | ||||
verify that the TLS server certificate is valid for the performed | ||||
request, specifically, that a DNS-ID <xref target="RFC6125" format="default"/> | ||||
on the certificate is equal to | ||||
the PvD ID expressed as an FQDN. This validation indicates that the | ||||
owner of the FQDN authorizes its use with the prefix advertised by the router. | ||||
If this validation fails, hosts <bcp14>MUST</bcp14> close the connection and | ||||
treat the PvD | ||||
as if it has no Additional Information.</t> | ||||
<t>HTTP requests and responses for PvD Additional Information use the | ||||
"application/pvd+json" media type (see <xref | ||||
target="pvd-json-media-type-registration" format="default"/>). Clients | ||||
<bcp14>SHOULD</bcp14> include this media type as an Accept header field in | ||||
their GET | ||||
requests, and servers <bcp14>MUST</bcp14> mark this media type as their | ||||
Content-Type | ||||
header field in responses.</t> | ||||
<t>Note that the DNS name resolution of the PvD ID, any connections | ||||
made | ||||
for certificate validation (such as Online Certificate Status Protocol (OCSP) | ||||
<xref target="RFC6960" format="default"/>), and | ||||
the HTTP request itself <bcp14>MUST</bcp14> be performed using the considered | ||||
PvD. | ||||
In other words, the name resolution, PKI checks, source address | ||||
selection, as well as the next-hop router selection <bcp14>MUST</bcp14> be | ||||
performed | ||||
while exclusively using the set of configuration information attached | ||||
with the PvD, as defined in <xref target="host" format="default"/>. In some | ||||
cases, it | ||||
may therefore be necessary to wait for an address to be available for | ||||
use (e.g., once the Duplicate Address Detection or DHCPv6 processes | ||||
are complete) before initiating the HTTP-over-TLS query. In order to | ||||
address privacy concerns around linkability of the PvD HTTP connection | ||||
with future user-initiated connections, if the host has a temporary address | ||||
per <xref target="RFC4941" format="default"/> in this PvD, then it | ||||
<bcp14>SHOULD</bcp14> use a temporary address | ||||
to fetch the PvD Additional Information and <bcp14>MAY</bcp14> deprecate the | ||||
used | ||||
temporary address and generate a new temporary address afterward.</t> | ||||
<t>If the HTTP status of the answer is greater than or equal to 400, | ||||
the host <bcp14>MUST</bcp14> close its connection and consider that | ||||
there is no PvD Additional Information. If the HTTP status of the | ||||
answer is between 300 and 399, inclusive, it <bcp14>MUST</bcp14> | ||||
follow the redirection(s). If the HTTP status of the answer is between | ||||
200 and 299, inclusive, the response is expected to be a single JSON | ||||
object.</t> | ||||
<t>After retrieval of the PvD Additional Information, hosts | ||||
<bcp14>MUST</bcp14> remember | ||||
the last Sequence Number value received in an RA including the same | ||||
PvD ID. Whenever a new RA for the same PvD is received with a different | ||||
Sequence Number value, or whenever the expiry date for the additional | ||||
information is reached, hosts <bcp14>MUST</bcp14> deprecate the Additional | ||||
Information | ||||
and stop using it.</t> | ||||
<t>Hosts retrieving a new PvD Additional Information object | ||||
<bcp14>MUST</bcp14> check | ||||
for the presence and validity of the mandatory fields specified in | ||||
<xref target="aiformat" format="default"/>. A retrieved object including an | ||||
expiration | ||||
time that is already past or missing a mandatory element <bcp14>MUST</bcp14> | ||||
be | ||||
ignored.</t> | ||||
<t>In order to avoid synchronized queries toward the server hosting | ||||
the PvD Additional Information when an object expires, object updates | ||||
are delayed by a randomized backoff time.</t> | ||||
<ul spacing="normal"> | ||||
<li>When a host performs a JSON object update after it detected a | ||||
change in the PvD Option Sequence Number, it <bcp14>MUST</bcp14> add a delay | ||||
before sending the query. The target time for the delay is calculated | ||||
as a random time between zero and 2<sup>(10 + Delay)</sup> milliseconds, | ||||
where 'Delay' corresponds to the 4-bit unsigned integer in | ||||
the last received PvD Option.</li> | ||||
<li>When a host last retrieved a JSON object at time A that includes | ||||
an | ||||
expiry time B using the "expires" key, and the host is configured to keep | ||||
the PvD Additional Information up to date, it <bcp14>MUST</bcp14> add some | ||||
randomness into | ||||
its calculation of the time to fetch the update. The target time for | ||||
fetching the updated object is calculated as a uniformly random time | ||||
in the interval [(B-A)/2,B].</li> | ||||
</ul> | ||||
<t>In the example in <xref target="pvd_example" format="default"/>, | ||||
the | ||||
Delay field value is 1; this means that the host calculates its delay | ||||
by choosing a uniformly random time between 0 and 2<sup>(10 + 1)</sup> | ||||
milliseconds, i.e., between 0 and 2048 milliseconds.</t> | ||||
<t>Since the Delay value is directly within the PvD Option rather | ||||
than the object itself, an operator may perform a push-based update by | ||||
incrementing the Sequence Number value while changing the Delay value | ||||
depending on the criticality of the update and the capacity of its | ||||
PvD Additional Information servers.</t> | ||||
<t>In addition to adding a random delay when fetching Additional | ||||
Information, hosts | ||||
<bcp14>MUST</bcp14> enforce a minimum time between requesting Additional | ||||
Information | ||||
for a given PvD on the same network. This minimum time is | ||||
<bcp14>RECOMMENDED</bcp14> | ||||
to be 10 seconds, in order to avoid hosts causing a denial-of-service on the | ||||
PvD server. Hosts also <bcp14>MUST</bcp14> limit the number of requests that | ||||
are made to | ||||
different PvD Additional Information servers on the same network within a | ||||
short | ||||
period of time. A <bcp14>RECOMMENDED</bcp14> value is to issue no more than | ||||
five PvD | ||||
Additional Information requests in total on a given network within 10 seconds. | ||||
For more discussion, see <xref target="security" format="default"/>.</t> | ||||
<t>The PvD Additional Information object includes a set of IPv6 | ||||
prefixes (under the key "prefixes") that <bcp14>MUST</bcp14> be checked | ||||
against all | ||||
the Prefix Information Options advertised in the RA. If any of the | ||||
prefixes included in any associated PIO is not covered by at least one of the | ||||
listed prefixes, the PvD Additional Information <bcp14>MUST</bcp14> be | ||||
considered | ||||
to be a misconfiguration and <bcp14>MUST NOT</bcp14> be used by the host. See | ||||
<xref target="misconfig" format="default"/> for more discussion on handling | ||||
such misconfigurations.</t> | ||||
<t>If the request for PvD Additional Information fails due to a TLS | ||||
certificate validation | ||||
error, an HTTP error, or because the retrieved file does not contain valid PvD | ||||
JSON, | ||||
hosts <bcp14>MUST</bcp14> close any connection used to fetch the PvD | ||||
Additional Information | ||||
and <bcp14>MUST NOT</bcp14> request the information for that PvD ID again for | ||||
the duration | ||||
of the local network attachment. If a host detects 10 or more such failures | ||||
to fetch PvD Additional Information, the local network is assumed to be | ||||
misconfigured or under attack and the host <bcp14>MUST NOT</bcp14> make any | ||||
further | ||||
requests for any PvD Additional Information, belonging to any PvD ID, for | ||||
the duration of the local network attachment. For more discussion, see <xref | ||||
target="security" format="default"/>.</t> | ||||
</section> | ||||
<section anchor="serverop" numbered="true" toc="default"> | ||||
<name>Operational Consideration to Providing the PvD Additional | ||||
Information</name> | ||||
<t>Whenever the H-flag is set in the PvD Option, a valid PvD | ||||
Additional Information object <bcp14>MUST</bcp14> be made available to | ||||
all hosts receiving the RA by the network operator. In particular, | ||||
when a captive portal is present, hosts <bcp14>MUST</bcp14> still be | ||||
allowed to perform DNS, certificate validation, and HTTP-over-TLS | ||||
operations related to the retrieval of the object, even before logging | ||||
into the captive portal.</t> | ||||
<t>Routers <bcp14>SHOULD</bcp14> increment the PvD Option Sequence | ||||
Number by one whenever a new PvD Additional Information object is | ||||
available and should be retrieved by hosts. If the value exceeds what | ||||
can be stored in the Sequence Number field, it <bcp14>MUST</bcp14> | ||||
wrap back to zero.</t> | ||||
<t>The server providing the JSON files <bcp14>SHOULD</bcp14> also | ||||
check whether the client address is contained by the prefixes listed | ||||
in the Additional Information and <bcp14>SHOULD</bcp14> return a 403 | ||||
response code if there is no match.</t> | ||||
</section> | ||||
<section anchor="aiformat" numbered="true" toc="default"> | ||||
<name>PvD Additional Information Format</name> | ||||
<t>The PvD Additional Information is a JSON object.</t> | ||||
<t>The following table presents the mandatory keys, which | ||||
<bcp14>MUST</bcp14> be included in the object:</t> | ||||
<table align="center"> | ||||
<thead> | ||||
<tr> | ||||
<th align="left">JSON key</th> | ||||
<th align="left">Description</th> | ||||
<th align="left">Type</th> | ||||
<th align="left">Example</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">identifier</td> | ||||
<td align="left">PvD ID FQDN</td> | ||||
<td align="left">String</td> | ||||
<td align="left">"pvd.example.com."</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">expires</td> | ||||
<td align="left">Date after which this object is no longer | ||||
valid</td> | ||||
<td align="left"> | ||||
<xref target="RFC3339" format="default"/> Date</td> | ||||
<td align="left">"2020-05-23T06:00:00Z"</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">prefixes</td> | ||||
<td align="left">Array of IPv6 prefixes valid for this PvD</td> | ||||
<td align="left">Array of strings</td> | ||||
<td align="left">["2001:db8:1::/48", "2001:db8:4::/48"]</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>A retrieved object that does not include all three of these keys at | ||||
the root of the JSON object <bcp14>MUST</bcp14> be ignored. All three keys | ||||
need | ||||
to be validated; otherwise, the object <bcp14>MUST</bcp14> be ignored. The | ||||
value stored | ||||
for "identifier" <bcp14>MUST</bcp14> be matched against the PvD ID FQDN | ||||
presented in the | ||||
PvD Option using the comparison mechanism described in <xref target="host" | ||||
format="default"/>. | ||||
The value stored for "expires" <bcp14>MUST</bcp14> be a valid date in the | ||||
future. | ||||
If the PIO of the received RA is not covered by at least one of the "prefixes" | ||||
key, the retrieved object <bcp14>SHOULD</bcp14> be ignored.</t> | ||||
<t>The following table presents some optional keys that | ||||
<bcp14>MAY</bcp14> be | ||||
included in the object.</t> | ||||
<table align="center"> | ||||
<thead> | ||||
<tr> | ||||
<th align="left">JSON key</th> | ||||
<th align="left">Description</th> | ||||
<th align="left">Type</th> | ||||
<th align="left">Example</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">dnsZones</td> | ||||
<td align="left">DNS zones searchable and accessible</td> | ||||
<td align="left">Array of strings</td> | ||||
<td align="left">["example.com", "sub.example.com"]</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">noInternet</td> | ||||
<td align="left">No Internet; set to "true" when the PvD is | ||||
restricted</td> | ||||
<td align="left">Boolean</td> | ||||
<td align="left">true</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>It is worth noting that the JSON format allows for extensions. | ||||
Whenever an unknown key is encountered, it <bcp14>MUST</bcp14> be ignored | ||||
along with | ||||
its associated elements.</t> | ||||
<t>Private-use or experimental keys <bcp14>MAY</bcp14> be used in the | ||||
JSON | ||||
dictionary. In order to avoid such keys colliding with the keys registered by | ||||
IANA, | ||||
implementers or vendors defining private-use or experimental | ||||
keys <bcp14>MUST</bcp14> create sub-dictionaries. If a set of PvD Additional | ||||
Information keys | ||||
are defined by an organization that has a formal URN namespace <xref | ||||
target="IANA-URN" format="default"/>, | ||||
the URN namespace <bcp14>SHOULD</bcp14> be used as the top-level JSON key for | ||||
the sub-dictionary. For other private uses, the sub-dictionary key | ||||
<bcp14>SHOULD</bcp14> follow the format of "vendor-*", where the "*" is | ||||
replaced by the | ||||
implementer's or vendor's identifier. For example, keys specific to the FooBar | ||||
organization could use "vendor-foobar". If a host receives a sub-dictionary | ||||
with | ||||
an unknown key, the host <bcp14>MUST</bcp14> ignore the contents of the | ||||
sub-dictionary.</t> | ||||
<section anchor="example" numbered="true" toc="default"> | ||||
<name>Example</name> | ||||
<t>The following two examples show how the JSON keys defined in this | ||||
document can be used:</t> | ||||
<sourcecode type="json"> | ||||
{ | ||||
"identifier": "cafe.example.com.", | ||||
"expires": "2020-05-23T06:00:00Z", | ||||
"prefixes": ["2001:db8:1::/48", "2001:db8:4::/48"], | ||||
} | ||||
{ | ||||
"identifier": "company.foo.example.com.", | ||||
"expires": "2020-05-23T06:00:00Z", | ||||
"prefixes": ["2001:db8:1::/48", "2001:db8:4::/48"], | ||||
"vendor-foo": | ||||
{ | ||||
"private-key": "private-value", | ||||
}, | ||||
} | ||||
</sourcecode> | ||||
</section> | ||||
</section> | ||||
<section anchor="misconfig" numbered="true" toc="default"> | ||||
<name>Detecting Misconfiguration and Misuse</name> | ||||
<t>Hosts <bcp14>MUST</bcp14> validate the TLS server certificate when | ||||
retrieving PvD | ||||
Additional Information, as detailed in <xref target="retr" | ||||
format="default"/>.</t> | ||||
<t>Hosts <bcp14>MUST</bcp14> verify that all prefixes in all the RA | ||||
PIOs are covered by a | ||||
prefix from the PvD Additional Information. An adversarial router | ||||
attempting to spoof the definition of an Explicit PvD, without the ability to | ||||
modify the PvD Additional Information, would need to perform IPv6-to-IPv6 | ||||
Network | ||||
Prefix Translation (NPTv6) <xref target="RFC6296" format="default"/> in order | ||||
to circumvent this check. | ||||
Thus, this check cannot prevent all spoofing, but it can detect | ||||
misconfiguration | ||||
or mismatched routers that are not adding a NAT.</t> | ||||
<t>If NPTv6 is being added in order to spoof PvD ownership, the HTTPS | ||||
server for Additional Information can detect this misconfiguration. | ||||
The HTTPS server <bcp14>SHOULD</bcp14> validate the source addresses | ||||
of incoming connections (see <xref target="retr" | ||||
format="default"/>). This check gives reasonable assurance that | ||||
NPTv6 was not used and restricts the information to the valid network | ||||
users.If the PvD does not | ||||
provision IPv4 (it does not include the L-flag in the RA), the server | ||||
cannot validate the source addresses of connections using IPv4. Thus, | ||||
the PvD ID FQDN for such PvDs <bcp14>SHOULD NOT</bcp14> have a DNS A | ||||
record.</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="operational-considerations" numbered="true" | ||||
toc="default"> | ||||
<name>Operational Considerations</name> | ||||
<t>This section describes some example use cases of PvDs. For the sake | ||||
of | ||||
simplicity, the RA messages will not be described in the usual ASCII art | ||||
but rather in an indented list. Values in the PvD Option header that are not | ||||
included in the example are assumed to be zero or false (such as the | ||||
H-flag, Sequence Number, and Delay fields).</t> | ||||
<section anchor="exposing-extra-ra-options-to-pvd-aware-hosts" | ||||
numbered="true" toc="default"> | ||||
<name>Exposing Extra RA Options to PvD-Aware Hosts</name> | ||||
<t>In this example, there is one RA message sent by the router. This | ||||
message contains some options applicable to all hosts on the network | ||||
and also a PvD Option that also contains other options only visible to | ||||
PvD-aware hosts.</t> | ||||
<ul spacing="normal"> | ||||
<li>RA Header: router lifetime = 6000</li> | ||||
<li>Prefix Information Option: length = 4, prefix = | ||||
2001:db8:cafe::/64</li> | ||||
<li> | ||||
<t>PvD Option header: length = 3 + 5 + 4, PvD ID FQDN = | ||||
example.org., R-flag = 0 (actual length of the header with padding | ||||
24 bytes = 3 * 8 bytes) | ||||
</t> | ||||
<ul spacing="normal"> | ||||
<li>Recursive DNS Server: length = 5, addresses = | ||||
[2001:db8:cafe::53, 2001:db8:f00d::53]</li> | ||||
<li>Prefix Information Option: length = 4, prefix = | ||||
2001:db8:f00d::/64</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
<t>Note that a PvD-aware host will receive two different prefixes, | ||||
<tt>2001:db8:cafe::/64</tt> and <tt>2001:db8:f00d::/64</tt>, both | ||||
associated | ||||
with the same PvD (identified by "example.org."). A non-PvD-aware | ||||
host will only receive one prefix, <tt>2001:db8:cafe::/64</tt>.</t> | ||||
</section> | ||||
<section anchor="different-ras-for-pvd-aware-and-non-pvd-aware-hosts" | ||||
numbered="true" toc="default"> | ||||
<name>Different RAs for PvD-Aware and Non-PvD-Aware Hosts</name> | ||||
<t>It is expected that for some years, networks will have a mixed | ||||
environment of PvD-aware hosts and non-PvD-aware hosts. If there is a | ||||
need to give specific information to PvD-aware hosts only, then it is | ||||
<bcp14>RECOMMENDED</bcp14> to send two RA messages, one for each class of | ||||
hosts. | ||||
This approach allows for two distinct sets of configuration information | ||||
to be sent in a way that will not disrupt non-PvD-aware hosts. It also | ||||
lowers the risk that a single RA message will approach its MTU limit due | ||||
to duplicated information.</t> | ||||
<t>If two RA messages are sent for this reason, they | ||||
<bcp14>MUST</bcp14> be sent from two | ||||
different link-local source addresses (<xref target="router" | ||||
format="default"/>). For example, here is the | ||||
RA sent for non-PvD-aware hosts:</t> | ||||
<ul spacing="normal"> | ||||
<li>RA Header: router lifetime = 6000 (non-PvD-aware hosts will use | ||||
this router as a default router)</li> | ||||
<li>Prefix Information Option: length = 4, prefix = | ||||
2001:db8:cafe::/64</li> | ||||
<li>Recursive DNS Server Option: length = 3, addresses = | ||||
[2001:db8:cafe::53]</li> | ||||
<li> | ||||
<t>PvD Option header: length = 3 + 2, PvD ID FQDN = | ||||
foo.example.org., R-flag = 1 (actual length of the header 24 bytes | ||||
= 3 * 8 bytes) | ||||
</t> | ||||
<ul spacing="normal"> | ||||
<li>RA Header: router lifetime = 0 (PvD-aware hosts will not use | ||||
this router as a default router), implicit length = 2</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
<t>And here is the RA sent for PvD-aware hosts:</t> | ||||
<ul spacing="normal"> | ||||
<li>RA Header: router lifetime = 0 (non-PvD-aware hosts will not use | ||||
this router as a default router)</li> | ||||
<li> | ||||
<t>PvD Option header: length = 3 + 2 + 4 + 3, PvD ID FQDN = | ||||
bar.example.org., R-flag = 1 (actual length of the header 24 bytes | ||||
= 3 * 8 bytes) | ||||
</t> | ||||
<ul spacing="normal"> | ||||
<li>RA Header: router lifetime = 1600 (PvD-aware hosts will use | ||||
this router as a default router), implicit length = 2</li> | ||||
<li>Prefix Information Option: length = 4, prefix = | ||||
2001:db8:f00d::/64</li> | ||||
<li>Recursive DNS Server Option: length = 3, addresses = | ||||
[2001:db8:f00d::53]</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
<t>In the above example, non-PvD-aware hosts will only use the first | ||||
listed RA sent by their default router and use the | ||||
<tt>2001:db8:cafe::/64</tt> prefix. PvD-aware hosts will autonomously | ||||
configure addresses from both PIOs but will only use the source | ||||
address in <tt>2001:db8:f00d::/64</tt> to communicate past the | ||||
first-hop router | ||||
since only the router sending the second RA will be used as the | ||||
default | ||||
router; similarly, they will use the DNS server | ||||
<tt>2001:db8:f00d::53</tt> when | ||||
communicating from this address.</t> | ||||
</section> | ||||
<section anchor="enabling-multi-homing-for-pvd-aware-hosts" | ||||
numbered="true" toc="default"> | ||||
<name>Enabling Multihoming for PvD-Aware Hosts</name> | ||||
<t>In this example, the goal is to have one prefix from one RA be | ||||
usable by both non-PvD-aware and PvD-aware hosts and to have another | ||||
prefix usable only by PvD-aware hosts. This allows PvD-aware hosts to | ||||
be able to effectively multihome on the network.</t> | ||||
<t>The first RA is usable by all hosts. The only difference for | ||||
PvD-aware hosts is that they can explicitly identify the PvD ID | ||||
associated with the RA. PvD-aware hosts will also use this prefix to | ||||
communicate with non-PvD-aware hosts on the same network.</t> | ||||
<ul spacing="normal"> | ||||
<li>RA Header: router lifetime = 6000 (non-PvD-aware hosts will use | ||||
this router as a default router)</li> | ||||
<li>Prefix Information Option: length = 4, prefix = | ||||
2001:db8:cafe::/64</li> | ||||
<li>Recursive DNS Server Option: length = 3, addresses = | ||||
[2001:db8:cafe::53]</li> | ||||
<li>PvD Option header: length = 3, PvD ID FQDN = foo.example.org., | ||||
R-flag = 0 (actual length of the header 24 bytes = 3 * 8 bytes)</li> | ||||
</ul> | ||||
<t>The second RA contains a prefix usable only by PvD-aware | ||||
hosts. Non-PvD-aware | ||||
hosts will ignore this RA; hence, only the PvD-aware hosts will be | ||||
multihomed.</t> | ||||
<ul spacing="normal"> | ||||
<li>RA Header: router lifetime = 0 (non-PvD-aware hosts will not use | ||||
this router as a default router)</li> | ||||
<li> | ||||
<t>PvD Option header: length = 3 + 2 + 4 + 3, PvD ID FQDN = | ||||
bar.example.org., R-flag = 1 (actual length of the header 24 bytes | ||||
= 3 * 8 bytes) | ||||
</t> | ||||
<ul spacing="normal"> | ||||
<li>RA Header: router lifetime = 1600 (PvD-aware hosts will use | ||||
this router as a default router), implicit length = 2</li> | ||||
<li>Prefix Information Option: length = 4, prefix = | ||||
2001:db8:f00d::/64</li> | ||||
<li>Recursive DNS Server Option: length = 3, addresses = | ||||
[2001:db8:f00d::53]</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
<t>Note: the above examples assume that the router has received its | ||||
PvD IDs from upstream routers | ||||
or via some other configuration mechanism. Another document could define ways | ||||
for the router | ||||
to generate its own PvD IDs to allow the above scenario in the absence of PvD | ||||
ID provisioning.</t> | ||||
</section> | ||||
<section anchor="providing-additional-information-to-pvd-aware-hosts" | ||||
numbered="true" toc="default"> | ||||
<name>Providing Additional Information to PvD-Aware Hosts</name> | ||||
<t>In this example, the router indicates that it provides Additional | ||||
Information using the H-flag. | ||||
The Sequence Number on the PvD Option is set to 7 in this example.</t> | ||||
<ul spacing="normal"> | ||||
<li>RA Header: router lifetime = 6000</li> | ||||
<li>Prefix Information Option: length = 4, prefix = | ||||
2001:db8:cafe::/64</li> | ||||
<li>Recursive DNS Server Option: length = 3, addresses = | ||||
[2001:db8:cafe::53]</li> | ||||
<li>PvD Option header: length = 3, PvD ID FQDN = cafe.example.com., | ||||
Sequence Number = 7, R-flag = 0, H-flag = 1 (actual length of the header with | ||||
padding | ||||
24 bytes = 3 * 8 bytes)</li> | ||||
</ul> | ||||
<t>A PvD-aware host will fetch | ||||
<https://cafe.example.com/.well-known/pvd> to get the additional | ||||
information. The following example shows a GET request that the host | ||||
sends, in HTTP/2 syntax <xref target="RFC7540" format="default"/>:</t> | ||||
<sourcecode> | ||||
:method = GET | ||||
:scheme = https | ||||
:authority = cafe.example.com | ||||
:path = /.well-known/pvd | ||||
accept = application/pvd+json | ||||
</sourcecode> | ||||
<t>The HTTP server will respond with the JSON Additional | ||||
Information:</t> | ||||
<sourcecode type="json"> | ||||
:status = 200 | ||||
content-type = application/pvd+json | ||||
content-length = 116 | ||||
{ | ||||
"identifier": "cafe.example.com.", | ||||
"expires": "2020-05-23T06:00:00Z", | ||||
"prefixes": ["2001:db8:cafe::/48"], | ||||
} | ||||
</sourcecode> | ||||
<t>At this point, the host has the PvD Additional Information and | ||||
knows | ||||
the expiry time. When either the expiry time passes or a new | ||||
Sequence Number is provided in an RA, the host will re-fetch the | ||||
Additional Information.</t> | ||||
<t>For example, if the router sends a new RA with the Sequence Number | ||||
set to 8, | ||||
the host will re-fetch the Additional Information:</t> | ||||
<ul spacing="normal"> | ||||
<li>PvD Option header: length = 3 + 5 + 4 , PvD ID FQDN = | ||||
cafe.example.com., | ||||
Sequence Number = 8, R-flag = 0, H-flag = 1 (actual length of the header with | ||||
padding | ||||
24 bytes = 3 * 8 bytes)</li> | ||||
</ul> | ||||
<t>However, if the router sends a new RA, but the Sequence Number has | ||||
not changed, | ||||
the host would not re-fetch the Additional Information (until and unless the | ||||
expiry time | ||||
of the Additional Information has passed).</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="security" numbered="true" toc="default"> | ||||
<name>Security Considerations</name> | ||||
<t>Since the PvD Option can contain an RA header and other RA options, | ||||
any security considerations that apply for specific RA options continue to | ||||
apply when used within a PvD Option.</t> | ||||
<t>Although some solutions such as IPsec or SEcure Neighbor Discovery | ||||
(SeND) <xref target="RFC3971" format="default"/> can be used in order to | ||||
secure the IPv6 Neighbor Discovery Protocol, in practice, actual | ||||
deployments largely rely on link-layer or physical-layer security | ||||
mechanisms (e.g., 802.1x <xref target="IEEE8021X" format="default"/>) in | ||||
conjunction with RA-Guard <xref target="RFC6105" format="default"/>.</t> | ||||
<t>If multiple RAs are sent for a single PvD to avoid fragmentation, | ||||
dropping packets | ||||
can lead to processing only part of a PvD Option, which could lead to hosts | ||||
receiving only part of the contained options. As discussed in <xref | ||||
target="router" format="default"/>, routers | ||||
<bcp14>MUST</bcp14> include the PvD Option in all fragments generated.</t> | ||||
<t>This specification does not improve the Neighbor Discovery Protocol | ||||
security model but simply validates that the owner of the PvD FQDN | ||||
authorizes its use with the prefix advertised by the router. In | ||||
combination with implicit trust in the local router (if present), this | ||||
gives the host some level of assurance that the PvD is authorized for | ||||
use in this environment. However, when the local router cannot be | ||||
trusted, no such guarantee is available.</t> | ||||
<t>It must be noted that <xref target="misconfig" format="default"/> of | ||||
this document | ||||
only provides reasonable assurance against misconfiguration but does not | ||||
prevent a hostile network access provider from advertising incorrect | ||||
information that could lead applications or hosts to select a hostile PvD. | ||||
However, a host that correctly implements the multiple PvD architecture <xref | ||||
target="RFC7556" format="default"/> | ||||
using the mechanism described in this document will be less susceptible to | ||||
some attacks than a host that does not by being able to check for the various | ||||
misconfigurations or inconsistencies described in this document.</t> | ||||
<t>Since expiration times provided in PvD Additional Information use | ||||
absolute time, these values can be skewed due to clock skew or for hosts | ||||
without an accurate time base. Such time values <bcp14>MUST NOT</bcp14> | ||||
be used for security-sensitive functionality or decisions.</t> | ||||
<t>An attacker generating RAs on a local network can use the H-flag and | ||||
the PvD ID | ||||
to cause hosts on the network to make requests for PvD Additional Information | ||||
from servers. This can become a denial-of-service attack, in which an attacker | ||||
can amplify its attack by triggering TLS connections to arbitrary servers in | ||||
response | ||||
to sending UDP packets containing RA messages. To mitigate this attack, hosts | ||||
<bcp14>MUST</bcp14>:</t> | ||||
<ul spacing="normal"> | ||||
<li>limit the rate at which they fetch a particular PvD's Additional | ||||
Information;</li> | ||||
<li>limit the rate at which they fetch any PvD Additional Information | ||||
on a given local | ||||
network;</li> | ||||
<li>stop making requests for a PvD ID that does not respond with valid | ||||
JSON; and</li> | ||||
<li>stop making requests for all PvD IDs once a certain number of | ||||
failures is reached | ||||
on a particular network.</li> | ||||
</ul> | ||||
<t>Details are provided in <xref target="retr" format="default"/>. This | ||||
attack can be targeted at generic web servers, | ||||
in which case the host behavior of stopping requesting for any server that | ||||
doesn't | ||||
behave like a PvD Additional Information server is critical. Limiting requests | ||||
for | ||||
a specific PvD ID might not be sufficient if the attacker changes the PvD ID | ||||
values | ||||
quickly, so hosts also need to stop requesting if they detect consistent | ||||
failure when | ||||
on a network that is under attack. For cases in which an attacker is pointing | ||||
hosts at | ||||
a valid PvD Additional Information server (but one that is not actually | ||||
associated | ||||
with the local network), the server <bcp14>SHOULD</bcp14> reject any requests | ||||
that do not originate | ||||
from the expected IPv6 prefix as described in <xref target="serverop" | ||||
format="default"/>.</t> | ||||
</section> | ||||
<section anchor="privacy-considerations" numbered="true" toc="default"> | ||||
<name>Privacy Considerations</name> | ||||
<t>Retrieval of the PvD Additional Information over HTTPS requires early | ||||
communications between the connecting host and a server that may be | ||||
located further than the first-hop router. Although this server is | ||||
likely to be located within the same administrative domain as the | ||||
default router, this property can't be ensured. To minimize the leakage | ||||
of identity information while retrieving the PvD Additional Information, | ||||
hosts <bcp14>SHOULD</bcp14> make use of an IPv6 temporary address and | ||||
<bcp14>SHOULD NOT</bcp14> include any privacy-sensitive data, such as a | ||||
User-Agent header field or an HTTP cookie.</t> | ||||
<t>Hosts might not always fetch PvD Additional Information, depending on | ||||
whether or not they expect to use the information. However, if a host | ||||
allows requesting Additional Information for certain PvD IDs, | ||||
an attacker could send various PvD IDs in RAs to detect | ||||
which PvD IDs are allowed by the client. To avoid this, hosts | ||||
<bcp14>SHOULD</bcp14> either fetch Additional Information for all | ||||
eligible PvD IDs on a given local network or fetch the information for | ||||
none of them.</t> | ||||
<t>From a user privacy perspective, retrieving the PvD Additional | ||||
Information | ||||
is not different from establishing a first connection to a remote | ||||
server or even performing a single DNS lookup. For example, most | ||||
operating systems already perform early queries to static web sites, | ||||
such as <http://captive.example.com/hotspot-detect.html>, in order to | ||||
detect the presence of a captive portal.</t> | ||||
<t>The DNS queries associated with the PvD Additional Information | ||||
<bcp14>MUST</bcp14> | ||||
use the DNS servers indicated by the associated PvD, as described in | ||||
<xref target="retr" format="default"/>. This ensures the name of the PvD | ||||
Additional Information server | ||||
is not unintentionally sent on another network, thus leaking identifying | ||||
information about the networks with which the client is associated.</t> | ||||
<t>There may be some cases where hosts, for privacy reasons, should | ||||
refrain from accessing servers that are located outside a certain | ||||
network boundary. In practice, this could be implemented as an allowed list | ||||
of 'trusted' FQDNs and/or IP prefixes that the host is allowed to | ||||
communicate with. In such scenarios, the host <bcp14>SHOULD</bcp14> check that | ||||
the | ||||
provided PvD ID, as well as the IP address that it resolves into, are | ||||
part of the allowed list.</t> | ||||
<t>Network operators <bcp14>SHOULD</bcp14> restrict access to PvD | ||||
Additional | ||||
Information to only expose it to hosts that are connected to the local | ||||
network, especially if the Additional Information would provide information | ||||
about local network configuration to attackers. This can be implemented by | ||||
allowing access from the addresses and prefixes that the router provides | ||||
for the PvD, which will match the prefixes contained in the PvD Additional | ||||
Information. This technique is described in <xref target="serverop" | ||||
format="default"/>.</t> | ||||
</section> | ||||
<section anchor="iana" numbered="true" toc="default"> | ||||
<name>IANA Considerations</name> | ||||
<section | ||||
anchor="change-to-ipv6-neighbor-discovery-option-formats-registry" | ||||
numbered="true" toc="default"> | ||||
<name>Change to IPv6 Neighbor Discovery Option Formats Registry</name> | ||||
<t>IANA has removed the | ||||
'reclaimable' tag for value 21 for the PvD Option in the | ||||
"IPv6 Neighbor Discovery Option Formats" registry.</t> | ||||
</section> | ||||
<section anchor="new-entry-in-the-well-known-uris-registry" | ||||
numbered="true" toc="default"> | ||||
<name>New Entry in the Well-Known URIs Registry</name> | ||||
<t>IANA has added a new entry in the "Well-Known URIs" registry | ||||
<xref target="RFC8615" format="default"/> with the following | ||||
information:</t> | ||||
<t>URI suffix: pvd</t> | ||||
<t>Change controller: IETF</t> | ||||
<t>Specification document: RFC 8801</t> | ||||
<t>Status: permanent</t> | ||||
<t>Related information: N/A</t> | ||||
</section> | ||||
<section anchor="additional-information-pvd-keys-registry" | ||||
numbered="true" toc="default"> | ||||
<name>New Additional Information PvD Keys Registry</name> | ||||
<t>IANA has created and will maintain a new registry called | ||||
"Additional Information PvD Keys", which reserves JSON keys for use in | ||||
PvD Additional Information. The initial contents of this registry are | ||||
given in <xref target="aiformat" format="default"/> (both | ||||
the table of mandatory keys and the table of optional keys).</t> | ||||
<t>The status of a key as mandatory or optional is intentionally not | ||||
denoted in the table to allow for flexibility in future use cases. | ||||
Any new assignments of keys will be considered as optional for the | ||||
purpose of the mechanism described in this document.</t> | ||||
<t>New assignments in the "Additional Information PvD Keys" registry | ||||
will be administered by IANA through Expert Review <xref | ||||
target="RFC8126" format="default"/>. Experts are requested to ensure | ||||
that defined keys do not overlap in names or semantics and that they | ||||
represent | ||||
non-vendor-specific use cases. Vendor-specific keys | ||||
<bcp14>SHOULD</bcp14> use sub-dictionaries, as described in <xref | ||||
target="aiformat" format="default"/>.</t> | ||||
<t>IANA has placed the "Additional Information PvD Keys" registry | ||||
within a new registry entitled "Provisioning Domains (PvDs)".</t> | ||||
</section> | ||||
<section anchor="pvd-option-flags-registry" numbered="true" | ||||
toc="default"> | ||||
<name>New PvD Option Flags Registry</name> | ||||
<t>IANA has also created and will maintain a new registry entitled | ||||
"PvD Option Flags". This new registry reserves bit positions from 0 | ||||
to 11 to be used in the PvD Option bitmask. This document assigns bit | ||||
positions 0, 1, and 2 as shown in the table below. Future assignments | ||||
require Standards Action <xref target="RFC8126" | ||||
format="default"/>.</t> | ||||
<table anchor="iana-flags"> | ||||
<thead> | ||||
<tr> | ||||
<th>Bit</th> | ||||
<th>Name</th> | ||||
<th>Reference</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>0</td> | ||||
<td>H-flag</td> | ||||
<td>RFC 8801</td> | ||||
</tr> | ||||
<tr> | ||||
<td>1</td> | ||||
<td>L-flag</td> | ||||
<td>RFC 8801</td> | ||||
</tr> | ||||
<tr> | ||||
<td>2</td> | ||||
<td>R-flag</td> | ||||
<td>RFC 8801</td> | ||||
</tr> | ||||
<tr> | ||||
<td>3-11</td> | ||||
<td>Unassigned</td> | ||||
<td></td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Since these flags apply to an IPv6 Router Advertisement Option, | ||||
IANA has placed this registry under the existing "Internet | ||||
Control Message Protocol version 6 (ICMPv6) Parameters" registry and | ||||
provided a link on the new "Provisioning Domains (PvDs)" registry.</t> | ||||
</section> | ||||
<section anchor="pvd-json-media-type-registration" numbered="true" | ||||
toc="default"> | ||||
<name>PvD JSON Media Type Registration</name> | ||||
<t>This document registers the media type for PvD JSON text, | ||||
"application/pvd+json".</t> | ||||
<dl> | ||||
<dt>Type name:</dt><dd>application</dd> | ||||
<dt>Subtype name:</dt><dd>pvd+json</dd> | ||||
<dt>Required parameters:</dt><dd>N/A</dd> | ||||
<dt>Optional parameters:</dt><dd>N/A</dd> | ||||
<dt>Encoding considerations:</dt><dd>Encoding considerations are | ||||
identical to | ||||
those specified for the "application/json" media type.</dd> | ||||
<dt>Security considerations:</dt><dd>See <xref target="security" | ||||
format="default"/> of RFC 8801.</dd> | ||||
<dt>Interoperability considerations:</dt><dd>This document specifies | ||||
the format of | ||||
conforming messages and the interpretation thereof.</dd> | ||||
<dt>Published specification:</dt><dd>RFC 8801</dd> | ||||
<dt>Applications that use this media type:</dt><dd>This media type is | ||||
intended | ||||
to be used by networks advertising additional Provisioning Domain | ||||
information and clients looking up such information.</dd> | ||||
<dt>Fragment identifier considerations:</dt><dd>N/A</dd> | ||||
<dt>Additional information:</dt><dd>N/A</dd> | ||||
<dt>Person & email address to contact for further | ||||
information:</dt><dd>See | ||||
Authors' Addresses section</dd> | ||||
<dt>Intended usage:</dt><dd>COMMON</dd> | ||||
<dt>Restrictions on usage:</dt><dd>N/A</dd> | ||||
<dt>Author:</dt><dd>IETF</dd> | ||||
<dt>Change controller:</dt><dd>IETF</dd> | ||||
</dl> | ||||
</section> | ||||
</section> | ||||
</middle> | ||||
<back> | ||||
<displayreference target="I-D.kline-mif-mpvd-api-reqs" to="MPVD-API"/> | ||||
<displayreference target="I-D.stenberg-mif-mpvd-dns" to="MPVD-DNS"/> | ||||
<references> | ||||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7556.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.2119.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6980.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4191.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4343.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6724.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8028.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.7493.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2818.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7525.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4941.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8615.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126.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.3646.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2131.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6146.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4389.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7278.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8415.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6147.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.6125.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6960.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6296.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7540.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3971.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6105.xml"/> | ||||
<reference anchor="IEEE8021X" | ||||
target="https://ieeexplore.ieee.org/document/9018454"> | ||||
<front> | ||||
<title>IEEE Standard for Local and Metropolitan Area Networks -- | ||||
Port-Based Network Access Control</title> | ||||
<author> | ||||
<organization>IEEE</organization> | ||||
</author> | ||||
</front> | ||||
<seriesInfo name="IEEE" value="802.1X-2020"/> | ||||
<seriesInfo name="DOI" value="10.1109/IEEESTD.2020.9018454"/> | ||||
</reference> | ||||
<reference anchor="IANA-URN" | ||||
target="https://www.iana.org/assignments/urn-namespaces/"> | ||||
<front> | ||||
<title>Uniform Resource Names (URN) Namespaces</title> | ||||
<author> | ||||
<organization>IANA</organization> | ||||
</author> | ||||
</front> | ||||
</reference> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.kline-mif-mp | ||||
vd-api-reqs.xml"/> | ||||
<xi:include | ||||
href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.stenberg-mif | ||||
-mpvd-dns.xml"/> | ||||
</references> | ||||
</references> | ||||
<section anchor="acknowledgments" numbered="false" toc="default"> | ||||
<name>Acknowledgments</name> | ||||
<t>Many thanks to <contact fullname="Markus Stenberg"/> and <contact | ||||
fullname="Steven Barth"/> for their earlier work on <xref | ||||
target="I-D.stenberg-mif-mpvd-dns" format="default"/>, as well as to | ||||
<contact fullname="Basile Bruneau"/>, who was author of an early draft | ||||
version | ||||
of this document.</t> | ||||
<t>Thanks also to <contact fullname="Marcus Keane"/>, <contact | ||||
fullname="Mikael Abrahamsson"/>, <contact fullname="Ray Bellis"/>, | ||||
<contact fullname="Zhen Cao"/>, <contact fullname="Tim Chown"/>, | ||||
<contact fullname="Lorenzo Colitti"/>, <contact fullname="Michael Di | ||||
Bartolomeo"/>, <contact fullname="Ian Farrer"/>, <contact | ||||
fullname="Phillip Hallam-Baker"/>, <contact fullname="Bob Hinden"/>, | ||||
<contact fullname="Tatuya Jinmei"/>, <contact fullname="Erik Kline"/>, | ||||
<contact fullname="Ted Lemon"/>, <contact fullname="Paul Hoffman"/>, | ||||
<contact fullname="Dave Thaler"/>, <contact fullname="Suresh | ||||
Krishnan"/>, <contact fullname="Gorry Fairhurst"/>, <contact | ||||
fullname="Jen Lenkova"/>, <contact fullname="Veronika McKillop"/>, | ||||
<contact fullname="Mark Townsley"/>, and <contact fullname="James | ||||
Woodyatt"/> for useful and interesting discussions and reviews.</t> | ||||
<t>Finally, special thanks to <contact fullname="Thierry Danis"/> for | ||||
his valuable input and implementation efforts, <contact fullname="Tom | ||||
Jones"/> for his integration effort into the NEAT project, and <contact | ||||
fullname="Rigil Salim"/> for his implementation work.</t> | ||||
</section> | ||||
</back> | ||||
</rfc> | ||||
End of changes. 1 change blocks. | ||||
lines changed or deleted | lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |