| rfc8910xml2.original.xml | rfc8910.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='UTF-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <!ENTITY rfc2119 PUBLIC "" ".//reference.RFC.2119.xml"> | ||||
| <!ENTITY rfc8174 PUBLIC "" ".//reference.RFC.8174.xml"> | ||||
| ]> | ||||
| <!-- WK: Set category, IPR, docName --> | ||||
| <rfc category="std" docName="draft-ietf-capport-rfc7710bis-10" | ||||
| ipr="trust200902" obsoletes="7710" updates="3679"> | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <?rfc toc="yes" ?> | ||||
| <?rfc symrefs="yes" ?> | ||||
| <?rfc sortrefs="yes"?> | ||||
| <?rfc iprnotified="no" ?> | ||||
| <?rfc strict="yes"?> | ||||
| <?rfc compact="yes" ?> | ||||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" | ||||
| docName="draft-ietf-capport-rfc7710bis-10" number="8910" | ||||
| ipr="trust200902" consensus="true" | ||||
| obsoletes="7710" updates="3679" submissionType="IETF" xml:lang="en" | ||||
| tocInclude="true" symRefs="true" sortRefs="true" version="3"> | ||||
| <front> | <front> | |||
| <!--c WK: Set long title. --> | ||||
| <title abbrev="DHCP Captive-Portal">Captive-Portal Identification in DHCP | <title abbrev="DHCP Captive-Portal">Captive-Portal Identification in DHCP | |||
| / RA</title> | and Router Advertisements (RAs)</title> | |||
| <seriesInfo name="RFC" value="8910"/> | ||||
| <author fullname="Warren Kumari" initials="W." surname="Kumari"> | <author fullname="Warren Kumari" initials="W." surname="Kumari"> | |||
| <organization>Google</organization> | <organization>Google</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>1600 Amphitheatre Parkway</street> | <street>1600 Amphitheatre Parkway</street> | |||
| <city>Mountain View, CA</city> | <city>Mountain View, CA</city> | |||
| <code>94043</code> | <code>94043</code> | |||
| <country>United States of America</country> | ||||
| <country>US</country> | ||||
| </postal> | </postal> | |||
| <email>warren@kumari.net</email> | <email>warren@kumari.net</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Erik Kline" initials="E." surname="Kline"> | <author fullname="Erik Kline" initials="E." surname="Kline"> | |||
| <organization>Loon</organization> | <organization>Loon</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>1600 Amphitheatre Parkway</street> | <street>1600 Amphitheatre Parkway</street> | |||
| <city>Mountain View, CA</city> | <city>Mountain View, CA</city> | |||
| <code>94043</code> | <code>94043</code> | |||
| <country>United States of America</country> | ||||
| <country>US</country> | ||||
| </postal> | </postal> | |||
| <phone/> | <phone/> | |||
| <email>ek@loon.com</email> | <email>ek@loon.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date month="September" year="2020"/> | ||||
| <date month="July" year="2020"/> | <keyword>Captive Portal</keyword> | |||
| <keyword>Walled Garden</keyword> | ||||
| <keyword>Coffee-shop</keyword> | ||||
| <keyword>Hotel</keyword> | ||||
| <abstract> | <abstract> | |||
| <t>In many environments offering short-term or temporary Internet access | <t>In many environments offering short-term or temporary Internet access | |||
| (such as coffee shops), it is common to start new connections in a | (such as coffee shops), it is common to start new connections in a | |||
| captive portal mode. This highly restricts what the user can do | captive portal mode. This highly restricts what the user can do | |||
| until the user has satisfied the captive portal conditions.</t> | until the user has satisfied the captive portal conditions.</t> | |||
| <t>This document describes a DHCPv4 and DHCPv6 option and a Router Adverti sement | <t>This document describes a DHCPv4 and DHCPv6 option and a Router Adverti sement | |||
| (RA) option to inform clients that they are behind some sort of | (RA) option to inform clients that they are behind some sort of | |||
| captive portal enforcement device, and that they will need to satify the | captive portal enforcement device, and that they will need to satisfy the | |||
| Captive Portal conditions to get | Captive Portal conditions to get | |||
| Internet access. It is not a full solution to address all of the issues | Internet access. It is not a full solution to address all of the issues | |||
| that clients may have with captive portals; it is designed to be one | that clients may have with captive portals; it is designed to be one | |||
| component of a standardized approach for hosts to interact with such | component of a standardized approach for hosts to interact with such | |||
| portals. While this document defines how the network operator may convey | portals. While this document defines how the network operator may convey | |||
| the captive portal API endpoint to hosts, the specific methods of | the captive portal API endpoint to hosts, the specific methods of | |||
| satisfying and interacting with the captive portal are out of | satisfying and interacting with the captive portal are out of | |||
| scope of this document.</t> | scope of this document.</t> | |||
| <t>This document replaces RFC 7710, which used DHCP code point 160. | ||||
| <t>This document replaces <xref target="RFC7710"/>. <xref target="RFC7710 | Due to a conflict, this document specifies 114. Consequently, this | |||
| "/> | document also updates RFC 3679.</t> | |||
| used DHCP code point 160. Due to a conflict, this document specifies 114. | ||||
| Consequently, this document also updates <xref target="RFC3679"/>.</t> | ||||
| </abstract> | </abstract> | |||
| </front> | ||||
| </front> | ||||
| <middle> | <middle> | |||
| <section title="Introduction"> | <section numbered="true" toc="default"> | |||
| <name>Introduction</name> | ||||
| <t>In many environments, users need to connect to a captive portal | <t>In many environments, users need to connect to a captive portal | |||
| device and agree to an Acceptable Use Policy (AUP) and / or provide | device and agree to an Acceptable Use Policy (AUP) and/or provide | |||
| billing information before they can access the Internet. Regardless of | billing information before they can access the Internet. Regardless of | |||
| how that mechanism operates, this document provides functionality | how that mechanism operates, this document provides functionality | |||
| to allow the client to know when it is | to allow the client to know when it is | |||
| behind a captive portal and how to contact it.</t> | behind a captive portal and how to contact it.</t> | |||
| <t>In order to present users with the payment or AUP pages, a captive | ||||
| <t>In order to present users with the payment or AUP pages, presently a | portal enforcement device presently has to intercept the user's connection | |||
| captive portal enforcement device has to intercept the user's connections | s and | |||
| and | redirect the user to a captive portal server, using methods that are | |||
| redirect the user to a captive portal server, using methods that are very | very similar to man-in-the-middle (MITM) attacks. As increasing focus is | |||
| similar to man-in-the-middle (MITM) attacks. As increasing focus is | ||||
| placed on security, and end nodes adopt a more secure stance, these | placed on security, and end nodes adopt a more secure stance, these | |||
| interception techniques will become less effective and/or more | interception techniques will become less effective and/or more | |||
| intrusive.</t> | intrusive.</t> | |||
| <t>This document describes a DHCPv4 <xref target="RFC2131" format="default | ||||
| <t>This document describes a DHCPv4 <xref target="RFC2131"/> and DHCPv6 | "/> and DHCPv6 | |||
| <xref target="RFC8415"/> option (Captive-Portal) and an IPv6 | <xref target="RFC8415" format="default"/> option (Captive-Portal) and an I | |||
| Router Advertisement (RA) <xref target="RFC4861"/> option that informs | Pv6 | |||
| Router Advertisement (RA) <xref target="RFC4861" format="default"/> option | ||||
| that informs | ||||
| clients that they are behind a captive portal enforcement device and | clients that they are behind a captive portal enforcement device and | |||
| the API endpoint that the host can contact for more information.</t> | the API endpoint that the host can contact for more information.</t> | |||
| <t>This document replaces RFC 7710 <xref target="RFC7710" | ||||
| format="default"/>, which used DHCP code point 160. Due to a conflict, | ||||
| this document specifies 114. Consequently, this document also updates | ||||
| <xref target="RFC3679"/>.</t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Requirements Notation</name> | ||||
| <t>This document replaces RFC 7710 <xref target="RFC7710"/>.</t> | <t> | |||
| The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | ||||
| <section title="Requirements Notation"> | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| "OPTIONAL" in this document are to be interpreted as described in | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, | be interpreted as | |||
| and only when, they appear in all capitals, as shown here.</t> | 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> | </section> | |||
| <section anchor="option" title="The Captive-Portal Option"> | <section anchor="option" numbered="true" toc="default"> | |||
| <t>The Captive-Portal DHCP / RA Option informs the client that it may be | <name>The Captive-Portal Option</name> | |||
| <t>The Captive-Portal DHCP/RA Option informs the client that it may be | ||||
| behind a captive portal and provides the URI to access an API as defined | behind a captive portal and provides the URI to access an API as defined | |||
| by [draft-ietf-capport-api]. This is primarily intended to improve the | by <xref target="RFC8908"/>. This is primarily intended to improve the | |||
| user experience by showing the user the captive portal information faster and more | user experience by showing the user the captive portal information faster and more | |||
| reliably. Note that, for the foreseeable future, captive portals will | reliably. Note that, for the foreseeable future, captive portals will | |||
| still need to implement interception techniques to serve legacy | still need to implement interception techniques to serve legacy | |||
| clients, and clients will need to perform probing to detect captive | clients, and clients will need to perform probing to detect captive | |||
| portals"; nonetheless, the mechanism provided by this document provides | portals; nonetheless, the mechanism provided by this document provides | |||
| a more reliable and performant way to do so, and is therefore the preferre d | a more reliable and performant way to do so, and is therefore the preferre d | |||
| mechanism for captive portal detection.</t> | mechanism for captive portal detection.</t> | |||
| <t>Clients that support the Captive Portal DHCP option <bcp14>SHOULD</bcp1 | ||||
| <t>Clients that support the Captive Portal DHCP option SHOULD include the | 4> include the | |||
| option in the Parameter Request List in DHCPREQUEST messages. DHCP servers | option in the Parameter Request List in DHCPREQUEST messages. DHCP servers | |||
| MAY send the Captive Portal option without any explicit request.</t> | <bcp14>MAY</bcp14> send the Captive Portal option without any explicit req | |||
| uest.</t> | ||||
| <t>In order to support multiple "classes" of clients (e.g. IPv4 only, | ||||
| IPv6 only with DHCPv6 (<xref target="RFC8415"/>), and IPv6 only with RA) t | ||||
| he | ||||
| captive network can provision the client with the URI via multiple methods | ||||
| (IPv4 DHCP, IPv6 | ||||
| DHCP, and IPv6 RA). The captive portal operator SHOULD ensure that the URI | ||||
| s | ||||
| provisioned by each method are identical to reduce the chance of operation | ||||
| al problems. | ||||
| As the maximum length of the URI that can be carried in IPv4 DHCP is 255 | ||||
| bytes, URIs longer than this SHOULD NOT be provisioned by any of the IPv6 | ||||
| options described in this document. In IPv6-only environments | ||||
| this restriction can be relaxed.</t> | ||||
| <t>In all variants of this option, the URI MUST be that of the captive | <t>In order to support multiple "classes" of clients (e.g., IPv4 only, | |||
| portal API endpoint [draft-ietf-capport-api]. | IPv6 only with DHCPv6 (<xref target="RFC8415" format="default"/>), and | |||
| IPv6 only with RA), the captive network can provision the client with the | ||||
| URI via multiple methods (IPv4 DHCP, IPv6 DHCP, and IPv6 RA). The | ||||
| captive portal operator <bcp14>SHOULD</bcp14> ensure that the URIs | ||||
| provisioned by each method are identical to reduce the chance of | ||||
| operational problems. As the maximum length of the URI that can be | ||||
| carried in IPv4 DHCP is 255 bytes, URIs longer than this <bcp14>SHOULD | ||||
| NOT</bcp14> be provisioned by any of the IPv6 options described in this | ||||
| document. In IPv6-only environments, this restriction can be | ||||
| relaxed.</t> | ||||
| <t>In all variants of this option, the URI <bcp14>MUST</bcp14> be that of | ||||
| the captive | ||||
| portal API endpoint (<xref target="RFC8908"/>). | ||||
| </t> | </t> | |||
| <t>A captive portal MAY do content negotiation (<xref target="RFC7231"/> | <t>A captive portal <bcp14>MAY</bcp14> do content negotiation (<xref | |||
| section 3.4) and attempt to redirect clients querying without an | target="RFC7231" sectionFormat="of" section="3.4"/>) and attempt to | |||
| explicit indication of support for the captive portal API content type | redirect clients querying without an explicit indication of support for | |||
| (i.e. without application/capport+json listed explicitly anywhere within | the captive portal API content type (i.e., without | |||
| an Accept header vis. <xref target="RFC7231"/> section 5.3). In so | application/capport+json listed explicitly anywhere within an Accept | |||
| doing, the captive portal SHOULD redirect the client to the value | header field as described in <xref target="RFC7231" sectionFormat="of" | |||
| associated with the "user-portal-url" API key. When performing such | section="5.3"/>). In so doing, the captive portal <bcp14>SHOULD</bcp14> | |||
| content negotiation (<xref target="RFC7231"/> Section 3.4), implementors | redirect the client to the value associated with the "user-portal-url" | |||
| of captive portals need to keep in mind that such responses might be | API key. When performing such content negotiation (<xref | |||
| cached, and therefore SHOULD include an appropriate Vary header field | target="RFC7231" sectionFormat="of" section="3.4"/>), implementors of | |||
| (<xref target="RFC7231"/> Section 7.1.4) or set the Cache-Control header | captive portals need to keep in mind that such responses might be | |||
| field in any responses to "private", or a more restrictive value such as | cached, and therefore <bcp14>SHOULD</bcp14> include an appropriate Vary | |||
| "no-store" <xref target="RFC7234"/> Section 5.2.2.3). | header field (<xref target="RFC7231" sectionFormat="of" | |||
| section="7.1.4"/>) or set the Cache-Control header field in any | ||||
| responses to "private" or a more restrictive value such as "no-store" | ||||
| (<xref target="RFC7234" sectionFormat="of" section="5.2.2.3"/>). | ||||
| </t> | </t> | |||
| <t>The URI SHOULD NOT contain an IP address literal. Exceptions to this | <t>The URI <bcp14>SHOULD NOT</bcp14> contain an IP address literal. Except ions to this | |||
| might include networks with only one operational IP address family where | might include networks with only one operational IP address family where | |||
| DNS is either not available or not fully functional until the captive | DNS is either not available or not fully functional until the captive | |||
| portal has been satisfied. Use of iPAddress certificates (<xref target="RF C3779"/>) | portal has been satisfied. Use of IP Address certificates (<xref target="R FC3779" format="default"/>) | |||
| adds considerations that are out of scope for this document.</t> | adds considerations that are out of scope for this document.</t> | |||
| <t>Networks with no captive portals may explicitly indicate this | <t>Networks with no captive portals may explicitly indicate this | |||
| condition by using this option with the IANA-assigned URI for this | condition by using this option with the IANA-assigned URI for this | |||
| purpose. Clients observing the URI value | purpose. Clients observing the URI value | |||
| "urn:ietf:params:capport:unrestricted" may forego time-consuming forms of | "urn:ietf:params:capport:unrestricted" may forego time-consuming forms of | |||
| captive portal detection.</t> | captive portal detection.</t> | |||
| <section anchor="dhcpv4opt" numbered="true" toc="default"> | ||||
| <section anchor="dhcpv4opt" title="IPv4 DHCP Option"> | <name>IPv4 DHCP Option</name> | |||
| <t>The format of the IPv4 Captive-Portal DHCP option is shown | <t>The format of the IPv4 Captive-Portal DHCP option is shown | |||
| below.<figure> | below.</t> | |||
| <artwork><![CDATA[ | ||||
| <figure title="Captive-Portal DHCPv4 Option Format"> | ||||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| 0 1 2 3 | 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 | 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 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Code | Len | URI (variable length) ... | | | Code | Len | URI (variable length) ... | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| . ...URI continued... . | . ...URI continued... . | |||
| | ... | | | ... | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | </figure> | |||
| <t><list style="symbols"> | <ul empty="true"> | |||
| <t>Code: The Captive-Portal DHCPv4 Option (114) (one octet)</t> | ||||
| <t>Len: The length (one octet), in octets, of the URI.</t> | <li> | |||
| <dl> | ||||
| <t>URI: The URI for the captive portal API endpoint to which the | <dt>Code: | |||
| </dt> | ||||
| <dd>The Captive-Portal DHCPv4 Option (114) (one octet). | ||||
| </dd> | ||||
| <dt>Len: | ||||
| </dt> | ||||
| <dd>The length (one octet), in octets, of the URI. | ||||
| </dd> | ||||
| <dt>URI: | ||||
| </dt> | ||||
| <dd>The URI for the captive portal API endpoint to which the | ||||
| user should connect (encoded following the rules in <xref | user should connect (encoded following the rules in <xref | |||
| target="RFC3986"/>).</t> | target="RFC3986" format="default"/>). | |||
| </list>See <xref target="RFC2132"/>, Section 2 for more on the format | </dd> | |||
| of IPv4 DHCP options.</t> | ||||
| </dl> | ||||
| </li> | ||||
| </ul> | ||||
| <t>See <xref target="RFC2132" sectionFormat="of" section="2"/> for more | ||||
| on the format | ||||
| of IPv4 DHCP options.</t> | ||||
| <t>Note that the URI parameter is not null terminated.</t> | <t>Note that the URI parameter is not null terminated.</t> | |||
| </section> | </section> | |||
| <section anchor="dhcpv6opt" numbered="true" toc="default"> | ||||
| <section anchor="dhcpv6opt" title="IPv6 DHCP Option"> | <name>IPv6 DHCP Option</name> | |||
| <t>The format of the IPv6 Captive-Portal DHCP option is shown below. | <t>The format of the IPv6 Captive-Portal DHCP option is shown below. | |||
| <figure> | </t> | |||
| <artwork><![CDATA[ | <figure title="Captive-Portal DHCPv6 Option Format"> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| 0 1 2 3 | 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 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | option-code | option-len | | | option-code | option-len | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| . URI (variable length) . | . URI (variable length) . | |||
| | ... | | | ... | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | </figure> | |||
| <t><list style="symbols"> | <ul empty="true"> | |||
| <t>option-code: The Captive-Portal DHCPv6Option (103) (two | <li> | |||
| octets)</t> | <dl> | |||
| <t>option-len: The unsigned 16-bit length, in octets, of the URI. | <dt>option-code: | |||
| </t> | </dt> | |||
| <dd>The Captive-Portal DHCPv6 Option (103) (two octets). | ||||
| </dd> | ||||
| <t>URI: The URI for the captive portal API endpoint to which the | <dt>option-len: | |||
| user should connect (encoded following the rules in <xref | </dt> | |||
| target="RFC3986"/>).</t> | <dd>The unsigned 16-bit length, in octets, of the URI. | |||
| </list>See <xref target="RFC7227"/>, Section 5.7 for more examples | </dd> | |||
| of DHCP Options with URIs. See <xref target="RFC8415"/>, Section 21.1 | ||||
| for more on the format of IPv6 DHCP options.</t> | ||||
| <t>Note that the URI parameter is not null terminated.</t> | <dt>URI: | |||
| </dt> | ||||
| <dd>The URI for the captive portal API endpoint to which the user should | ||||
| connect (encoded following the rules in <xref target="RFC3986" format="default"/ | ||||
| >). | ||||
| </dd> | ||||
| </dl> | ||||
| </li> | ||||
| </ul> | ||||
| <t>See <xref target="RFC7227" sectionFormat="of" section="5.7"/> for | ||||
| more examples of DHCP Options with URIs. See <xref target="RFC8415" | ||||
| sectionFormat="of" section="21.1"/> for more on the format of IPv6 | ||||
| DHCP options.</t> | ||||
| <t>Note that the URI parameter is not null terminated.</t> | ||||
| <t>As the maximum length of the URI that can be carried in IPv4 DHCP is | <t>As the maximum length of the URI that can be carried in IPv4 DHCP is | |||
| 255 bytes, URIs longer than this SHOULD NOT be provisioned via | 255 bytes, URIs longer than this <bcp14>SHOULD NOT</bcp14> be provisione d via | |||
| IPv6 DHCP options.</t> | IPv6 DHCP options.</t> | |||
| </section> | </section> | |||
| <section anchor="v6ndopt" numbered="true" toc="default"> | ||||
| <section anchor="v6ndopt" title="The Captive-Portal IPv6 RA Option"> | <name>The Captive-Portal IPv6 RA Option</name> | |||
| <t>This section describes the Captive-Portal Router Advertisement | <t>This section describes the Captive-Portal Router Advertisement | |||
| option.</t> | option.</t> | |||
| <figure title="Captive-Portal RA Option Format"> | ||||
| <t><figure> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| 0 1 2 3 | 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 | 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 | URI . | | Type | Length | URI . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ . | |||
| . . | . . | |||
| . . | . . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 2: Captive-Portal RA Option Format]]></artwork> | ]]></artwork> | |||
| </figure></t> | </figure> | |||
| <t><list style="hanging"> | ||||
| <t hangText="Type">37</t> | ||||
| <t hangText="Length">8-bit unsigned integer. The length of the | <ul empty="true"> | |||
| <li> | ||||
| <dl newline="false" spacing="normal"> | ||||
| <dt>Type:</dt> | ||||
| <dd>37</dd> | ||||
| <dt>Length:</dt> | ||||
| <dd>8-bit unsigned integer. The length of the | ||||
| option (including the Type and Length fields) in units of 8 | option (including the Type and Length fields) in units of 8 | |||
| bytes.</t> | bytes.</dd> | |||
| <dt>URI:</dt> | ||||
| <t hangText="URI">The URI for the captive portal API endpoint to | <dd>The URI for the captive portal API endpoint to | |||
| which the user should connect. This MUST be padded with NUL | which the user should connect. This <bcp14>MUST</bcp14> be padded wi | |||
| th NUL | ||||
| (0x00) to make the total option length (including the Type and | (0x00) to make the total option length (including the Type and | |||
| Length fields) a multiple of 8 bytes.</t> | Length fields) a multiple of 8 bytes.</dd> | |||
| </list></t> | </dl> | |||
| </li> | ||||
| </ul> | ||||
| <t>Note that the URI parameter is not guaranteed to be null terminated.< /t> | <t>Note that the URI parameter is not guaranteed to be null terminated.< /t> | |||
| <t>As the maximum length of the URI that can be carried in IPv4 DHCP is | <t>As the maximum length of the URI that can be carried in IPv4 DHCP is | |||
| 255 bytes, URIs longer than this SHOULD NOT be provisioned via | 255 bytes, URIs longer than this <bcp14>SHOULD NOT</bcp14> be provisione d via | |||
| IPv6 RA options.</t> | IPv6 RA options.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="precedence" numbered="true" toc="default"> | ||||
| <section anchor="precedence" title="Precedence of API URIs"> | <name>Precedence of API URIs</name> | |||
| <t>A device may learn about Captive Portal API URIs through more than | <t>A device may learn about Captive Portal API URIs through more than | |||
| one of (or indeed all of) the above options. Implementations can select | one of (or indeed all of) the above options. Implementations can select | |||
| their own precedence order (e.g., prefer one of the IPv6 options before | their own precedence order (e.g., prefer one of the IPv6 options before | |||
| the DHCPv4 option, or vice versa, et cetera).</t> | the DHCPv4 option, or vice versa, et cetera).</t> | |||
| <t>If the URIs learned via more than one option described in <xref target= | ||||
| <t>If the URIs learned via more than one option described in <xref | "option" format="default"/> are not all identical, this condition should be logg | |||
| target="option"/> are not all identical, this condition should be logged | ed | |||
| for the device owner or administrator; it is a network configuration error | for the device owner or administrator; it is a network configuration error | |||
| if the learned URIs are not all identical.</t> | if the learned URIs are not all identical.</t> | |||
| </section> | </section> | |||
| <section anchor="iana" numbered="true" toc="default"> | ||||
| <name>IANA Considerations</name> | ||||
| <section anchor="iana" title="IANA Considerations"> | <t>IANA has registered a new IETF URN protocol parameter (<xref | |||
| <t>This document requests one new IETF URN protocol parameter (<xref | target="RFC3553" format="default"/>). IANA has also reallocated two | |||
| target="RFC3553"/>) entry. This document also requests a reallocation | DHCPv4 option codes (see <xref target="exp106" format="default"/> for | |||
| of DHCPv4 option codes (see <xref target="exp106"/> for background).</t> | background) and updated the references for previously registered DHCPv6 | |||
| and IPv6 ND options.</t> | ||||
| <section anchor="iana-urn" numbered="true" toc="default"> | ||||
| <name>Captive Portal Unrestricted Identifier</name> | ||||
| <t>IANA has registered a new entry in the "IETF URN Sub-namespace | ||||
| for Registered Protocol Parameter Identifiers" registry defined in | ||||
| <xref target="RFC3553" format="default"/>: | ||||
| </t> | ||||
| <dl newline="false" spacing="compact"> | ||||
| <dt>Registered Parameter Identifier:</dt> | ||||
| <dd>capport:unrestricted</dd> | ||||
| <dt>Reference:</dt> | ||||
| <dd>RFC 8910</dd> | ||||
| <dt>IANA Registry Reference:</dt> | ||||
| <dd>RFC 8910</dd> | ||||
| </dl> | ||||
| <t>Only one value is defined (see URN above). No hierarchy is defined | ||||
| and, therefore, no sub-namespace registrations are possible.</t> | ||||
| </section> | ||||
| <section anchor="ietf_dhcpv4_option_code_change" numbered="true" toc="defa | ||||
| ult"> | ||||
| <name>BOOTP Vendor Extensions and DHCP Options Code Change</name> | ||||
| <t>Thanks IANA!</t> | <t>IANA has updated the "BOOTP Vendor Extensions and DHCP | |||
| Options" registry (<<eref | ||||
| target="https://www.iana.org/assignments/bootp-dhcp-parameters"/>>) | ||||
| as follows.</t> | ||||
| <section anchor="iana-urn" | <dl spacing="compact"> | |||
| title="Captive Portal Unrestricted Identifier"> | <dt>Tag:</dt> | |||
| <t>This document registers a new entry under the IETF URN | <dd>114</dd> | |||
| Sub-namespace for Registered Protocol Parameter Identifiers | ||||
| defined in <xref target="RFC3553"/>: | ||||
| <list style="hanging"> | ||||
| <t hangText="Registered Parameter Identifier:">capport:unrestricted</t> | ||||
| <t hangText="Reference:">RFC TBD (this document)</t> | ||||
| <t hangText="IANA Registry Reference:"><xref target="RFC3553"/></t> | ||||
| </list></t> | ||||
| <t>Only one value is defined (see URN above). No hierarchy is defined and | <dt>Name:</dt> | |||
| therefore no sub-namespace registrations are possible.</t> | <dd>DHCP Captive-Portal</dd> | |||
| </section> | ||||
| <section anchor="ietf_dhcpv4_option_code_change" | <dt>Data Length:</dt> | |||
| title="BOOTP Vendor Extensions and DHCP Options Code Change"> | <dd>N</dd> | |||
| <t> | ||||
| [ RFC Ed: Please remove before publication: | ||||
| RFC7710 uses DHCP Code 160 -- unfortunately, it was discovered that this o | ||||
| ption code is already widely used by Polycom (see appendix). | ||||
| Option 114 (URL) is currently assigned to Apple (RFC3679, Section 3.2.3 - | ||||
| Contact: Dieter Siegmund, dieter@apple.com - Reason to recover: Never published | ||||
| in an RFC) | ||||
| Tommy Pauly (Apple) and Dieter Siegmund confirm that this codepoint hasn't | ||||
| been used, and Apple is willing to relinquish it for use in CAPPORT. | ||||
| Please see thread: https://mailarchive.ietf.org/arch/msg/captive-portals/T | ||||
| mqQz6Ma_fznD3XbhwkH9m2dB28 for more background. ] | ||||
| </t> | ||||
| <t>The IANA is requested to update the | <dt>Meaning:</dt> | |||
| "BOOTP Vendor Extensions and DHCP Options" registry | <dd>DHCP Captive-Portal</dd> | |||
| (https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-par | ||||
| ameters.xhtml) | ||||
| as follows.</t> | ||||
| <t><figure><artwork><![CDATA[ Tag: 114 | <dt>Reference:</dt> | |||
| Name: DHCP Captive-Portal | <dd>RFC 8910</dd> | |||
| Data Length: N | </dl> | |||
| Meaning: DHCP Captive-Portal | ||||
| Reference: [THIS-RFC]]]></artwork></figure></t> | <dl spacing="compact"> | |||
| <dt>Tag:</dt> | ||||
| <dd>160</dd> | ||||
| <dt>Name:</dt> | ||||
| <dd>Unassigned</dd> | ||||
| <dt>Data Length:</dt> | ||||
| <dd></dd> | ||||
| <dt>Meaning:</dt> | ||||
| <dd>Previously assigned by <xref target="RFC7710"/>; known to also be used by Po | ||||
| lycom.</dd> | ||||
| <dt>Reference:</dt> | ||||
| <dd><xref target="RFC7710"/> RFC 8910</dd> | ||||
| </dl> | ||||
| <t><figure><artwork><![CDATA[ Tag: 160 | ||||
| Name: Unassigned | ||||
| Data Length: | ||||
| Meaning: Previously assigned by RFC7710; known to also be used by Polycom. | ||||
| Reference: [THIS-RFC][RFC7710]]]></artwork></figure></t> | ||||
| </section> | </section> | |||
| <section anchor="iana_update_dhcv6_and_icmpv6" | <section anchor="iana_update_dhcv6_and_icmpv6" numbered="true" toc="defaul | |||
| title="Update DHCPv6 and IPv6 ND Options Registries"> | t"> | |||
| <t>This document requests that the DHCPv6 and IPv6 ND options previously | <name>Update DHCPv6 and IPv6 ND Options Registries</name> | |||
| registered in <xref target="RFC7710"/> be updated to reference this | ||||
| <t>IANA has updated the DHCPv6 (103 - DHCP Captive-Portal) and IPv6 ND | ||||
| (37 - DHCP Captive-Portal) options previously | ||||
| registered in <xref target="RFC7710" format="default"/> to reference thi | ||||
| s | ||||
| document.</t> | document.</t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="security" numbered="true" toc="default"> | ||||
| <section anchor="security" title="Security Considerations"> | <name>Security Considerations</name> | |||
| <t>By removing or reducing the need for captive portals to perform MITM | <t>By removing or reducing the need for captive portals to perform | |||
| hijacking, this mechanism improves security by making the portal and its | MITM hijacking, this mechanism improves security by | |||
| actions visible, rather than hidden, and reduces the likelihood that users | making the portal and its actions visible, rather than hidden, and | |||
| will disable useful security safeguards like DNSSEC validation, VPNs, etc | reduces the likelihood that users will disable useful security | |||
| in order to interact with the captive portal. | safeguards like DNSSEC validation, VPNs, etc. in order to interact with | |||
| In addition, because the system knows that it is behind a captive portal, | the captive portal. In addition, because the system knows that it is | |||
| it can know not to send cookies, credentials, etc. By handing out a URI | behind a captive portal, it can know not to send cookies, credentials, | |||
| which is protected with TLS, the captive portal operator can attempt to | etc. By handing out a URI that is protected with TLS, the captive | |||
| reassure the user that the captive portal is not malicious.</t> | portal operator can attempt to reassure the user that the captive portal | |||
| is not malicious.</t> | ||||
| <t>Clients processing these options SHOULD validate that the option's | <t>Clients processing these options <bcp14>SHOULD</bcp14> validate that th | |||
| e option's | ||||
| contents conform to the validation requirements for URIs, including | contents conform to the validation requirements for URIs, including | |||
| <xref target="RFC3986"/>.</t> | those described in | |||
| <xref target="RFC3986" format="default"/>.</t> | ||||
| <t>Each of the options described in this document is presented to a node | <t>Each of the options described in this document is presented to a | |||
| using the same protocols used to provision other information critical | node using the same protocols used to provision other information | |||
| to the node's successful configuration on a network. The security | critical to the node's successful configuration on a network. The | |||
| considerations applicable to each of these provisioning mechanisms also | security considerations applicable to each of these provisioning | |||
| apply when the node is attempting to learn the information conveyed in | mechanisms also apply when the node is attempting to learn the | |||
| these options. In the absence of security measures like RA Guard | information conveyed in these options. In the absence of security | |||
| (<xref target="RFC6105"/>, <xref target="RFC7113"/>) or DHCP Shield | measures like RA-Guard (<xref target="RFC6105" format="default"/>, <xref | |||
| <xref target="RFC7610"/>, an attacker could inject, modify, or block DHCP | target="RFC7113" format="default"/>) or DHCPv6-Shield <xref | |||
| messages or RAs.</t> | target="RFC7610" format="default"/>, an attacker could inject, modify, | |||
| or block DHCP messages or RAs.</t> | ||||
| <t>An attacker with the ability to inject DHCP messages or RAs | <t>An attacker with the ability to inject DHCP messages or RAs | |||
| could include an option from this document to force users to contact | could include an option from this document to force users to contact | |||
| an address of his choosing. As an attacker with this capability could | an address of the attacker's choosing. An attacker with this capability co uld | |||
| simply list themselves as the default gateway (and so intercept all the | simply list themselves as the default gateway (and so intercept all the | |||
| victim's traffic); this does not provide them with significantly more | victim's traffic); this does not provide them with significantly more | |||
| capabilities, but because this document removes the need for | capabilities, but because this document removes the need for | |||
| interception, the attacker may have an easier time performing the | interception, the attacker may have an easier time performing the | |||
| attack.</t> | attack.</t> | |||
| <t>However, as the operating systems and application(s) that make use of | <t>However, as the operating systems and application(s) that make use of | |||
| this information know that they are connecting to a captive portal device | this information know that they are connecting to a captive portal | |||
| (as opposed to intercepted connections where the OS/application may not | device (as opposed to intercepted connections where the OS/application | |||
| know that they are connecting to a captive portal or hostile device) | may not know that they are connecting to a captive portal or hostile | |||
| they can render the page in a | device), they can render the page in a sandboxed environment and take | |||
| sandboxed environment and take other precautions, such as clearly | other precautions such as clearly labeling the page as untrusted. The | |||
| labeling the page as untrusted. The means of sandboxing and user | means of sandboxing and a user interface presenting this information is | |||
| interface presenting this information is not covered in this document - | not covered in this document; by its nature, it is implementation | |||
| by its nature it is implementation specific and best left to the | specific and best left to the application and user interface | |||
| application and user interface designers.</t> | designers.</t> | |||
| <t>Devices and systems that automatically connect to an open network | <t>Devices and systems that automatically connect to an open network | |||
| could potentially be tracked using the techniques described in this | could potentially be tracked using the techniques described in this | |||
| document (forcing the user to continually re-satisfy the Captive Portal | document (forcing the user to continually resatisfy the Captive Portal | |||
| conditions, or exposing their browser fingerprint). However, | conditions or exposing their browser fingerprint). However, | |||
| similar tracking can already be performed with the presently common | similar tracking can already be performed with the presently common | |||
| captive portal mechanisms, so this technique does not give the attackers | captive portal mechanisms, so this technique does not give the attackers | |||
| more capabilities.</t> | more capabilities.</t> | |||
| <t>Captive portals are increasingly hijacking TLS connections to force | <t>Captive portals are increasingly hijacking TLS connections to force | |||
| browsers to talk to the portal. Providing the portal's URI via a DHCP or | browsers to talk to the portal. Providing the portal's URI via a DHCP or | |||
| RA option is a cleaner technique, and reduces user expectations of being | RA option is a cleaner technique, and reduces user expectations of being | |||
| hijacked - this may improve security by making users more reluctant to | hijacked; this may improve security by making users more reluctant to | |||
| accept TLS hijacking, which can be performed from beyond the network | accept TLS hijacking, which can be performed from beyond the network | |||
| associated with the captive portal.</t> | associated with the captive portal.</t> | |||
| </section> | </section> | |||
| <section title="Acknowledgements"> | ||||
| <t>This document is a -bis of RFC7710. Thanks to all of the original | ||||
| authors (Warren Kumari, Olafur Gudmundsson, Paul Ebersman, Steve Sheng), | ||||
| and original contributors.</t> | ||||
| <t>Also thanks to the CAPPORT WG for all of the discussion and | ||||
| improvements including contributions and review from Joe Clarke, | ||||
| Lorenzo Colitti, Dave Dolson, Hans Kuhn, Kyle Larose, Clemens Schimpe, | ||||
| Martin Thomson, Michael Richardson, | ||||
| Remi Nguyen Van, Subash Tirupachur Comerica, Bernie Volz, | ||||
| and Tommy Pauly.</t> | ||||
| </section> | ||||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | <references> | |||
| <?rfc include='reference.RFC.2131'?> | <name>References</name> | |||
| <references> | ||||
| <?rfc include='reference.RFC.2132'?> | <name>Normative References</name> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| <?rfc include='reference.RFC.2119'?> | FC.2131.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| <?rfc include='reference.RFC.3553'?> | FC.2132.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| <?rfc include='reference.RFC.3986'?> | FC.2119.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| <?rfc include='reference.RFC.4861'?> | FC.3553.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| <?rfc include='reference.RFC.7227'?> | FC.3986.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| <?rfc include='reference.RFC.7231'?> | FC.4861.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| <?rfc include='reference.RFC.7234'?> | FC.7227.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| <?rfc include='reference.RFC.8174'?> | FC.7231.xml"/> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7234.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8415.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.3679.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.3779.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.6105.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7113.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7610.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7710.xml"/> | ||||
| <?rfc include='reference.RFC.8415'?> | <reference anchor="RFC8908" target="https://www.rfc-editor.org/info/rfc8908"> | |||
| </references> | <front> | |||
| <title>Captive Portal API</title> | ||||
| <author initials="T" surname="Pauly" fullname="Tommy Pauly" role="editor" | ||||
| > | ||||
| <organization /> | ||||
| </author> | ||||
| <author initials="D" surname="Thakore" fullname="Darshak Thakore" role="e | ||||
| ditor"> | ||||
| <organization /> | ||||
| </author> | ||||
| <date month="September" year="2020" /> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8908" /> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8908"/> | ||||
| </reference> | ||||
| <references title="Informative References"> | </references> | |||
| <?rfc include='reference.RFC.3679'?> | ||||
| <?rfc include='reference.RFC.3779'?> | ||||
| <?rfc include='reference.RFC.6105'?> | ||||
| <?rfc include='reference.RFC.7113'?> | ||||
| <?rfc include='reference.RFC.7610'?> | ||||
| <?rfc include='reference.RFC.7710'?> | ||||
| </references> | </references> | |||
| <section title="Changes / Author Notes."> | <section anchor="diff7710" numbered="true" toc="default"> | |||
| <t>[RFC Editor: Please remove this section before publication ]</t> | <name>Changes from RFC 7710</name> | |||
| <t>This document incorporates the following changes from <xref target="RFC | ||||
| <t>From initial to -00.</t> | 7710" format="default"/>.</t> | |||
| <ol spacing="normal" type="1"> | ||||
| <t><list style="symbols"> | <li>Clarified that IP string literals are <bcp14>NOT RECOMMENDED</bcp14> | |||
| <t>Import of RFC7710.</t> | .</li> | |||
| </list></t> | <li>Clarified that the option URI <bcp14>MUST</bcp14> be that of the cap | |||
| tive portal | ||||
| <t>From -00 to -01.</t> | API endpoint.</li> | |||
| <li>Clarified that captive portals <bcp14>MAY</bcp14> do content negotia | ||||
| <t><list style="symbols"> | tion.</li> | |||
| <t>Remove link-relation text.</t> | <li>Added text about Captive Portal API URI precedence in the event | |||
| <t>Clarify option should be in DHCPREQUEST parameter list.</t> | of a network configuration error.</li> | |||
| <t>Uppercase some SHOULDs.</t> | <li>Added urn:ietf:params:capport:unrestricted URN.</li> | |||
| </list></t> | <li>Noted that the DHCPv4 Option Code changed from 160 to 114.</li> | |||
| </ol> | ||||
| </section> | </section> | |||
| <section anchor="exp106" numbered="true" toc="default"> | ||||
| <name>Observations from IETF 106 Network Experiment</name> | ||||
| <section anchor="diff7710" title="Changes from RFC 7710"> | <t>During IETF 106 in Singapore, an <eref | |||
| <t>This document incorporates the following changes from <xref | target="https://tickets.meeting.ietf.org/wiki/IETF106network#Experiments"> | |||
| target="RFC7710"/>.</t> | experiment</eref> | |||
| enabling clients compatible with the Captive Portal API to discover a | ||||
| <t><list style="numbers"> | venue-info-url (see <eref | |||
| <t>Clarify that IP string literals are NOT RECOMMENDED.</t> | target="https://tickets.meeting.ietf.org/wiki/CAPPORT"> experiment | |||
| description</eref> for more detail) revealed that some Polycom devices | ||||
| <t>Clarify that the option URI MUST be that of the captive portal | on the same network made use of DHCPv4 option code 160 for <eref | |||
| API endpoint.</t> | target="https://community.polycom.com/t5/VoIP-SIP-Phones/DHCP-Standardizat | |||
| ion-160-vs-66/td-p/72577">other | ||||
| <t>Clarify that captive portals MAY do content negotiation.</t> | purposes</eref>.</t> | |||
| <t>The presence of DHCPv4 Option code 160 holding a value indicating the | ||||
| <t>Added text about Captive Portal API URI precedence in the event | Captive Portal API URL caused these devices to not function as desired. | |||
| of a network configuration error.</t> | For this reason, IANA has deprecated option code 160 and | |||
| allocated a different value to be used for the Captive Portal API URL.</t> | ||||
| <t>Added urn:ietf:params:capport:unrestricted URN.</t> | ||||
| <t>Notes that the DHCPv4 Option Code changed from 160 to 114.</t> | ||||
| </list></t> | ||||
| </section> | </section> | |||
| <section anchor="exp106" | <section numbered="false" toc="default"> | |||
| title="Observations From IETF 106 Network Experiment"> | <name>Acknowledgements</name> | |||
| <t>During IETF 106 in Singapore an <eref | ||||
| target="https://tickets.meeting.ietf.org/wiki/IETF106network#Experiments | ||||
| " | ||||
| >experiment</eref> enabling Captive Portal API compatible clients to | ||||
| discover a venue-info-url (see <eref | ||||
| target="https://tickets.meeting.ietf.org/wiki/CAPPORT"> | ||||
| experiment description</eref> for more detail) revealed that some | ||||
| Polycom devices on the same network made use of DHCPv4 option code 160 | ||||
| for <eref | ||||
| target="https://community.polycom.com/t5/VoIP-SIP-Phones/DHCP-Standardiz | ||||
| ation-160-vs-66/td-p/72577" | ||||
| >other purposes</eref>.</t> | ||||
| <t>The presence of DHCPv4 Option code 160 holding a value indicating the | <t>This document is a -bis of RFC 7710. Thanks to all of the original | |||
| Captive Portal API URL caused these devices to not function as desired. | authors (<contact fullname="Warren Kumari"/>, <contact fullname="Olafur | |||
| For this reason, this document requests IANA deprecate option code 160 and | Gudmundsson"/>, <contact fullname="Paul Ebersman"/>, and <contact fullname | |||
| reallocate different value to be used for the Captive Portal API URL.</t> | ="Steve Sheng"/>) | |||
| and original contributors.</t> | ||||
| <t>Also thanks to the CAPPORT WG for all of the discussion and | ||||
| improvements, including contributions and review from <contact fullname="J | ||||
| oe Clarke"/>, | ||||
| <contact fullname="Lorenzo Colitti"/>, <contact fullname="Dave | ||||
| Dolson"/>, <contact fullname="Hans Kuhn"/>, <contact fullname="Kyle | ||||
| Larose"/>, <contact fullname="Clemens Schimpe"/>, | ||||
| <contact fullname="Martin Thomson"/>, <contact fullname="Michael Richardso | ||||
| n"/>, | ||||
| <contact fullname="Remi Nguyen Van"/>, <contact fullname="Subash | ||||
| Tirupachur Comerica"/>, <contact fullname="Bernie Volz"/>, | ||||
| and <contact fullname="Tommy Pauly"/>.</t> | ||||
| </section> | </section> | |||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 95 change blocks. | ||||
| 347 lines changed or deleted | 402 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||