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