draft-ietf-core-resource-directory-07.txt | draft-ietf-core-resource-directory-08.txt | |||
---|---|---|---|---|
CoRE Z. Shelby | CoRE Z. Shelby | |||
Internet-Draft ARM | Internet-Draft ARM | |||
Intended status: Standards Track M. Koster | Intended status: Standards Track M. Koster | |||
Expires: September 22, 2016 SmartThings | Expires: January 8, 2017 SmartThings | |||
C. Bormann | C. Bormann | |||
Universitaet Bremen TZI | Universitaet Bremen TZI | |||
P. van der Stok | P. van der Stok | |||
consultant | consultant | |||
March 21, 2016 | July 07, 2016 | |||
CoRE Resource Directory | CoRE Resource Directory | |||
draft-ietf-core-resource-directory-07 | draft-ietf-core-resource-directory-08 | |||
Abstract | Abstract | |||
In many M2M applications, direct discovery of resources is not | In many M2M applications, direct discovery of resources is not | |||
practical due to sleeping nodes, disperse networks, or networks where | practical due to sleeping nodes, disperse networks, or networks where | |||
multicast traffic is inefficient. These problems can be solved by | multicast traffic is inefficient. These problems can be solved by | |||
employing an entity called a Resource Directory (RD), which hosts | employing an entity called a Resource Directory (RD), which hosts | |||
descriptions of resources held on other servers, allowing lookups to | descriptions of resources held on other servers, allowing lookups to | |||
be performed for those resources. This document specifies the web | be performed for those resources. This document specifies the web | |||
interfaces that a Resource Directory supports in order for web | interfaces that a Resource Directory supports in order for web | |||
skipping to change at page 1, line 44 ¶ | skipping to change at page 1, line 44 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on September 22, 2016. | This Internet-Draft will expire on January 8, 2017. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 28 ¶ | skipping to change at page 2, line 28 ¶ | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Architecture and Use Cases . . . . . . . . . . . . . . . . . 5 | 3. Architecture and Use Cases . . . . . . . . . . . . . . . . . 5 | |||
3.1. Use Case: Cellular M2M . . . . . . . . . . . . . . . . . 6 | 3.1. Use Case: Cellular M2M . . . . . . . . . . . . . . . . . 6 | |||
3.2. Use Case: Home and Building Automation . . . . . . . . . 7 | 3.2. Use Case: Home and Building Automation . . . . . . . . . 7 | |||
3.3. Use Case: Link Catalogues . . . . . . . . . . . . . . . . 7 | 3.3. Use Case: Link Catalogues . . . . . . . . . . . . . . . . 7 | |||
4. Simple Directory Discovery . . . . . . . . . . . . . . . . . 8 | 4. Finding a Directory Server . . . . . . . . . . . . . . . . . 8 | |||
4.1. Finding a Directory Server . . . . . . . . . . . . . . . 9 | 4.1. Resource Directory Address Option (RDAO) . . . . . . . . 9 | |||
4.2. Third-party registration . . . . . . . . . . . . . . . . 10 | 5. Simple Registration . . . . . . . . . . . . . . . . . . . . . 10 | |||
5. Resource Directory Function Set . . . . . . . . . . . . . . . 10 | 5.1. Simple publishing to Resource Directory Server . . . . . 11 | |||
5.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 10 | 5.2. Third-party registration . . . . . . . . . . . . . . . . 12 | |||
5.2. Registration . . . . . . . . . . . . . . . . . . . . . . 12 | 6. Resource Directory Function Set . . . . . . . . . . . . . . . 12 | |||
5.3. Update . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 6.1. Content Formats . . . . . . . . . . . . . . . . . . . . . 13 | |||
5.4. Removal . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 6.2. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
5.5. Read Endpoint Links . . . . . . . . . . . . . . . . . . . 18 | 6.3. Registration . . . . . . . . . . . . . . . . . . . . . . 15 | |||
5.6. Update Endpoint Links . . . . . . . . . . . . . . . . . . 19 | 6.4. Registration Update . . . . . . . . . . . . . . . . . . . 18 | |||
6. Group Function Set . . . . . . . . . . . . . . . . . . . . . 22 | 6.5. Registration Removal . . . . . . . . . . . . . . . . . . 20 | |||
6.1. Register a Group . . . . . . . . . . . . . . . . . . . . 22 | 6.6. Read Endpoint Links . . . . . . . . . . . . . . . . . . . 21 | |||
6.2. Group Removal . . . . . . . . . . . . . . . . . . . . . . 24 | 6.7. Update Endpoint Links . . . . . . . . . . . . . . . . . . 22 | |||
7. RD Lookup Function Set . . . . . . . . . . . . . . . . . . . 25 | 7. Group Function Set . . . . . . . . . . . . . . . . . . . . . 24 | |||
8. New Link-Format Attributes . . . . . . . . . . . . . . . . . 29 | 7.1. Register a Group . . . . . . . . . . . . . . . . . . . . 24 | |||
8.1. Resource Instance attribute 'ins' . . . . . . . . . . . . 30 | 7.2. Group Removal . . . . . . . . . . . . . . . . . . . . . . 26 | |||
8.2. Export attribute 'exp' . . . . . . . . . . . . . . . . . 30 | 8. RD Lookup Function Set . . . . . . . . . . . . . . . . . . . 27 | |||
9. DNS-SD Mapping . . . . . . . . . . . . . . . . . . . . . . . 30 | 9. New Link-Format Attributes . . . . . . . . . . . . . . . . . 32 | |||
9.1. DNS-based Service discovery . . . . . . . . . . . . . . . 31 | 9.1. Resource Instance attribute 'ins' . . . . . . . . . . . . 32 | |||
9.2. mapping ins to <Instance> . . . . . . . . . . . . . . . . 32 | 9.2. Export attribute 'exp' . . . . . . . . . . . . . . . . . 33 | |||
9.3. Mapping rt to <ServiceType> . . . . . . . . . . . . . . . 32 | 10. DNS-SD Mapping . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
9.4. Domain mapping . . . . . . . . . . . . . . . . . . . . . 33 | 10.1. DNS-based Service discovery . . . . . . . . . . . . . . 33 | |||
9.5. TXT Record key=value strings . . . . . . . . . . . . . . 33 | 10.2. mapping ins to <Instance> . . . . . . . . . . . . . . . 34 | |||
9.6. Importing resource links into DNS-SD . . . . . . . . . . 33 | 10.3. Mapping rt to <ServiceType> . . . . . . . . . . . . . . 35 | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 34 | 10.4. Domain mapping . . . . . . . . . . . . . . . . . . . . . 35 | |||
10.1. Endpoint Identification and Authentication . . . . . . . 34 | 10.5. TXT Record key=value strings . . . . . . . . . . . . . . 35 | |||
10.2. Access Control . . . . . . . . . . . . . . . . . . . . . 35 | 10.6. Importing resource links into DNS-SD . . . . . . . . . . 36 | |||
10.3. Denial of Service Attacks . . . . . . . . . . . . . . . 35 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 36 | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 35 | 11.1. Endpoint Identification and Authentication . . . . . . . 37 | |||
11.1. Resource Types . . . . . . . . . . . . . . . . . . . . . 35 | 11.2. Access Control . . . . . . . . . . . . . . . . . . . . . 37 | |||
11.2. Link Extension . . . . . . . . . . . . . . . . . . . . . 36 | 11.3. Denial of Service Attacks . . . . . . . . . . . . . . . 37 | |||
11.3. RD Parameter Registry . . . . . . . . . . . . . . . . . 36 | 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38 | |||
12. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 37 | 12.1. Resource Types . . . . . . . . . . . . . . . . . . . . . 38 | |||
12.1. Lighting Installation . . . . . . . . . . . . . . . . . 37 | 12.2. Link Extension . . . . . . . . . . . . . . . . . . . . . 38 | |||
12.1.1. Installation Characteristics . . . . . . . . . . . . 37 | 12.3. IPv6 ND Resource Directory Address Option . . . . . . . 38 | |||
12.1.2. RD entries . . . . . . . . . . . . . . . . . . . . . 38 | 12.4. RD Parameter Registry . . . . . . . . . . . . . . . . . 38 | |||
12.1.3. DNS entries . . . . . . . . . . . . . . . . . . . . 42 | 13. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
12.1.4. RD Operation . . . . . . . . . . . . . . . . . . . . 45 | 13.1. Lighting Installation . . . . . . . . . . . . . . . . . 39 | |||
12.2. OMA Lightweight M2M (LWM2M) Example . . . . . . . . . . 45 | 13.1.1. Installation Characteristics . . . . . . . . . . . . 40 | |||
12.2.1. The LWM2M Object Model . . . . . . . . . . . . . . . 46 | 13.1.2. RD entries . . . . . . . . . . . . . . . . . . . . . 41 | |||
12.2.2. LWM2M Register Endpoint . . . . . . . . . . . . . . 47 | 13.1.3. DNS entries . . . . . . . . . . . . . . . . . . . . 44 | |||
12.2.3. Alternate Base URI . . . . . . . . . . . . . . . . . 48 | 13.2. OMA Lightweight M2M (LWM2M) Example . . . . . . . . . . 44 | |||
12.2.4. LWM2M Update Endpoint Registration . . . . . . . . . 49 | 13.2.1. The LWM2M Object Model . . . . . . . . . . . . . . . 45 | |||
12.2.5. LWM2M De-Register Endpoint . . . . . . . . . . . . . 49 | 13.2.2. LWM2M Register Endpoint . . . . . . . . . . . . . . 46 | |||
13. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 49 | 13.2.3. Alternate Base URI . . . . . . . . . . . . . . . . . 48 | |||
14. Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . 49 | 13.2.4. LWM2M Update Endpoint Registration . . . . . . . . . 48 | |||
15. References . . . . . . . . . . . . . . . . . . . . . . . . . 52 | 13.2.5. LWM2M De-Register Endpoint . . . . . . . . . . . . . 48 | |||
15.1. Normative References . . . . . . . . . . . . . . . . . . 52 | 14. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 48 | |||
15.2. Informative References . . . . . . . . . . . . . . . . . 53 | 15. Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . 49 | |||
16. References . . . . . . . . . . . . . . . . . . . . . . . . . 52 | ||||
16.1. Normative References . . . . . . . . . . . . . . . . . . 52 | ||||
16.2. Informative References . . . . . . . . . . . . . . . . . 53 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 54 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 54 | |||
1. Introduction | 1. Introduction | |||
The work on Constrained RESTful Environments (CoRE) aims at realizing | The work on Constrained RESTful Environments (CoRE) aims at realizing | |||
the REST architecture in a suitable form for the most constrained | the REST architecture in a suitable form for the most constrained | |||
nodes (e.g., 8-bit microcontrollers with limited RAM and ROM) and | nodes (e.g., 8-bit microcontrollers with limited RAM and ROM) and | |||
networks (e.g. 6LoWPAN). CoRE is aimed at machine-to-machine (M2M) | networks (e.g. 6LoWPAN). CoRE is aimed at machine-to-machine (M2M) | |||
applications such as smart energy and building automation. | applications such as smart energy and building automation. | |||
skipping to change at page 5, line 8 ¶ | skipping to change at page 5, line 11 ¶ | |||
All groups within a domain are unique. | All groups within a domain are unique. | |||
Endpoint | Endpoint | |||
Endpoint (EP) is a term used to describe a web server or client in | Endpoint (EP) is a term used to describe a web server or client in | |||
[RFC7252]. In the context of this specification an endpoint is | [RFC7252]. In the context of this specification an endpoint is | |||
used to describe a web server that registers resources to the | used to describe a web server that registers resources to the | |||
Resource Directory. An endpoint is identified by its endpoint | Resource Directory. An endpoint is identified by its endpoint | |||
name, which is included during registration, and is unique within | name, which is included during registration, and is unique within | |||
the associated domain of the registration. | the associated domain of the registration. | |||
Commissioning Tool Commissioning Tool (CT) is a device that assists | ||||
during the installation of the network by assigning values to | ||||
parameters, naming endpoints and groups, or adapting the | ||||
installation to the needs of the applications. | ||||
3. Architecture and Use Cases | 3. Architecture and Use Cases | |||
The resource directory architecture is illustrated in Figure 1. A | The resource directory architecture is illustrated in Figure 1. A | |||
Resource Directory (RD) is used as a repository for Web Links | Resource Directory (RD) is used as a repository for Web Links | |||
[RFC5988] about resources hosted on other web servers, which are | [RFC5988] about resources hosted on other web servers, which are | |||
called endpoints (EP). An endpoint is a web server associated with a | called endpoints (EP). An endpoint is a web server associated with a | |||
scheme, IP address and port (called Context), thus a physical node | scheme, IP address and port (called Context), thus a physical node | |||
may host one or more endpoints. The RD implements a set of REST | may host one or more endpoints. The RD implements a set of REST | |||
interfaces for endpoints to register and maintain sets of Web Links | interfaces for endpoints to register and maintain sets of Web Links | |||
(called resource directory entries), and for clients to lookup | (called resource directory entries), and for clients to lookup | |||
resources from the RD or maintain groups. Endpoints themselves can | resources from the RD or maintain groups. Endpoints themselves can | |||
also act as clients. An RD can be logically segmented by the use of | also act as clients. An RD can be logically segmented by the use of | |||
Domains. The domain an endpoint is associated with can be defined by | Domains. The domain an endpoint is associated with can be defined by | |||
the RD or configured by an outside entity. This information | the RD or configured by an outside entity. This information | |||
hierarchy is shown in Figure 2. | hierarchy is shown in Figure 2. | |||
Endpoints are assumed to proactively register and maintain resource | Endpoints are assumed to proactively register and maintain resource | |||
directory entries on the RD, which are soft state and need to be | directory entries on the RD, which are soft state and need to be | |||
periodically refreshed. An endpoint is provided with interfaces to | periodically refreshed. An endpoint is provided with interfaces to | |||
register, update and remove a resource directory entry. Furthermore, | register, update and remove a resource directory entry. Furthermore, | |||
a mechanism to discover an RD using the CoRE Link Format is defined. | a mechanism to discover an RD using the CoRE Link Format [RFC6690] is | |||
It is also possible for an RD to proactively discover Web Links from | defined. It is also possible for an RD to proactively discover Web | |||
endpoints and add them as resource directory entries. A lookup | Links from endpoints and add them as resource directory entries. A | |||
interface for discovering any of the Web Links held in the RD is | lookup interface for discovering any of the Web Links held in the RD | |||
provided using the CoRE Link Format. | is provided using the CoRE Link Format. | |||
Registration Lookup, Group | Registration Lookup, Group | |||
Interface Interfaces | Interface Interfaces | |||
+----+ | | | +----+ | | | |||
| EP |---- | | | | EP |---- | | | |||
+----+ ---- | | | +----+ ---- | | | |||
--|- +------+ | | --|- +------+ | | |||
+----+ | ----| | | +--------+ | +----+ | ----| | | +--------+ | |||
| EP | ---------|-----| RD |----|-----| Client | | | EP | ---------|-----| RD |----|-----| Client | | |||
+----+ | ----| | | +--------+ | +----+ | ----| | | +--------+ | |||
skipping to change at page 6, line 10 ¶ | skipping to change at page 6, line 26 ¶ | |||
| EP |---- | | | | EP |---- | | | |||
+----+ | +----+ | |||
Figure 1: The resource directory architecture. | Figure 1: The resource directory architecture. | |||
+------------+ | +------------+ | |||
| Domain | <-- Name | | Domain | <-- Name | |||
+------------+ | +------------+ | |||
| | | | | | |||
| +------------+ | | +------------+ | |||
| | Group | <-- Name, IP | | | Group | <-- Name, Scheme, IP, Port | |||
| +------------+ | | +------------+ | |||
| | | | | | |||
+------------+ | +------------+ | |||
| Endpoint | <-- Name, Scheme, IP, Port | | Endpoint | <-- Name, Scheme, IP, Port | |||
+------------+ | +------------+ | |||
| | | | |||
| | | | |||
+------------+ | +------------+ | |||
| Resource | <-- Target, Parameters | | Resource | <-- Target, Parameters | |||
+------------+ | +------------+ | |||
skipping to change at page 7, line 4 ¶ | skipping to change at page 7, line 21 ¶ | |||
Directory (for example EPs installed on vehicles enabling tracking of | Directory (for example EPs installed on vehicles enabling tracking of | |||
their position for fleet management purposes and monitoring | their position for fleet management purposes and monitoring | |||
environment parameters) hosted by the mobile operator or somewhere | environment parameters) hosted by the mobile operator or somewhere | |||
else in the network, periodically a description of its own | else in the network, periodically a description of its own | |||
capabilities. Due to the usual network configuration of mobile | capabilities. Due to the usual network configuration of mobile | |||
networks, the EPs attached to the mobile network may not always be | networks, the EPs attached to the mobile network may not always be | |||
efficiently reachable. Therefore, a remote server is usually used to | efficiently reachable. Therefore, a remote server is usually used to | |||
provide proxy access to the EPs. The address of each (proxy) | provide proxy access to the EPs. The address of each (proxy) | |||
endpoint on this server is included in the resource description | endpoint on this server is included in the resource description | |||
stored in the RD. The users, for example mobile applications for | stored in the RD. The users, for example mobile applications for | |||
environment monitoring, contact the RD, look-up the endpoints capable | environment monitoring, contact the RD, look up the endpoints capable | |||
of providing information about the environment using appropriate set | of providing information about the environment using appropriate set | |||
of link parameters, obtain information on how to contact them (URLs | of link parameters, obtain information on how to contact them (URLs | |||
of the proxy server) and then initiate interaction to obtain | of the proxy server) and then initiate interaction to obtain | |||
information that is finally processed, displayed on the screen and | information that is finally processed, displayed on the screen and | |||
usually stored in a database. Similarly, fleet management systems | usually stored in a database. Similarly, fleet management systems | |||
provide the appropriate link parameters to the RD to look-up for EPs | provide the appropriate link parameters to the RD to look up for EPs | |||
deployed on the vehicles the application is responsible for. | deployed on the vehicles the application is responsible for. | |||
3.2. Use Case: Home and Building Automation | 3.2. Use Case: Home and Building Automation | |||
Home and commercial building automation systems can benefit from the | Home and commercial building automation systems can benefit from the | |||
use of M2M web services. The discovery requirements of these | use of M2M web services. The discovery requirements of these | |||
applications are demanding. Home automation usually relies on run- | applications are demanding. Home automation usually relies on run- | |||
time discovery to commission the system, whereas in building | time discovery to commission the system, whereas in building | |||
automation a combination of professional commissioning and run-time | automation a combination of professional commissioning and run-time | |||
discovery is used. Both home and building automation involve peer- | discovery is used. Both home and building automation involve peer- | |||
to-peer interactions between endpoints, and involve battery-powered | to-peer interactions between endpoints, and involve battery-powered | |||
sleeping devices. | sleeping devices. | |||
The exporting of resource information to other discovery systems is | The exporting of resource information to other discovery systems is | |||
also important in these automation applications. In home automation | also important in these automation applications. In home automation | |||
there is a need to interact with other consumer electronics, which | there is a need to interact with other consumer electronics, which | |||
may already support DNS-SD, and in building automation larger | may already support DNS-SD, and in building automation DNS-SD in | |||
resource directories or DNS-SD covering multiple buildings. | combination with resource directories can cover multiple buildings. | |||
3.3. Use Case: Link Catalogues | 3.3. Use Case: Link Catalogues | |||
Resources may be shared through data brokers that have no knowledge | Resources may be shared through data brokers that have no knowledge | |||
beforehand of who is going to consume the data. Resource Directory | beforehand of who is going to consume the data. Resource Directory | |||
can be used to hold links about resources and services hosted | can be used to hold links about resources and services hosted | |||
anywhere to make them discoverable by a general class of | anywhere to make them discoverable by a general class of | |||
applications. | applications. | |||
For example, environmental and weather sensors that generate data for | For example, environmental and weather sensors that generate data for | |||
skipping to change at page 8, line 18 ¶ | skipping to change at page 8, line 34 ¶ | |||
URN encoded, simple and lossless structural transforms should | URN encoded, simple and lossless structural transforms should | |||
generally be sufficient to store external metadata in Resource | generally be sufficient to store external metadata in Resource | |||
Directories. | Directories. | |||
The additional features of Resource Directory allow domains to be | The additional features of Resource Directory allow domains to be | |||
defined to enable access to a particular set of resources from | defined to enable access to a particular set of resources from | |||
particular applications. This provides isolation and protection of | particular applications. This provides isolation and protection of | |||
sensitive data when needed. Resource groups may defined to allow | sensitive data when needed. Resource groups may defined to allow | |||
batched reads from multiple resources. | batched reads from multiple resources. | |||
4. Simple Directory Discovery | 4. Finding a Directory Server | |||
Not all endpoints hosting resources are expected to know how to | ||||
implement the Resource Directory Function Set (see Section 5) and | ||||
thus explicitly register with a Resource Directory (or other such | ||||
directory server). Instead, simple endpoints can implement the | ||||
generic Simple Directory Discovery approach described in this | ||||
section. An RD implementing this specification MUST implement Simple | ||||
Directory Discovery. However, there may be security reasons why this | ||||
form of directory discovery would be disabled. | ||||
This approach requires that the endpoint makes available the hosted | ||||
resources that it wants to be discovered, as links on its "/.well- | ||||
known/core" interface as specified in [RFC6690]. | ||||
The endpoint then finds one or more IP addresses of the directory | ||||
server it wants to know about its resources as described in | ||||
Section 4.1. | ||||
An endpoint that wants to make itself discoverable occasionally sends | ||||
a POST request to the "/.well-known/core" URI of any candidate | ||||
directory server that it finds. The body of the POST request is | ||||
either | ||||
o empty, in which case the directory server is encouraged by this | ||||
POST request to perform GET requests at the requesting server's | ||||
default discovery URI. | ||||
or | ||||
o a non-empty link-format document, which indicates the specific | ||||
services that the requesting server wants to make known to the | ||||
directory server. | ||||
The directory server integrates the information it received this way | ||||
into its resource directory. It MAY make the information available | ||||
to further directories, if it can ensure that a loop does not form. | ||||
The protocol used between directories to ensure loop-free operation | ||||
is outside the scope of this document. | ||||
The following example shows an endpoint using simple resource | ||||
discovery, by simply sending a POST with its links in the body to a | ||||
directory. | ||||
EP RD | ||||
| | | ||||
| -- POST /.well-known/core "</sen/temp>..." ---> | | ||||
| | | ||||
| | | ||||
| <---- 2.01 Created ------------------------- | | ||||
| | | ||||
4.1. Finding a Directory Server | ||||
Endpoints that want to contact a directory server can obtain | Endpoints that want to contact a directory server can obtain | |||
candidate IP addresses for such servers in a number of ways. | candidate IP addresses for such servers in a number of ways. | |||
In a 6LoWPAN, good candidates can be taken from: | In a 6LoWPAN, good candidates can be taken from: | |||
o specific static configuration (e.g., anycast addresses), if any, | o specific static configuration (e.g., anycast addresses), if any, | |||
o the ABRO option of 6LoWPAN-ND [RFC6775], | o the ABRO option of 6LoWPAN-ND [RFC6775], | |||
o other ND options that happen to point to servers (such as RDNSS), | o other ND options that happen to point to servers (such as RDNSS), | |||
o DHCPv6 options that might be defined later. | o DHCPv6 options that might be defined later. | |||
o The IPv6 Neighbor Discovery Resource Directory Address Option | ||||
described in Section 4.1 | ||||
In networks with more inexpensive use of multicast, the candidate IP | In networks with more inexpensive use of multicast, the candidate IP | |||
address may be a well-known multicast address, i.e. directory servers | address may be a well-known multicast address, i.e. directory servers | |||
are found by simply sending GET requests to that well-known multicast | are found by simply sending GET requests to that well-known multicast | |||
address (see Section 5.1). | address (see Section 6.2). | |||
As some of these sources are just (more or less educated) guesses, | As some of these sources are just (more or less educated) guesses, | |||
endpoints MUST make use of any error messages to very strictly rate- | endpoints MUST make use of any error messages to very strictly rate- | |||
limit requests to candidate IP addresses that don't work out. For | limit requests to candidate IP addresses that don't work out. For | |||
example, an ICMP Destination Unreachable message (and, in particular, | example, an ICMP Destination Unreachable message (and, in particular, | |||
the port unreachable code for this message) may indicate the lack of | the port unreachable code for this message) may indicate the lack of | |||
a CoAP server on the candidate host, or a CoAP error response code | a CoAP server on the candidate host, or a CoAP error response code | |||
such as 4.05 "Method Not Allowed" may indicate unwillingness of a | such as 4.05 "Method Not Allowed" may indicate unwillingness of a | |||
CoAP server to act as a directory server. | CoAP server to act as a directory server. | |||
4.2. Third-party registration | 4.1. Resource Directory Address Option (RDAO) | |||
The Resource Directory Option (RDAO) using IPv6 neighbor Discovery | ||||
(ND) carries information about the address of the Resource Directory | ||||
(RD). This information is needed when endpoints cannot discover the | ||||
Resource Directory with link-local multicast address because the | ||||
endpoint and the RD are separated by a border Router (6LBR). In many | ||||
circumstances the availability of DHCP cannot be guaranteed either | ||||
during commissioning of the network. The presence and the use of the | ||||
RD is essential during commissioning. | ||||
The RDAO format is: | ||||
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 = 3 | Valid Lifetime | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Reserved | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | | ||||
+ + | ||||
| | | ||||
+ RD Address + | ||||
| | | ||||
+ + | ||||
| | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
Fields: | ||||
Type: 38 | ||||
Length: 8-bit unsigned integer. The length of | ||||
the option in units of 8 bytes. | ||||
Always 3. | ||||
Valid Lifetime: 16-bit unsigned integer. The length of | ||||
time in units of 60 seconds (relative to | ||||
the time the packet is received) that | ||||
this set of border router information is | ||||
valid. A value of all zero bits (0x0) | ||||
assumes a default value of 10,000 | ||||
(~one week). | ||||
Reserved: This field is unused. It MUST be | ||||
initialized to zero by the sender and | ||||
MUST be ignored by the receiver. | ||||
RD Address: IPv6 address of the RD. | ||||
Figure 3: Resource Directory Address Option | ||||
5. Simple Registration | ||||
Not all endpoints hosting resources are expected to know how to | ||||
implement the Resource Directory Function Set (see Section 6) hence | ||||
cannot register with a Resource Directory. Instead, simple endpoints | ||||
can implement the generic Simple Directory Discovery approach | ||||
described in this section. An RD implementing this specification | ||||
MUST implement Simple Directory Discovery. However, there may be | ||||
security reasons why this form of directory discovery would be | ||||
disabled. | ||||
This approach requires that the endpoint makes available the hosted | ||||
resources that it wants to be discovered, as links on its "/.well- | ||||
known/core" interface as specified in [RFC6690]. | ||||
The endpoint then finds one or more addresses of the directory server | ||||
as described in Section 4. | ||||
An endpoint can send (a selection of) hosted resources to a directory | ||||
server for publication as described in Section 5.1. | ||||
The directory server integrates the information it received this way | ||||
into its resource directory. It MAY make the information available | ||||
to further directories, if it can ensure that a loop does not form. | ||||
The protocol used between directories to ensure loop-free operation | ||||
is outside the scope of this document. | ||||
5.1. Simple publishing to Resource Directory Server | ||||
An endpoint that wants to make itself discoverable occasionally sends | ||||
a POST request to the "/.well-known/core" URI of any candidate | ||||
directory server that it finds. The body of the POST request is | ||||
empty, which triggers the resource directory server to perform GET | ||||
requests at the requesting server's default discovery URI to obtain | ||||
the link-format payload to register. | ||||
The endpoint MAY include registration parameters in the POST request | ||||
as per Section 6.3 | ||||
The following example shows an endpoint using simple publishing, by | ||||
simply sending an empty POST to a resource directory. | ||||
Req:(to RD server from [ff02::1]) | ||||
POST coap://rd.example.com/.well-known/core?lt=6000 | ||||
Content-Format: 40 | ||||
payload: | ||||
(empty payload) | ||||
Res: 2.04 Changed | ||||
(later) | ||||
Req: (from RD server to [ff02::1]) | ||||
GET coap://[ff02::1]/.well-known/core | ||||
Accept: 40 | ||||
Res: 2.05 Content | ||||
payload: | ||||
</sen/temp> | ||||
5.2. Third-party registration | ||||
For some applications, even Simple Directory Discovery may be too | For some applications, even Simple Directory Discovery may be too | |||
taxing for certain very constrained devices, in particular if the | taxing for certain very constrained devices, in particular if the | |||
security requirements become too onerous. | security requirements become too onerous. | |||
In a controlled environment (e.g. building control), the Resource | In a controlled environment (e.g. building control), the Resource | |||
Directory can be filled by a third device, called an installation | Directory can be filled by a third device, called a commissioning | |||
tool. The installation tool can fill the Resource Directory from a | tool. The commissioning tool can fill the Resource Directory from a | |||
database or other means. For that purpose the scheme, IP address and | database or other means. For that purpose the scheme, IP address and | |||
port of the registered device is indicated in the Context parameter | port of the registered device is indicated in the Context parameter | |||
of the registration as well. | of the registration described in Section 6.3. | |||
5. Resource Directory Function Set | 6. Resource Directory Function Set | |||
This section defines the REST interfaces between an RD and endpoints, | This section defines the REST interfaces between an RD and endpoints, | |||
which is called the Resource Directory Function Set. Although the | which is called the Resource Directory Function Set. Although the | |||
examples throughout this section assume the use of CoAP [RFC7252], | examples throughout this section assume the use of CoAP [RFC7252], | |||
these REST interfaces can also be realized using HTTP [RFC7230]. In | these REST interfaces can also be realized using HTTP [RFC7230]. In | |||
all definitions in this section, both CoAP response codes (with dot | all definitions in this section, both CoAP response codes (with dot | |||
notation) and HTTP response codes (without dot notation) are shown. | notation) and HTTP response codes (without dot notation) are shown. | |||
An RD implementing this specification MUST support the discovery, | An RD implementing this specification MUST support the discovery, | |||
registration, update, lookup, and removal interfaces defined in this | registration, update, lookup, and removal interfaces defined in this | |||
section. | section. | |||
Resource directory entries are designed to be easily exported to | Resource directory entries are designed to be easily exported to | |||
other discovery mechanisms such as DNS-SD. For that reason, | other discovery mechanisms such as DNS-SD. For that reason, | |||
parameters that would meaningfully be mapped to DNS SHOULD be limited | parameters that would meaningfully be mapped to DNS SHOULD be limited | |||
to a maximum length of 63 bytes. | to a maximum length of 63 bytes. | |||
5.1. Discovery | 6.1. Content Formats | |||
Resource Directory implementations using this specification MUST | ||||
support the application/link-format content format (ct=40). | ||||
Resource Directories implementing this specification MAY support | ||||
additional content formats. | ||||
Any additional content format supported by a Resource Directory | ||||
implementing this specification MUST have an equivalent serialization | ||||
in the application/link-format content format. | ||||
6.2. Discovery | ||||
Before an endpoint can make use of an RD, it must first know the RD's | Before an endpoint can make use of an RD, it must first know the RD's | |||
IP address, port and the path of its RD Function Set. There can be | address and port, and the path of its RD Function Set. There can be | |||
several mechanisms for discovering the RD including assuming a | several mechanisms for discovering the RD including assuming a | |||
default location (e.g. on an Edge Router in a LoWPAN), by assigning | default location (e.g. on an Edge Router in a LoWPAN), by assigning | |||
an anycast address to the RD, using DHCP, or by discovering the RD | an anycast address to the RD, using DHCP, or by discovering the RD | |||
using the CoRE Link Format (see also Section 4.1). This section | using the CoRE Link Format (see also Section 4). This section | |||
defines discovery of the RD using the well-known interface of the | defines discovery of the RD using the well-known interface of the | |||
CoRE Link Format [RFC6690] as the required mechanism. It is however | CoRE Link Format [RFC6690] as the required mechanism. It is however | |||
expected that RDs will also be discoverable via other methods | expected that RDs will also be discoverable via other methods | |||
depending on the deployment. | depending on the deployment. | |||
Discovery is performed by sending either a multicast or unicast GET | Discovery of the RD function set is performed by sending either a | |||
request to "/.well-known/core" and including a Resource Type (rt) | multicast or unicast GET request to "/.well-known/core" and including | |||
parameter [RFC6690] with the value "core.rd" in the query string. | a Resource Type (rt) parameter [RFC6690] with the value "core.rd" in | |||
Likewise, a Resource Type parameter value of "core.rd-lookup" is used | the query string. Likewise, a Resource Type parameter value of | |||
to discover the RD Lookup Function Set. Upon success, the response | "core.rd-lookup" is used to discover the RD Lookup Function Set. | |||
will contain a payload with a link format entry for each RD | Upon success, the response will contain a payload with a link format | |||
discovered, with the URL indicating the root resource of the RD. | entry for each RD discovered, with the URL indicating the root | |||
When performing multicast discovery, the multicast IP address used | resource of the RD. When performing multicast discovery, the | |||
will depend on the scope required and the multicast capabilities of | multicast IP address used will depend on the scope required and the | |||
the network. | multicast capabilities of the network. | |||
A Resource Directory MAY provide hints about the content-formats it | A Resource Directory MAY provide hints about the content-formats it | |||
supports in the links it exposes or registers, using the "ct" link | supports in the links it exposes or registers, using the "ct" link | |||
attribute, as shown in the example below. Clients MAY use these | attribute, as shown in the example below. Clients MAY use these | |||
hints to select alternate content-formats for interaction with the | hints to select alternate content-formats for interaction with the | |||
Resource Directory. | Resource Directory. | |||
HTTP does not support multicast and consequently only unicast | HTTP does not support multicast and consequently only unicast | |||
discovery can be supported using HTTP. Links to Resource Directories | discovery can be supported using HTTP. Links to Resource Directories | |||
MAY be registered in other Resource Directories, and well-known entry | MAY be registered in other Resource Directories, and well-known entry | |||
skipping to change at page 12, line 13 ¶ | skipping to change at page 14, line 49 ¶ | |||
resource. | resource. | |||
Failure: 4.04 "Not Found" is returned in case no matching entry is | Failure: 4.04 "Not Found" is returned in case no matching entry is | |||
found for a unicast request. | found for a unicast request. | |||
Failure: 4.00 "Bad Request" is returned in case of a malformed | Failure: 4.00 "Bad Request" is returned in case of a malformed | |||
request for a unicast request. | request for a unicast request. | |||
Failure: No error response to a multicast request. | Failure: No error response to a multicast request. | |||
HTTP support : NO | HTTP support : YES (Unicast only) | |||
The following example shows an endpoint discovering an RD using this | The following example shows an endpoint discovering an RD using this | |||
interface, thus learning that the base RD resource is, in this | interface, thus learning that the base RD resource is, in this | |||
example, at /rd. Note that it is up to the RD to choose its base RD | example, at /rd and that the content_format delivered by the server | |||
resource, although diagnostics and debugging is facilitated by using | hosting the resource is application.xml (ct=40). Note that it is up | |||
the base paths specified here where possible. | to the RD to choose its base RD resource, although diagnostics and | |||
debugging is facilitated by using the base paths specified here where | ||||
possible. | ||||
EP RD | Req: GET coap://[ff02::1]/.well-known/core?rt=core.rd* | |||
| | | ||||
| ----- GET /.well-known/core?rt=core.rd* ------> | | Res: 2.05 Content | |||
| | | </rd>;rt="core.rd";ct=40, | |||
| | | </rd-lookup>;rt="core.rd-lookup";ct=40, | |||
| <---- 2.05 Content "</rd>;rt="core.rd" ------- | | </rd-group>;rt="core.rd-group";ct=40 | |||
| | | ||||
The following example shows the way of indicating that a client may | ||||
request alternate content-formats. The Content-Format code attribute | ||||
"ct" MAY include a space-separated sequence of Content-Format codes | ||||
as specified in [RFC7252], indicating that multiple content-formats | ||||
are available. The example below shows the required ct=40 | ||||
(application/link-format) indicated as well as a vendor-specific | ||||
content format (21225). | ||||
Req: GET coap://[ff02::1]/.well-known/core?rt=core.rd* | Req: GET coap://[ff02::1]/.well-known/core?rt=core.rd* | |||
Res: 2.05 Content | Res: 2.05 Content | |||
</rd>;rt="core.rd";ct="application/link-format+cbor", | </rd>;rt="core.rd";ct="40 21225", | |||
</rd-lookup>;rt="core.rd-lookup";ct="application/link-format+cbor", | </rd-lookup>;rt="core.rd-lookup";ct="40 21225", | |||
</rd-group>;rt="core.rd-group";ct="application/link-format+cbor" | </rd-group>;rt="core.rd-group";ct="40 21225" | |||
5.2. Registration | 6.3. Registration | |||
After discovering the location of an RD Function Set, an endpoint MAY | After discovering the location of an RD Function Set, an endpoint MAY | |||
register its resources using the registration interface. This | register its resources using the registration interface. This | |||
interface accepts a POST from an endpoint containing the list of | interface accepts a POST from an endpoint containing the list of | |||
resources to be added to the directory as the message payload in the | resources to be added to the directory as the message payload in the | |||
CoRE Link Format [RFC6690], JSON CoRE Link Format (application/link- | CoRE Link Format [RFC6690], JSON CoRE Link Format (application/link- | |||
format+json), or CBOR CoRE Link Format (application/link-format+cbor) | format+json), or CBOR CoRE Link Format (application/link-format+cbor) | |||
[I-D.ietf-core-links-json], along with query string parameters | [I-D.ietf-core-links-json], along with query string parameters | |||
indicating the name of the endpoint, its domain and the lifetime of | indicating the name of the endpoint, its domain and the lifetime of | |||
the registration. All parameters except the endpoint name are | the registration. All parameters except the endpoint name are | |||
optional. It is expected that other specifications will define | optional. It is expected that other specifications will define | |||
further parameters (see Section 11.3). The RD then creates a new | further parameters (see Section 12.4). The RD then creates a new | |||
resource or updates an existing resource in the RD and returns its | resource or updates an existing resource in the RD and returns its | |||
location. An endpoint MUST use that location when refreshing | location. An endpoint MUST use that location when refreshing | |||
registrations using this interface. Endpoint resources in the RD are | registrations using this interface. Endpoint resources in the RD are | |||
kept active for the period indicated by the lifetime parameter. The | kept active for the period indicated by the lifetime parameter. The | |||
endpoint is responsible for refreshing the entry within this period | endpoint is responsible for refreshing the entry within this period | |||
using either the registration or update interface. The registration | using either the registration or update interface. The registration | |||
interface MUST be implemented to be idempotent, so that registering | interface MUST be implemented to be idempotent, so that registering | |||
twice with the same endpoint parameter does not create multiple RD | twice with the same endpoint parameter does not create multiple RD | |||
entries. | entries. A new registration may be created at any time to supercede | |||
an existing registration, replacing the registration parameters and | ||||
links. | ||||
The registration request interface is specified as follows: | The registration request interface is specified as follows: | |||
Interaction: EP -> RD | Interaction: EP -> RD | |||
Method: POST | Method: POST | |||
URI Template: /{+rd}{?ep,d,et,lt,con} | URI Template: /{+rd}{?ep,d,et,lt,con} | |||
URI Template Variables: | URI Template Variables: | |||
rd := RD Function Set path (mandatory). This is the path of the | rd := RD Function Set path (mandatory). This is the path of the | |||
RD Function Set, as obtained from discovery. An RD SHOULD use | RD Function Set, as obtained from discovery. An RD SHOULD use | |||
the value "rd" for this variable whenever possible. | the value "rd" for this variable whenever possible. | |||
ep := Endpoint name (mandatory). The endpoint name is an | ep := Endpoint name (mandatory). The endpoint name is an | |||
identifier that MUST be unique within a domain. The maximum | identifier that MUST be unique within a domain. The maximum | |||
length of this parameter is 63 bytes. | length of this parameter is 63 bytes. | |||
d := Domain (optional). The domain to which this endpoint | d := Domain (optional). The domain to which this endpoint | |||
belongs. This parameter SHOULD be less than 63 bytes. | belongs. The maximum length of this parameter is 63 bytes. | |||
Optional. When this parameter is elided, the RD MAY associate | When this parameter is elided, the RD MAY associate the | |||
the endpoint with a configured default domain. The domain | endpoint with a configured default domain. The domain value is | |||
value is needed to export the endpoint to DNS-SD (see | needed to export the endpoint to DNS-SD (see Section 10). | |||
Section 9). | ||||
et := Endpoint Type (optional). The semantic type of the | et := Endpoint Type (optional). The semantic type of the | |||
endpoint. This parameter SHOULD be less than 63 bytes. | endpoint. This parameter SHOULD be less than 63 bytes. | |||
Optional. | ||||
lt := Lifetime (optional). Lifetime of the registration in | lt := Lifetime (optional). Lifetime of the registration in | |||
seconds. Range of 60-4294967295. If no lifetime is included, | seconds. Range of 60-4294967295. If no lifetime is included, | |||
a default value of 86400 (24 hours) SHOULD be assumed. | a default value of 86400 (24 hours) SHOULD be assumed. | |||
con := Context (optional). This parameter sets the scheme, | con := Context (optional). This parameter sets the scheme, | |||
address and port at which this server is available in the form | address and port at which this server is available in the form | |||
scheme://host:port. Optional. In the absence of this | scheme://host:port. In the absence of this parameter the | |||
parameter the scheme of the protocol, source IP address and | scheme of the protocol, source IP address and source port of | |||
source port of the register request are assumed. This | the register request are assumed. This parameter is mandatory | |||
parameter is mandatory when the directory is filled by a third | when the directory is filled by a third party such as an | |||
party such as an installation tool. | commissioning tool. | |||
Content-Format: application/link-format | Content-Format: application/link-format | |||
Content-Format: application/link-format+json | Content-Format: application/link-format+json | |||
Content-Format: application/link-format+cbor | Content-Format: application/link-format+cbor | |||
The following response codes are defined for this interface: | The following response codes are defined for this interface: | |||
Success: 2.01 "Created" or 201 "Created". The Location header MUST | Success: 2.01 "Created" or 201 "Created". The Location header MUST | |||
be included with the new resource entry for the endpoint. This | be included with the new resource entry for the endpoint. This | |||
Location MUST be a stable identifier generated by the RD as it is | Location MUST be a stable identifier generated by the RD as it is | |||
used for all subsequent operations on this registration. The | used for all subsequent operations on this registration. The | |||
resource returned in the Location is only for the purpose of the | resource returned in the Location is for the purpose of updating | |||
Update (POST) and Removal (DELETE), and MUST NOT implement GET or | the lifetime of the registration and for maintaining the content | |||
PUT methods. | of the registered links, including updating and deleting links. | |||
Failure: 4.00 "Bad Request" or 400 "Bad Request". Malformed | Failure: 4.00 "Bad Request" or 400 "Bad Request". Malformed | |||
request. | request. | |||
Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | |||
Service could not perform the operation. | Service could not perform the operation. | |||
HTTP support: YES | HTTP support: YES | |||
The following example shows an endpoint with the name "node1" | The following example shows an endpoint with the name "node1" | |||
registering two resources to an RD using this interface. The | registering two resources to an RD using this interface. The | |||
resulting location /rd/4521 is just an example of an RD generated | resulting location /rd/4521 is just an example of an RD generated | |||
location. | location. | |||
EP RD | ||||
| | | ||||
| --- POST /rd?ep=node1 "</sensors..." -------> | | ||||
| | | ||||
| | | ||||
| <-- 2.01 Created Location: /rd/4521 ---------- | | ||||
| | | ||||
Req: POST coap://rd.example.com/rd?ep=node1 | Req: POST coap://rd.example.com/rd?ep=node1 | |||
Content-Format: 40 | Content-Format: 40 | |||
Payload: | Payload: | |||
</sensors/temp>;ct=41;rt="temperature-c";if="sensor", | </sensors/temp>;ct=41;rt="temperature-c";if="sensor", | |||
</sensors/light>;ct=41;rt="light-lux";if="sensor" | </sensors/light>;ct=41;rt="light-lux";if="sensor" | |||
Res: 2.01 Created | Res: 2.01 Created | |||
Location: /rd/4521 | Location: /rd/4521 | |||
Req: POST /rd?ep=node1 HTTP/1.1 | Req: POST /rd?ep=node1 HTTP/1.1 | |||
Host : example.com | Host : example.com | |||
Content-Format: application/link-format | Content-Type: application/link-format | |||
Payload: | Payload: | |||
</sensors/temp>;ct=41;rt="temperature-c";if="sensor", | </sensors/temp>;ct=41;rt="temperature-c";if="sensor", | |||
</sensors/light>;ct=41;rt="light-lux";if="sensor" | </sensors/light>;ct=41;rt="light-lux";if="sensor" | |||
Res: 201 Created | Res: 201 Created | |||
Location: /rd/4521 | Location: /rd/4521 | |||
5.3. Update | 6.4. Registration Update | |||
The update interface is used by an endpoint to refresh or update its | The update interface is used by an endpoint to refresh or update its | |||
registration with an RD. To use the interface, the endpoint sends a | registration with an RD. To use the interface, the endpoint sends a | |||
POST request to the resource returned in the Location option in the | POST request to the resource returned in the Location option in the | |||
response to the first registration. An update MAY update the | response to the first registration. | |||
lifetime or context parameters if they have changed since the last | ||||
An update MAY update the lifetime or context registration parameters | ||||
"lt", "con" as in Section 6.3 ) if they have changed since the last | ||||
registration or update. Parameters that have not changed SHOULD NOT | registration or update. Parameters that have not changed SHOULD NOT | |||
be included in an update. Upon receiving an update request, the RD | be included in an update. Adding parameters that have not changed | |||
resets the timeout for that endpoint and updates the scheme, IP | increases the size of the message but does not have any other | |||
address and port of the endpoint (using the source address of the | implications. Parameters MUST be included as query parameters in an | |||
update, or the context parameter if present). | update operation as in {registration}. | |||
Upon receiving an update request, an RD MUST reset the timeout for | ||||
that endpoint and update the scheme, IP address and port of the | ||||
endpoint, using the source address of the update, or the context | ||||
("con") parameter if present. If the lifetime parameter "lt" is | ||||
included in the received update request, the RD MUST update the | ||||
lifetime of the registration and set the timeout equal to the new | ||||
lifetime. | ||||
An update MAY optionally add or replace links for the endpoint by | An update MAY optionally add or replace links for the endpoint by | |||
including those links in the payload of the update as a CoRE Link | including those links in the payload of the update as a CoRE Link | |||
Format document. Including links in an update message greatly | Format document. A link is replaced only if both the target URI and | |||
increases the load on an RD and SHOULD be done infrequently. A link | relation type match. | |||
is replaced only if both the target URI and relation type match (see | ||||
Section 10.1) | ||||
The update request interface is specified as follows: | In addition to the use of POST, as described in this section, there | |||
is an alternate way to add, replace, and delete links using PATCH as | ||||
described in Section 6.7. | ||||
The update registration request interface is specified as follows: | ||||
Interaction: EP -> RD | Interaction: EP -> RD | |||
Method: POST | Method: POST | |||
URI Template: /{+location}{?lt,con} | URI Template: /{+location}{?lt,con} | |||
URI Template Variables: | URI Template Variables: | |||
location := This is the Location path returned by the RD as a | location := This is the Location path returned by the RD as a | |||
skipping to change at page 16, line 11 ¶ | skipping to change at page 19, line 11 ¶ | |||
lt := Lifetime (optional). Lifetime of the registration in | lt := Lifetime (optional). Lifetime of the registration in | |||
seconds. Range of 60-4294967295. If no lifetime is included, | seconds. Range of 60-4294967295. If no lifetime is included, | |||
a default value of 86400 (24 hours) SHOULD be assumed. | a default value of 86400 (24 hours) SHOULD be assumed. | |||
con := Context (optional). This parameter sets the scheme, | con := Context (optional). This parameter sets the scheme, | |||
address and port at which this server is available in the form | address and port at which this server is available in the form | |||
scheme://host:port. Optional. In the absence of this | scheme://host:port. Optional. In the absence of this | |||
parameter the scheme of the protocol, source IP address and | parameter the scheme of the protocol, source IP address and | |||
source port used to register are assumed. This parameter is | source port used to register are assumed. This parameter is | |||
compulsory when the directory is filled by a third party such | compulsory when the directory is filled by a third party such | |||
as an installation tool. | as a commissioning tool. | |||
Content-Format: application/link-format (optional) | Content-Format: application/link-format (mandatory) | |||
Content-Format: application/link-format+json (optional) | Content-Format: application/link-format+json (optional) | |||
Content-Format: application/link-format+cbor (optional) | Content-Format: application/link-format+cbor (optional) | |||
The following response codes are defined for this interface: | The following response codes are defined for this interface: | |||
Success: 2.04 "Changed" or 204 "No Content" if the update was | Success: 2.04 "Changed" or 204 "No Content" if the update was | |||
successfully processed. | successfully processed. | |||
skipping to change at page 16, line 38 ¶ | skipping to change at page 19, line 38 ¶ | |||
exist (e.g. may have expired). | exist (e.g. may have expired). | |||
Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | |||
Service could not perform the operation. | Service could not perform the operation. | |||
HTTP support: YES | HTTP support: YES | |||
The following example shows an endpoint updating its registration at | The following example shows an endpoint updating its registration at | |||
an RD using this interface. | an RD using this interface. | |||
EP RD | ||||
| | | ||||
| --- POST /rd/4521 --------------------------> | | ||||
| | | ||||
| | | ||||
| <-- 2.04 Changed ---------------------------- | | ||||
| | | ||||
Req: POST /rd/4521 | Req: POST /rd/4521 | |||
Res: 2.04 Changed | Res: 2.04 Changed | |||
5.4. Removal | The following example shows an endpoint updating its registration | |||
with a new lifetime and context, changing an existing link, and | ||||
adding a new link using this interface. With the initial | ||||
registration the client set the following values: | ||||
o lifetime (lt)=500 | ||||
o context (con)=coap://local-proxy-old.example.com:5683 | ||||
o resource= </sensors/temp>;ct=41;rt="foobar";if="sensor" | ||||
Req: POST /rd/4521?lt=600&con="coap://local-proxy.example.com:5683" | ||||
Content-Format: 40 | ||||
Payload: | ||||
</sensors/temp>;ct=41;rt="temperature-f";if="sensor", | ||||
</sensors/door>;ct=41;rt="door";if="sensor" | ||||
Res: 2.04 Changed | ||||
6.5. Registration Removal | ||||
Although RD entries have soft state and will eventually timeout after | Although RD entries have soft state and will eventually timeout after | |||
their lifetime, an endpoint SHOULD explicitly remove its entry from | their lifetime, an endpoint SHOULD explicitly remove its entry from | |||
the RD if it knows it will no longer be available (for example on | the RD if it knows it will no longer be available (for example on | |||
shut-down). This is accomplished using a removal interface on the RD | shut-down). This is accomplished using a removal interface on the RD | |||
by performing a DELETE on the endpoint resource. | by performing a DELETE on the endpoint resource. | |||
The removal request interface is specified as follows: | The removal request interface is specified as follows: | |||
Interaction: EP -> RD | Interaction: EP -> RD | |||
skipping to change at page 17, line 44 ¶ | skipping to change at page 21, line 5 ¶ | |||
exist (e.g. may have expired). | exist (e.g. may have expired). | |||
Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | |||
Service could not perform the operation. | Service could not perform the operation. | |||
HTTP support: YES | HTTP support: YES | |||
The following examples shows successful removal of the endpoint from | The following examples shows successful removal of the endpoint from | |||
the RD. | the RD. | |||
EP RD | ||||
| | | ||||
| --- DELETE /rd/4521 ------------------------> | | ||||
| | | ||||
| | | ||||
| <-- 2.02 Deleted ---------------------------- | | ||||
| | | ||||
Req: DELETE /rd/4521 | Req: DELETE /rd/4521 | |||
Res: 2.02 Deleted | Res: 2.02 Deleted | |||
5.5. Read Endpoint Links | 6.6. Read Endpoint Links | |||
Some endpoints may wish to manage their links as a collection, and | Some endpoints may wish to manage their links as a collection, and | |||
may need to read the current set of links in order to determine link | may need to read the current set of links in order to determine link | |||
maintenance operations. | maintenance operations. | |||
One or more links MAY be selected by using query filtering as | One or more links MAY be selected by using query filtering as | |||
specified in [RFC6690] Section 4.1 | specified in [RFC6690] Section 4.1 | |||
The read request interface is specified as follows: | The read request interface is specified as follows: | |||
skipping to change at page 19, line 7 ¶ | skipping to change at page 22, line 7 ¶ | |||
Failure: 4.04 "Not Found" or 404 "Not Found". Registration does not | Failure: 4.04 "Not Found" or 404 "Not Found". Registration does not | |||
exist (e.g. may have expired). | exist (e.g. may have expired). | |||
Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | |||
Service could not perform the operation. | Service could not perform the operation. | |||
HTTP support: YES | HTTP support: YES | |||
The following examples show successful read of the endpoint links | The following examples show successful read of the endpoint links | |||
from the RD. | from the RD. | |||
EP RD | ||||
| | | ||||
| --- GET /rd/4521 ------------------------> | | ||||
| | | ||||
| | | ||||
| <-- 2.05 Content </sensors... ---------------- | | ||||
| | | ||||
Req: GET /rd/4521 | Req: GET /rd/4521 | |||
Res: 2.01 Content | Res: 2.01 Content | |||
Payload: | Payload: | |||
</sensors/temp>;ct=41;rt="temperature-c";if="sensor", | </sensors/temp>;ct=41;rt="temperature-c";if="sensor", | |||
</sensors/light>;ct=41;rt="light-lux";if="sensor" | </sensors/light>;ct=41;rt="light-lux";if="sensor" | |||
5.6. Update Endpoint Links | 6.7. Update Endpoint Links | |||
[This section will be removed before or as a result of a working- | [This section will be removed before or as a result of a working- | |||
group last-call if the PATCH methods do not achieve the same level of | group last-call if the PATCH methods do not achieve the same level of | |||
consensus as the present document.] | consensus as the present document.] | |||
A PATCH update adds, removes or changes links for the endpoint by | A PATCH update adds, removes or changes links for the endpoint by | |||
including link update information in the payload of the update as a | including link update information in the payload of the update as a | |||
merge-patch+json format [RFC7396] document. | merge-patch+json format [RFC7396] document. | |||
One or more links are selected for update by using query filtering as | One or more links are selected for update by using query filtering as | |||
skipping to change at page 20, line 44 ¶ | skipping to change at page 23, line 36 ¶ | |||
Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | |||
Service could not perform the operation. | Service could not perform the operation. | |||
HTTP support: YES | HTTP support: YES | |||
The following examples show an endpoint adding </sensors/humid>, | The following examples show an endpoint adding </sensors/humid>, | |||
modifying </sensors/temp>, and removing </sensors/light> links in RD | modifying </sensors/temp>, and removing </sensors/light> links in RD | |||
using the Update Endpoint Links function. | using the Update Endpoint Links function. | |||
The following example shows an EP adding the link </sensors/ | The following example shows an EP adding the link </sensors/ | |||
humid>;ct=41;rt="humidity-s";if="sensor" to the collection of links | humid>;ct=41;rt="humid-s";if="sensor" to the collection of links at | |||
at the location /rd/4521. | the location /rd/4521. | |||
EP RD | ||||
| | | ||||
| --- PATCH /rd/4521---------------------------> | | ||||
| | | ||||
| | | ||||
| <-- 2.04 Changed ---------------------------- | | ||||
| | | ||||
Req: PATCH /rd/4521 | Req: PATCH /rd/4521 | |||
Payload: | Payload: | |||
[{"href":"/sensors/humid","ct": 41, "rt": "humidity-s", "if": "sensor"}] | [{"href":"/sensors/humid","ct": 41, "rt": "humid-s", "if": "sensor"}] | |||
Content-Format: | Content-Format: | |||
application/merge-patch+json | application/merge-patch+json | |||
Res: 2.04 Changed | Res: 2.04 Changed | |||
The following example shows an EP modifying all links at the location | The following example shows an EP modifying all links at the location | |||
/rd/4521 which are identified by href="/sensors/temp", from the | /rd/4521 which are identified by href="/sensors/temp", from the | |||
initial link-value of </sensors/temp>;rt="temperature" to the new | initial link-value of </sensors/temp>;rt="temperature" to the new | |||
link-value </sensors/temp>;rt="temperature-c";if="sensor" by changing | link-value </sensors/temp>;rt="temperature-c";if="sensor" by changing | |||
the value of the link attribute "rt" and adding the link attribute | the value of the link attribute "rt" and adding the link attribute | |||
if="sensor" using the PATCH operation with the supplied merge- | if="sensor" using the PATCH operation with the supplied merge- | |||
patch+json document payload. | patch+json document payload. | |||
EP RD | ||||
| | | ||||
| --- PATCH /rd/4521?href="/sensors/temp" ----> | | ||||
| | | ||||
| | | ||||
| <-- 2.04 Changed ---------------------------- | | ||||
| | | ||||
Req: PATCH /rd/4521?href="/sensors/temp" | Req: PATCH /rd/4521?href="/sensors/temp" | |||
Payload: | Payload: | |||
{"rt": "temperature-c", "if": "sensor"}, | {"rt": "temperature-c", "if": "sensor"}, | |||
Content-Format: | Content-Format: | |||
application/merge-patch+json | application/merge-patch+json | |||
Res: 2.04 Changed | Res: 2.04 Changed | |||
This example shows an EP removing all links at the location /rd/4521 | This example shows an EP removing all links at the location /rd/4521 | |||
which are identified by href="/sensors/light". | which are identified by href="/sensors/light". | |||
EP RD | ||||
| | | ||||
| --- PATCH /rd/4521?href="/sensors/light" ----> | | ||||
| | | ||||
| | | ||||
| <-- 2.04 Changed ---------------------------- | | ||||
| | | ||||
Req: PATCH /rd/4521?href="/sensors/light" | Req: PATCH /rd/4521?href="/sensors/light" | |||
Payload: | Payload: | |||
{null} | {null} | |||
Content-Format: | Content-Format: | |||
application/merge-patch+json | application/merge-patch+json | |||
Res: 2.04 Changed | Res: 2.04 Changed | |||
6. Group Function Set | 7. Group Function Set | |||
This section defines a function set for the creation of groups of | This section defines a function set for the creation of groups of | |||
endpoints for the purpose of managing and looking up endpoints for | endpoints for the purpose of managing and looking up endpoints for | |||
group operations. The group function set is similar to the resource | group operations. The group function set is similar to the resource | |||
directory function set, in that a group may be created or removed. | directory function set, in that a group may be created or removed. | |||
However unlike an endpoint entry, a group entry consists of a list of | However unlike an endpoint entry, a group entry consists of a list of | |||
endpoints and does not have a lifetime associated with it. In order | endpoints and does not have a lifetime associated with it. In order | |||
to make use of multicast requests with CoAP, a group MAY have a | to make use of multicast requests with CoAP, a group MAY have a | |||
multicast address associated with it. | multicast address associated with it. | |||
6.1. Register a Group | 7.1. Register a Group | |||
In order to create a group, a management entity used to configure | In order to create a group, a commissioning tool (CT) used to | |||
groups, makes a request to the RD indicating the name of the group to | configure groups, makes a request to the RD indicating the name of | |||
create (or update), optionally the domain the group belongs to, and | the group to create (or update), optionally the domain the group | |||
optionally the multicast address of the group. The registration | belongs to, and optionally the multicast address of the group. The | |||
message includes the list of endpoints that belong to that group. If | registration message includes the list of endpoints that belong to | |||
an endpoint has already registered with the RD, the RD attempts to | that group. | |||
use the context of the endpoint from its RD endpoint entry. If the | ||||
client registering the group knows the endpoint has already | All the endpoints in the group MUST be registered with the RD before | |||
registered, then it MAY send a blank target URI for that endpoint | registering a group. If an endpoint is not yet registered to the RD | |||
link when registering the group. Configuration of the endpoints | before registering the group, the registration message returns an | |||
themselves is out of scope of this specification. Such an interface | error. The RD sends a blank target URI for every endpoint link when | |||
for managing the group membership of an endpoint has been defined in | registering the group. | |||
[RFC7390]. | ||||
Configuration of the endpoints themselves is out of scope of this | ||||
specification. Such an interface for managing the group membership | ||||
of an endpoint has been defined in [RFC7390]. | ||||
The registration request interface is specified as follows: | The registration request interface is specified as follows: | |||
Interaction: Manager -> RD | Interaction: CT -> RD | |||
Method: POST | Method: POST | |||
URI Template: /{+rd-group}{?gp,d,con} | URI Template: /{+rd-group}{?gp,d,con} | |||
URI Template Variables: | URI Template Variables: | |||
rd-group := RD Group Function Set path (mandatory). This is the | rd-group := RD Group Function Set path (mandatory). This is the | |||
path of the RD Group Function Set. An RD SHOULD use the value | path of the RD Group Function Set. An RD SHOULD use the value | |||
"rd-group" for this variable whenever possible. | "rd-group" for this variable whenever possible. | |||
gp := Group Name (mandatory). The name of the group to be | gp := Group Name (mandatory). The name of the group to be | |||
created or replaced, unique within that domain. The maximum | created or replaced, unique within that domain. The maximum | |||
length of this parameter is 63 bytes. | length of this parameter is 63 bytes. | |||
d := Domain (optional). The domain to which this group belongs. | d := Domain (optional). The domain to which this group belongs. | |||
The maximum length of this parameter is 63 bytes. Optional. | The maximum length of this parameter is 63 bytes. Optional. | |||
When this parameter is elided, the RD MAY associate the | When this parameter is elided, the RD MAY associate the | |||
endpoint with a configured default domain. The domain value is | endpoint with a configured default domain. The domain value is | |||
needed to export the endpoint to DNS-SD (see Section 9) | needed to export the endpoint to DNS-SD (see Section 10) | |||
con := Context (optional). This parameter is used to set the IP | con := Context (optional). This parameter is used to set the IP | |||
multicast address at which this server is available in the form | multicast address at which this server is available in the form | |||
scheme://multicast-address:port. Optional. In the absence of | scheme://multicast-address:port. Optional. In the absence of | |||
this parameter no multicast address is configured. This | this parameter no multicast address is configured. This | |||
parameter is compulsory when the directory is filled by an | parameter is compulsory when the directory is filled by a | |||
installation tool. | commissioning tool. | |||
Content-Format: application/link-format | Content-Format: application/link-format | |||
Content-Format: application/link-format+json | Content-Format: application/link-format+json | |||
Content-Format: application/link-format+cbor | Content-Format: application/link-format+cbor | |||
The following response codes are defined for this interface: | The following response codes are defined for this interface: | |||
Success: 2.01 "Created" or 201 "Created". The Location header MUST | Success: 2.01 "Created" or 201 "Created". The Location header MUST | |||
be included with the new group entry. This Location MUST be a | be included with the new group entry. This Location MUST be a | |||
stable identifier generated by the RD as it is used for delete | stable identifier generated by the RD as it is used for delete | |||
operations on this registration. | operations on this registration. | |||
Failure: 4.00 "Bad Request" or 400 "Bad Request". Malformed | Failure: 4.00 "Bad Request" or 400 "Bad Request". Malformed | |||
request. | request. | |||
Failure: 4.04 "Not Found" or 404 "Not Found". An Endpoint is not | ||||
registered in the RD (e.g. may have expired). | ||||
Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | |||
Service could not perform the operation. | Service could not perform the operation. | |||
HTTP support: YES | HTTP support: YES | |||
The following example shows an EP registering a group with the name | The following example shows an EP registering a group with the name | |||
"lights" which has two endpoints to an RD using this interface. The | "lights" which has two endpoints to an RD using this interface. The | |||
resulting location /rd-group/12 is just an example of an RD generated | resulting location /rd-group/12 is just an example of an RD generated | |||
group location. | group location. | |||
EP RD | ||||
| | | ||||
| - POST /rd-group?gp=lights "<>;ep=node1..." --> | | ||||
| | | ||||
| | | ||||
| <---- 2.01 Created Location: /rd-group/12 ---- | | ||||
| | | ||||
Req: POST coap://rd.example.com/rd-group?gp=lights | Req: POST coap://rd.example.com/rd-group?gp=lights | |||
Content-Format: 40 | ||||
Payload: | Payload: | |||
<>;ep="node1", | <>;ep="node1", | |||
<>;ep="node2" | <>;ep="node2" | |||
Res: 2.01 Created | Res: 2.01 Created | |||
Location: /rd-group/12 | Location: /rd-group/12 | |||
Req: POST /rd-group?gp=lights HTTP/1.1 | Req: POST /rd-group?gp=lights HTTP/1.1 | |||
Host: example.com | Host: example.com | |||
Accept: application/link-format | Content-Type: application/link-format | |||
Payload: | Payload: | |||
<>;ep="node1", | <>;ep="node1", | |||
<>;ep="node2" | <>;ep="node2" | |||
Res: 201 Created | Res: 201 Created | |||
Location: /rd-group/12 | Location: /rd-group/12 | |||
6.2. Group Removal | 7.2. Group Removal | |||
A group can be removed simply by sending a removal message to the | A group can be removed simply by sending a removal message to the | |||
location returned when registering the group. Removing a group MUST | location returned when registering the group. Removing a group MUST | |||
NOT remove the endpoints of the group from the RD. | NOT remove the endpoints of the group from the RD. | |||
The removal request interface is specified as follows: | The removal request interface is specified as follows: | |||
Interaction: Manager -> RD | Interaction: CT -> RD | |||
Method: DELETE | Method: DELETE | |||
URI Template: /{+location} | URI Template: /{+location} | |||
URI Template Variables: | URI Template Variables: | |||
location := This is the Location path returned by the RD as a | location := This is the Location path returned by the RD as a | |||
result of a successful group registration. | result of a successful group registration. | |||
skipping to change at page 25, line 25 ¶ | skipping to change at page 27, line 33 ¶ | |||
Failure: 4.04 "Not Found" or 404 "Not Found". Group does not exist. | Failure: 4.04 "Not Found" or 404 "Not Found". Group does not exist. | |||
Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | |||
Service could not perform the operation. | Service could not perform the operation. | |||
HTTP support: YES | HTTP support: YES | |||
The following examples shows successful removal of the group from the | The following examples shows successful removal of the group from the | |||
RD. | RD. | |||
EP RD | ||||
| | | ||||
| --- DELETE /rd-group/412 -------------------> | | ||||
| | | ||||
| | | ||||
| <-- 2.02 Deleted ---------------------------- | | ||||
| | | ||||
Req: DELETE /rd-group/12 | Req: DELETE /rd-group/12 | |||
Res: 2.02 Deleted | Res: 2.02 Deleted | |||
7. RD Lookup Function Set | 8. RD Lookup Function Set | |||
In order for an RD to be used for discovering resources registered | In order for an RD to be used for discovering resources registered | |||
with it, a lookup interface can be provided using this function set. | with it, a lookup interface can be provided using this function set. | |||
This lookup interface is defined as a default, and it is assumed that | This lookup interface is defined as a default, and it is assumed that | |||
RDs may also support lookups to return resource descriptions in | RDs may also support lookups to return resource descriptions in | |||
alternative formats (e.g. Atom or HTML Link) or using more advanced | alternative formats (e.g. Atom or HTML Link) or using more advanced | |||
interfaces (e.g. supporting context or semantic based lookup). | interfaces (e.g. supporting context or semantic based lookup). | |||
This function set allows lookups for domains, groups, endpoints and | This function set allows lookups for domains, groups, endpoints and | |||
resources using attributes defined in the RD Function Set and for use | resources using attributes defined in the RD Function Set and for use | |||
with the CoRE Link Format. The result of a lookup request is the | with the CoRE Link Format. The result of a lookup request is the | |||
list of links (if any) corresponding to the type of lookup. Using | list of links (if any) corresponding to the type of lookup. Thus, a | |||
the Accept Option, the requester can control whether this list is | domain lookup MUST return a list of domains, a group lookup MUST | |||
returned in CoRE Link Format ("application/link-format", default) or | return a list of groups, an endpoint lookup MUST return a list of | |||
its alternate content-formats ("application/link-format+json" or | endpoints and a resource lookup MUST return a list of links to | |||
"application/link-format+cbor"). | resources. | |||
Each endpoint and resource lookup result returns respectively the | ||||
scheme (IP address and port) followed by the path part of the URI of | ||||
every endpoint and resource inside angle brackets ("<>") and followed | ||||
by the other parameters. | ||||
The target of these links SHOULD be the actual location of the | The target of these links SHOULD be the actual location of the | |||
domain, endpoint or resource, but MAY be an intermediate proxy e.g. | domain, endpoint or resource, but MAY be an intermediate proxy e.g. | |||
in the case of an HTTP lookup interface for CoAP endpoints. Multiple | in the case of an HTTP lookup interface for CoAP endpoints. | |||
query parameters MAY be included in a lookup, all included parameters | ||||
MUST match for a resource to be returned. The character '*' MAY be | The domain lookup returns every lookup domain with a "/rd" value | |||
included at the end of a parameter value as a wildcard operator. | encapsulated within angle brackets. | |||
In case that a group does not implement any multicast address, the | ||||
group lookup returns every group lookup with a "/rd-group" value | ||||
encapsulated within angle brackets. Otherwise, the group lookup | ||||
returns the multicast address of the group inside angle brackets. | ||||
Using the Accept Option, the requester can control whether this list | ||||
is returned in CoRE Link Format ("application/link-format", default) | ||||
or its alternate content-formats ("application/link-format+json" or | ||||
"application/link-format+cbor"). | ||||
The page and count parameters are used to obtain lookup results in | ||||
specified increments using pagination, where count specifies how many | ||||
links to return and page specifies which subset of links organized in | ||||
sequential pages , each containing 'count' links, starting with link | ||||
zero and page zero. Thus, specifying count of 10 and page of 0 will | ||||
return the first 10 links in the result set (links 0-9). Count = 10 | ||||
and page = 1 will return the next 'page' containing links 10-19, and | ||||
so on. | ||||
Multiple query parameters MAY be included in a lookup, all included | ||||
parameters MUST match for a resource to be returned. The | ||||
character'*' MAY be included at the end of a parameter value as a | ||||
wildcard operator. | ||||
The rd-lookup interface MAY use any set of query parameters to match | ||||
the registered attributes and relations. In addition, this interface | ||||
MAY be used with queries that specify domains, endpoints, and groups. | ||||
For example, a domain lookup filtering on groups would return a list | ||||
of domains that contain the specified groups. An endpoint lookup | ||||
filtering on groups would return a list of endpoints that are in the | ||||
specified groups. | ||||
The lookup interface is specified as follows: | The lookup interface is specified as follows: | |||
Interaction: Client -> RD | Interaction: Client -> RD | |||
Method: GET | Method: GET | |||
URI Template: /{+rd-lookup-base}/{lookup- | URI Template: /{+rd-lookup-base}/{lookup- | |||
type}{?d,ep,gp,et,rt,page,count,resource-param} | type}{?d,ep,gp,et,rt,page,count,resource-param} | |||
URI Template Variables: | URI Template Variables: | |||
rd-lookup-base := RD Lookup Function Set path (mandatory). This | rd-lookup-base := RD Lookup Function Set path (mandatory). This | |||
is the path of the RD Lookup Function Set. An RD SHOULD use the | is the path of the RD Lookup Function Set. An RD SHOULD use the | |||
value "rd-lookup" for this variable whenever possible. | value "rd-lookup" for this variable whenever possible. | |||
Content-Format: application/link-format (optional) | ||||
Content-Format: application/link-format+json (optional) | ||||
Content-Format: application/link-format+cbor (optional) | ||||
lookup-type := ("d", "ep", "res", "gp") (mandatory) This variable | lookup-type := ("d", "ep", "res", "gp") (mandatory) This variable | |||
is used to select the kind of lookup to perform (domain, | is used to select the kind of lookup to perform (domain, | |||
endpoint, resource, or group). | endpoint, resource, or group). | |||
ep := Endpoint name (optional). Used for endpoint, group and | ep := Endpoint name (optional). Used for endpoint, group and | |||
resource lookups. | resource lookups. | |||
d := Domain (optional). Used for domain, group, endpoint and | d := Domain (optional). Used for domain, group, endpoint and | |||
resource lookups. | resource lookups. | |||
res := resource (optional). Used for domain, group, endpoint and | ||||
resource lookups. | ||||
gp := Group name (optional). Used for endpoint, group and | ||||
resource lookups. | ||||
page := Page (optional). Parameter can not be used without the | page := Page (optional). Parameter can not be used without the | |||
count parameter. Results are returned from result set in pages | count parameter. Results are returned from result set in pages | |||
that contains 'count' results starting from index (page * | that contain 'count' links starting from index (page * count). | |||
count). | Page numbering starts with zero. | |||
count := Count (optional). Number of results is limited to this | count := Count (optional). Number of results is limited to this | |||
parameter value. If the parameter is not present, then an RD | parameter value. If the page parameter is also present, the | |||
implementation specific default value SHOULD be used. | response MUST only include 'count' links starting with the | |||
(page * count) link in the result set from the query. If the | ||||
count parameter is not present, then the response MUST return | ||||
all matching links in the result set. Link numbering starts | ||||
with zero. | ||||
rt := Resource type (optional). Used for group, endpoint and | rt := Resource type (optional). Used for group, endpoint and | |||
resource lookups. | resource lookups. | |||
et := Endpoint type (optional). Used for group, endpoint and | et := Endpoint type (optional). Used for group, endpoint and | |||
resource lookups. | resource lookups. | |||
resource-param := Link attribute parameters (optional). Any link | resource-param := Link attribute parameters (optional). Any link | |||
attribute as defined in Section 4.1 of [RFC6690], used for | attribute as defined in Section 4.1 of [RFC6690], used for | |||
resource lookups. | resource lookups. | |||
Content-Format: application/link-format (optional) | ||||
Content-Format: application/link-format+json (optional) | ||||
Content-Format: application/link-format+cbor (optional) | ||||
The following responses codes are defined for this interface: | The following responses codes are defined for this interface: | |||
Success: 2.05 "Content" or 200 "OK" with an "application/link- | Success: 2.05 "Content" or 200 "OK" with an "application/link- | |||
format", "application/link-format+cbor", or "application/link- | format", "application/link-format+cbor", or "application/link- | |||
format+json" payload containing matching entries for the lookup. | format+json" payload containing matching entries for the lookup. | |||
Failure: 4.04 "Not Found" or 404 "Not Found" in case no matching | Failure: 4.04 "Not Found" or 404 "Not Found" in case no matching | |||
entry is found for a unicast request. | entry is found for a unicast request. | |||
Failure: No error response to a multicast request. | Failure: No error response to a multicast request. | |||
skipping to change at page 27, line 36 ¶ | skipping to change at page 30, line 36 ¶ | |||
Failure: 4.00 "Bad Request" or 400 "Bad Request". Malformed | Failure: 4.00 "Bad Request" or 400 "Bad Request". Malformed | |||
request. | request. | |||
Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | Failure: 5.03 "Service Unavailable" or 503 "Service Unavailable". | |||
Service could not perform the operation. | Service could not perform the operation. | |||
HTTP support: YES | HTTP support: YES | |||
The examples in this section assume a CoAP host with IP address | The examples in this section assume a CoAP host with IP address | |||
FDFD::123 and a default CoAP port 61616. HTTP hosts are possible and | FDFD::123 and a default CoAP port 61616. HTTP hosts are possible and | |||
do not change the nature of the examples. The following example | do not change the nature of the examples.\ | |||
shows a client performing a resource lookup: | ||||
Client RD | The following example shows a client performing a resource lookup: | |||
| | | ||||
| ----- GET /rd-lookup/res?rt=temperature -----------------> | | ||||
| | | ||||
| | | ||||
| <-- 2.05 Content <coap://[FDFD::123]:61616/temp>;--------- | | ||||
| rt="temperature" -------- | | ||||
| | | ||||
Req: GET /rd-lookup/res?rt=temperature | Req: GET /rd-lookup/res?rt=temperature | |||
Res: 2.05 Content | Res: 2.05 Content | |||
<coap://[FDFD::123]:61616/temp>;rt="temperature" | <coap://[FDFD::123]:61616/temp>;rt="temperature" | |||
The following example shows a client performing an endpoint type | The following example shows a client performing an endpoint type | |||
lookup: | lookup: | |||
Client RD | ||||
| | | ||||
| ----- GET /rd-lookup/ep?et=power-node --------------------> | | ||||
| | | ||||
| | | ||||
| <-- 2.05 Content <coap://[FDFD::123]:61616>;ep="node5" ---- | | ||||
| | | ||||
Req: GET /rd-lookup/ep?et=power-node | Req: GET /rd-lookup/ep?et=power-node | |||
Res: 2.05 Content | Res: 2.05 Content | |||
<coap://[FDFD::123]:61616>;ep="node5", | <coap://[FDFD::123]:61616>;ep="node5", | |||
<coap://[FDFD::123]:61616>;ep="node7" | <coap://[FDFD::123]:61616>;ep="node7" | |||
The following example shows a client performing a domain lookup: | The following example shows a client performing a domain lookup: | |||
Client RD | ||||
| | | ||||
| ----- GET /rd-lookup/d ----------------------------------> | | ||||
| | | ||||
| | | ||||
| <-- 2.05 Content </rd>;d=domain1,</rd>;d=domain2 ---------- | | ||||
| | | ||||
Req: GET /rd-lookup/d | Req: GET /rd-lookup/d | |||
Res: 2.05 Content | Res: 2.05 Content | |||
</rd>;d="domain1", | <>;d="domain1", | |||
</rd>;d="domain2" | <>;d="domain2" | |||
The following example shows a client performing a group lookup for | The following example shows a client performing a group lookup for | |||
all groups: | all groups: | |||
Client RD | ||||
| | | ||||
| ----- GET /rd-lookup/gp ---------------------------------> | | ||||
| | | ||||
| | | ||||
| <-- 2.05 Content </rd-group/12>;gp="lights1"; ------------- | | ||||
| d="example.com" ------------- | | ||||
| | | ||||
Req: GET /rd-lookup/gp | Req: GET /rd-lookup/gp | |||
Res: 2.05 Content | Res: 2.05 Content | |||
</rd-group/12>;gp="lights1";d="example.com" | <>;gp="lights1";d="example.com" | |||
<>;gp="lights2";d="ecample.com" | ||||
The following example shows a client performing a lookup for all | The following example shows a client performing a lookup for all | |||
endpoints in a particular group: | endpoints in a particular group: | |||
Client RD | ||||
| | | ||||
| ----- GET /rd-lookup/ep?gp=lights1-----------------------> | | ||||
| | | ||||
| | | ||||
| <-- 2.05 Content <coap://[FDFD::123]:61616>;ep="node1" ---- | | ||||
| | | ||||
Req: GET /rd-lookup/ep?gp=lights1 | Req: GET /rd-lookup/ep?gp=lights1 | |||
Res: 2.05 Content | Res: 2.05 Content | |||
<coap://[FDFD::123]:61616>;ep="node1", | <coap://[FDFD::123]:61616>;ep="node1", | |||
<coap://[FDFD::123]:61616>;ep="node2", | <coap://[FDFD::123]:61616>;ep="node2" | |||
The following example shows a client performing a lookup for all | The following example shows a client performing a lookup for all | |||
groups an endpoint belongs to: | groups an endpoint belongs to: | |||
Client RD | ||||
| | | ||||
| ----- GET /rd-lookup/gp?ep=node1 -----------------------> | | ||||
| | | ||||
| | | ||||
|< 2.05 Content <coap://[FDFD::123]:61616>;gp="lights1"; -- | | ||||
| ep="node1" ------ | | ||||
| | | ||||
Req: GET /rd-lookup/gp?ep=node1 | Req: GET /rd-lookup/gp?ep=node1 | |||
Res: 2.05 Content | Res: 2.05 Content | |||
<coap://[FDFD::123]:61616>;gp="lights1";ep="node1", | <>;gp="lights1" | |||
8. New Link-Format Attributes | The following example shows a client performing a paginated lookup | |||
Req: GET /rd-lookup/res?page=0&count=5 | ||||
Res: 2.05 Content | ||||
<coap://[FDFD::123]:61616/res/0>;rt=sensor;ct=60 | ||||
<coap://[FDFD::123]:61616/res/1>;rt=sensor;ct=60 | ||||
<coap://[FDFD::123]:61616/res/2>;rt=sensor;ct=60 | ||||
<coap://[FDFD::123]:61616/res/3>;rt=sensor;ct=60 | ||||
<coap://[FDFD::123]:61616/res/4>;rt=sensor;ct=60 | ||||
Req: GET /rd-lookup/res?page=1&count=5 | ||||
Res: 2.05 Content | ||||
<coap://[FDFD::123]:61616/res/5>;rt=sensor;ct=60 | ||||
<coap://[FDFD::123]:61616/res/6>;rt=sensor;ct=60 | ||||
<coap://[FDFD::123]:61616/res/7>;rt=sensor;ct=60 | ||||
<coap://[FDFD::123]:61616/res/8>;rt=sensor;ct=60 | ||||
<coap://[FDFD::123]:61616/res/9>;rt=sensor;ct=60 | ||||
9. New Link-Format Attributes | ||||
When using the CoRE Link Format to describe resources being | When using the CoRE Link Format to describe resources being | |||
discovered by or posted to a resource directory service, additional | discovered by or posted to a resource directory service, additional | |||
information about those resources is useful. This specification | information about those resources is useful. This specification | |||
defines the following new attributes for use in the CoRE Link Format | defines the following new attributes for use in the CoRE Link Format | |||
[RFC6690]: | [RFC6690]: | |||
link-extension = ( "ins" "=" quoted-string ) ; Max 63 bytes | link-extension = ( "ins" "=" quoted-string ) ; Max 63 bytes | |||
link-extension = ( "exp" ) | link-extension = ( "exp" ) | |||
8.1. Resource Instance attribute 'ins' | 9.1. Resource Instance attribute 'ins' | |||
The Resource Instance "ins" attribute is an identifier for this | The Resource Instance "ins" attribute is an identifier for this | |||
resource, which makes it possible to distinguish it from other | resource, which makes it possible to distinguish it from other | |||
similar resources. This attribute is similar in use to the | similar resources. This attribute is similar in use to the | |||
<Instance> portion of a DNS-SD record (see Section 9.1, and SHOULD be | <Instance> portion of a DNS-SD record (see Section 10.1, and SHOULD | |||
unique across resources with the same Resource Type attribute in the | be unique across resources with the same Resource Type attribute in | |||
domain it is used. A Resource Instance might be a descriptive string | the domain it is used. A Resource Instance might be a descriptive | |||
like "Ceiling Light, Room 3", a short ID like "AF39" or a unique UUID | string like "Ceiling Light, Room 3", a short ID like "AF39" or a | |||
or iNumber. This attribute is used by a Resource Directory to | unique UUID or iNumber. This attribute is used by a Resource | |||
distinguish between multiple instances of the same resource type | Directory to distinguish between multiple instances of the same | |||
within the directory. | resource type within the directory. | |||
This attribute MUST be no more than 63 bytes in length. The resource | This attribute MUST be no more than 63 bytes in length. The resource | |||
identifier attribute MUST NOT appear more than once in a link | identifier attribute MUST NOT appear more than once in a link | |||
description. | description. This attribute MAY be used as a query parameter in the | |||
RD Lookup Function Set defined in Section 7. | ||||
8.2. Export attribute 'exp' | 9.2. Export attribute 'exp' | |||
The Export "exp" attribute is used as a flag to indicate that a link | The Export "exp" attribute is used as a flag to indicate that a link | |||
description MAY be exported by a resource directory to external | description MAY be exported by a resource directory to external | |||
directories. | directories. | |||
The CoRE Link Format is used for many purposes between CoAP | The CoRE Link Format is used for many purposes between CoAP | |||
endpoints. Some are useful mainly locally, for example checking the | endpoints. Some are useful mainly locally, for example checking the | |||
observability of a resource before accessing it, determining the size | observability of a resource before accessing it, determining the size | |||
of a resource, or traversing dynamic resource structures. However, | of a resource, or traversing dynamic resource structures. However, | |||
other links are very useful to be exported to other directories, for | other links are very useful to be exported to other directories, for | |||
example the entry point resource to a functional service. | example the entry point resource to a functional service. This | |||
attribute MAY be used as a query parameter in the RD Lookup Function | ||||
Set defined in Section 7. | ||||
9. DNS-SD Mapping | 10. DNS-SD Mapping | |||
CoRE Resource Discovery is intended to support fine-grained discovery | CoRE Resource Discovery is intended to support fine-grained discovery | |||
of hosted resources, their attributes, and possibly other resource | of hosted resources, their attributes, and possibly other resource | |||
relations [RFC6690]. In contrast, service discovery generally refers | relations [RFC6690]. In contrast, service discovery generally refers | |||
to a coarse-grained resolution of an endpoint's IP address, port | to a coarse-grained resolution of an endpoint's IP address, port | |||
number, and protocol. | number, and protocol. | |||
Resource and service discovery are complementary in the case of large | Resource and service discovery are complementary in the case of large | |||
networks, where the latter can facilitate scaling. This document | networks, where the latter can facilitate scaling. This document | |||
defines a mapping between CoRE Link Format attributes and DNS-Based | defines a mapping between CoRE Link Format attributes and DNS-Based | |||
Service Discovery [RFC6763] fields that permits discovery of CoAP | Service Discovery [RFC6763] fields that permits discovery of CoAP | |||
services by either method. | services by either method. | |||
9.1. DNS-based Service discovery | 10.1. DNS-based Service discovery | |||
DNS-Based Service Discovery (DNS-SD) defines a conventional method of | DNS-Based Service Discovery (DNS-SD) defines a conventional method of | |||
configuring DNS PTR, SRV, and TXT resource records to facilitate | configuring DNS PTR, SRV, and TXT resource records to facilitate | |||
discovery of services (such as CoAP servers in a subdomain) using the | discovery of services (such as CoAP servers in a subdomain) using the | |||
existing DNS infrastructure. This section gives a brief overview of | existing DNS infrastructure. This section gives a brief overview of | |||
DNS-SD; see [RFC6763] for a detailed specification. | DNS-SD; see [RFC6763] for a detailed specification. | |||
DNS-SD service names are limited to 255 octets and are of the form: | DNS-SD service names are limited to 255 octets and are of the form: | |||
Service Name = <Instance>.<ServiceType>.<Domain>. | Service Name = <Instance>.<ServiceType>.<Domain>. | |||
skipping to change at page 32, line 5 ¶ | skipping to change at page 34, line 34 ¶ | |||
where a service name identifies a particular resource, the path part | where a service name identifies a particular resource, the path part | |||
of the URI must be carried in a corresponding TXT record. | of the URI must be carried in a corresponding TXT record. | |||
A DNS TXT record is in practice limited to a few hundred octets in | A DNS TXT record is in practice limited to a few hundred octets in | |||
length, which is indicated in the resource record header in the DNS | length, which is indicated in the resource record header in the DNS | |||
response message. The data consists of one or more strings | response message. The data consists of one or more strings | |||
comprising a key=value pair. By convention, the first pair is | comprising a key=value pair. By convention, the first pair is | |||
txtver=<number> (to support different versions of a service | txtver=<number> (to support different versions of a service | |||
description). | description). | |||
9.2. mapping ins to <Instance> | 10.2. mapping ins to <Instance> | |||
The Resource Instance "ins" attribute maps to the <Instance> part of | The Resource Instance "ins" attribute maps to the <Instance> part of | |||
a DNS-SD service name. It is stored directly in the DNS as a single | a DNS-SD service name. It is stored directly in the DNS as a single | |||
DNS label of canonical precomposed UTF-8 [RFC3629] "Net-Unicode" | DNS label of canonical precomposed UTF-8 [RFC3629] "Net-Unicode" | |||
(Unicode Normalization Form C) [RFC5198] text. However, to the | (Unicode Normalization Form C) [RFC5198] text. However, to the | |||
extent that the "ins" attribute may be chosen to match the DNS host | extent that the "ins" attribute may be chosen to match the DNS host | |||
name of a service, it SHOULD use the syntax defined in Section 3.5 of | name of a service, it SHOULD use the syntax defined in Section 3.5 of | |||
[RFC1034] and Section 2.1 of [RFC1123]. | [RFC1034] and Section 2.1 of [RFC1123]. | |||
The <Instance> part of the name of a service being offered on the | The <Instance> part of the name of a service being offered on the | |||
skipping to change at page 32, line 30 ¶ | skipping to change at page 35, line 10 ¶ | |||
or service to be accessed in many cases without any manual | or service to be accessed in many cases without any manual | |||
configuration at all. The default name should be short and | configuration at all. The default name should be short and | |||
descriptive, and MAY include a collision-resistant substring such as | descriptive, and MAY include a collision-resistant substring such as | |||
the lower bits of the device's MAC address, serial number, | the lower bits of the device's MAC address, serial number, | |||
fingerprint, or other identifier in an attempt to make the name | fingerprint, or other identifier in an attempt to make the name | |||
relatively unique. | relatively unique. | |||
DNS labels are currently limited to 63 octets in length and the | DNS labels are currently limited to 63 octets in length and the | |||
entire service name may not exceed 255 octets. | entire service name may not exceed 255 octets. | |||
9.3. Mapping rt to <ServiceType> | 10.3. Mapping rt to <ServiceType> | |||
The resource type "rt" attribute is mapped into the <ServiceType> | The resource type "rt" attribute is mapped into the <ServiceType> | |||
part of a DNS-SD service name and SHOULD conform to the reg-rel-type | part of a DNS-SD service name and SHOULD conform to the reg-rel-type | |||
production of the Link Format defined in Section 2 of [RFC6690]. The | production of the Link Format defined in Section 2 of [RFC6690]. The | |||
"rt" attribute MUST be composed of at least a single Net-Unicode text | "rt" attribute MUST be composed of at least a single Net-Unicode text | |||
string, without underscore '_' or period '.' and limited to 15 octets | string, without underscore '_' or period '.' and limited to 15 octets | |||
in length, which represents the application protocol name. This | in length, which represents the application protocol name. This | |||
string is mapped to the DNS-SD <ServiceType> by prepending an | string is mapped to the DNS-SD <ServiceType> by prepending an | |||
underscore and appending a period followed by the "_udp" label. For | underscore and appending a period followed by the "_udp" label. For | |||
example, rt="dali" is mapped into "_dali._udp". | example, rt="dali" is mapped into "_dali._udp". | |||
skipping to change at page 33, line 5 ¶ | skipping to change at page 35, line 33 ¶ | |||
and a service subtype name consisting of a Net-Unicode text string, | and a service subtype name consisting of a Net-Unicode text string, | |||
without underscore or period and limited to 63 octets. This string | without underscore or period and limited to 63 octets. This string | |||
is mapped to the DNS-SD <ServiceType> by appending a period followed | is mapped to the DNS-SD <ServiceType> by appending a period followed | |||
by the "_sub" label and then appending a period followed by the | by the "_sub" label and then appending a period followed by the | |||
service type label pair derived as in the previous paragraph. For | service type label pair derived as in the previous paragraph. For | |||
example, rt="dali.light" is mapped into "light._sub._dali._udp". | example, rt="dali.light" is mapped into "light._sub._dali._udp". | |||
The resulting string is used to form labels for DNS-SD records which | The resulting string is used to form labels for DNS-SD records which | |||
are stored directly in the DNS. | are stored directly in the DNS. | |||
9.4. Domain mapping | 10.4. Domain mapping | |||
DNS domains may be derived from the "d" attribute. The domain | DNS domains may be derived from the "d" attribute. The domain | |||
attribute may be suffixed with the zone name of the authoritative DNS | attribute may be suffixed with the zone name of the authoritative DNS | |||
server to generate the domain name. The "ep" attribute is prefixed | server to generate the domain name. The "ep" attribute is prefixed | |||
to the domain name to generate the FQDN to be stored into DNS with an | to the domain name to generate the FQDN to be stored into DNS with an | |||
AAAA RR. | AAAA RR. | |||
9.5. TXT Record key=value strings | 10.5. TXT Record key=value strings | |||
A number of [RFC6763] key/value pairs are derived from link-format | A number of [RFC6763] key/value pairs are derived from link-format | |||
information, to be exported in the DNS-SD as key=value strings in a | information, to be exported in the DNS-SD as key=value strings in a | |||
TXT record ([RFC6763], Section 6.3). | TXT record ([RFC6763], Section 6.3). | |||
The resource <URI> is exported as key/value pair "path=<URI>". | The resource <URI> is exported as key/value pair "path=<URI>". | |||
The Interface Description "if" attribute is exported as key/value | The Interface Description "if" attribute is exported as key/value | |||
pair "if=<Interface Description>". | pair "if=<Interface Description>". | |||
The DNS TXT record can be further populated by importing any other | The DNS TXT record can be further populated by importing any other | |||
resource description attributes as they share the same key=value | resource description attributes as they share the same key=value | |||
format specified in Section 6 of [RFC6763]. | format specified in Section 6 of [RFC6763]. | |||
9.6. Importing resource links into DNS-SD | 10.6. Importing resource links into DNS-SD | |||
Assuming the ability to query a Resource Directory or multicast a GET | Assuming the ability to query a Resource Directory or multicast a GET | |||
(?exp) over the local link, CoAP resource discovery may be used to | (?exp) over the local link, CoAP resource discovery may be used to | |||
populate the DNS-SD database in an automated fashion. CoAP resource | populate the DNS-SD database in an automated fashion. CoAP resource | |||
descriptions (links) can be exported to DNS-SD for exposure to | descriptions (links) can be exported to DNS-SD for exposure to | |||
service discovery by using the Resource Instance attribute as the | service discovery by using the Resource Instance attribute as the | |||
basis for a unique service name, composed with the Resource Type as | basis for a unique service name, composed with the Resource Type as | |||
the <ServiceType>, and registered in the correct <Domain>. The agent | the <ServiceType>, and registered in the correct <Domain>. The agent | |||
responsible for exporting records to the DNS zone file SHOULD be | responsible for exporting records to the DNS zone file SHOULD be | |||
authenticated to the DNS server. The following example shows an | authenticated to the DNS server. The following example shows an | |||
agent discovering a resource to be exported: | agent discovering a resource to be exported: | |||
Agent RD | ||||
| | | ||||
| --- GET /rd-lookup/res?exp ------------------------------> | | ||||
| | | ||||
| | | ||||
| <-- 2.05 Content "<coap://[FDFD::1234]:5683/light/1>;exp; | | ||||
| rt="dali.light";ins="Spot"; | | ||||
| d="office";ep="node1" | | ||||
| | | ||||
Req: GET /rd-lookup/res?exp | Req: GET /rd-lookup/res?exp | |||
Res: 2.05 Content | Res: 2.05 Content | |||
<coap://[FDFD::1234]:5683/light/1>; | <coap://[FDFD::1234]:5683/light/1>; | |||
exp;rt="dali.light";ins="Spot"; | exp;rt="dali.light";ins="Spot"; | |||
d="office";ep="node1" | d="office";ep="node1" | |||
The agent subsequently registers the following DNS-SD RRs, assuming a | The agent subsequently registers the following DNS-SD RRs, assuming a | |||
zone name "example.com" prefixed with "office": | zone name "example.com" prefixed with "office": | |||
skipping to change at page 34, line 30 ¶ | skipping to change at page 36, line 47 ¶ | |||
Spot._dali._udp.office.example.com IN SRV 0 0 5683 | Spot._dali._udp.office.example.com IN SRV 0 0 5683 | |||
node1.office.example.com. | node1.office.example.com. | |||
Spot._dali._udp.office.example.com IN TXT | Spot._dali._udp.office.example.com IN TXT | |||
txtver=1;path=/light/1 | txtver=1;path=/light/1 | |||
In the above figure the Service Name is chosen as | In the above figure the Service Name is chosen as | |||
Spot._dali._udp.office.example.com without the light._sub service | Spot._dali._udp.office.example.com without the light._sub service | |||
prefix. An alternative Service Name would be: | prefix. An alternative Service Name would be: | |||
Spot.light._sub._dali._udp.office.example.com. | Spot.light._sub._dali._udp.office.example.com. | |||
10. Security Considerations | 11. Security Considerations | |||
The security considerations as described in Section 7 of [RFC5988] | The security considerations as described in Section 7 of [RFC5988] | |||
and Section 6 of [RFC6690] apply. The "/.well-known/core" resource | and Section 6 of [RFC6690] apply. The "/.well-known/core" resource | |||
may be protected e.g. using DTLS when hosted on a CoAP server as | may be protected e.g. using DTLS when hosted on a CoAP server as | |||
described in [RFC7252]. DTLS or TLS based security SHOULD be used on | described in [RFC7252]. DTLS or TLS based security SHOULD be used on | |||
all resource directory interfaces defined in this document. | all resource directory interfaces defined in this document. | |||
10.1. Endpoint Identification and Authentication | 11.1. Endpoint Identification and Authentication | |||
An Endpoint is determined to be unique by an RD by the Endpoint | An Endpoint is determined to be unique by an RD by the Endpoint | |||
identifier parameter included during Registration, and any associated | identifier parameter included during Registration, and any associated | |||
TLS or DTLS security bindings. An Endpoint MUST NOT be identified by | TLS or DTLS security bindings. An Endpoint MUST NOT be identified by | |||
its protocol, port or IP address as these may change over the | its protocol, port or IP address as these may change over the | |||
lifetime of an Endpoint. | lifetime of an Endpoint. | |||
Every operation performed by an Endpoint or Client on a resource | Every operation performed by an Endpoint or Client on a resource | |||
directory SHOULD be mutually authenticated using Pre-Shared Key, Raw | directory SHOULD be mutually authenticated using Pre-Shared Key, Raw | |||
Public Key or Certificate based security. Endpoints using a | Public Key or Certificate based security. Endpoints using a | |||
Certificate MUST include the Endpoint identifier as the Subject of | Certificate MUST include the Endpoint identifier as the Subject of | |||
the Certificate, and this identifier MUST be checked by a resource | the Certificate, and this identifier MUST be checked by a resource | |||
directory to match the Endpoint identifier included in the | directory to match the Endpoint identifier included in the | |||
Registration message. | Registration message. | |||
10.2. Access Control | 11.2. Access Control | |||
Access control SHOULD be performed separately for the RD Function Set | Access control SHOULD be performed separately for the RD Function Set | |||
and the RD Lookup Function Set, as different endpoints may be | and the RD Lookup Function Set, as different endpoints may be | |||
authorized to register with an RD from those authorized to lookup | authorized to register with an RD from those authorized to lookup | |||
endpoints from the RD. Such access control SHOULD be performed in as | endpoints from the RD. Such access control SHOULD be performed in as | |||
fine-grained a level as possible. For example access control for | fine-grained a level as possible. For example access control for | |||
lookups could be performed either at the domain, endpoint or resource | lookups could be performed either at the domain, endpoint or resource | |||
level. | level. | |||
10.3. Denial of Service Attacks | 11.3. Denial of Service Attacks | |||
Services that run over UDP unprotected are vulnerable to unknowingly | Services that run over UDP unprotected are vulnerable to unknowingly | |||
become part of a DDoS attack as UDP does not require return | become part of a DDoS attack as UDP does not require return | |||
routability check. Therefore, an attacker can easily spoof the | routability check. Therefore, an attacker can easily spoof the | |||
source IP of the target entity and send requests to such a service | source IP of the target entity and send requests to such a service | |||
which would then respond to the target entity. This can be used for | which would then respond to the target entity. This can be used for | |||
large-scale DDoS attacks on the target. Especially, if the service | large-scale DDoS attacks on the target. Especially, if the service | |||
returns a response that is order of magnitudes larger than the | returns a response that is order of magnitudes larger than the | |||
request, the situation becomes even worse as now the attack can be | request, the situation becomes even worse as now the attack can be | |||
amplified. DNS servers have been widely used for DDoS amplification | amplified. DNS servers have been widely used for DDoS amplification | |||
attacks. Recently, it has been observed that NTP Servers, that also | attacks. There is also a danger that NTP Servers could become | |||
run on unprotected UDP have been used for DDoS attacks | implicated in denial-of-service (DoS) attacks since they run on | |||
(http://tools.cisco.com/security/center/content/CiscoSecurityNotice/ | unprotected UDP, there is no return routability check, and they can | |||
CVE-2013-5211) since there is no return routability check and can | ||||
have a large amplification factor. The responses from the NTP server | have a large amplification factor. The responses from the NTP server | |||
were found to be 19 times larger than the request. A Resource | were found to be 19 times larger than the request. A Resource | |||
Directory (RD) which responds to wild-card lookups is potentially | Directory (RD) which responds to wild-card lookups is potentially | |||
vulnerable if run with CoAP over UDP. Since there is no return | vulnerable if run with CoAP over UDP. Since there is no return | |||
routability check and the responses can be significantly larger than | routability check and the responses can be significantly larger than | |||
requests, RDs can unknowingly become part of a DDoS amplification | requests, RDs can unknowingly become part of a DDoS amplification | |||
attack. Therefore, it is RECOMMENDED that implementations ensure | attack. Therefore, it is RECOMMENDED that implementations ensure | |||
return routability. This can be done, for example by responding to | return routability. This can be done, for example by responding to | |||
wild card lookups only over DTLS or TLS or TCP. | wild card lookups only over DTLS or TLS or TCP. | |||
11. IANA Considerations | 12. IANA Considerations | |||
11.1. Resource Types | 12.1. Resource Types | |||
"core.rd", "core.rd-group" and "core.rd-lookup" resource types need | "core.rd", "core.rd-group" and "core.rd-lookup" resource types need | |||
to be registered with the resource type registry defined by | to be registered with the resource type registry defined by | |||
[RFC6690]. | [RFC6690]. | |||
11.2. Link Extension | 12.2. Link Extension | |||
The "exp" attribute needs to be registered when a future Web Linking | The "exp" and "ins" attributes need to be registered when a future | |||
link-extension registry is created (e.g. in RFC5988bis). | Web Linking link-extension registry is created (e.g. in RFC5988bis). | |||
11.3. RD Parameter Registry | 12.3. IPv6 ND Resource Directory Address Option | |||
This document registers one new ND option type under the subregistry | ||||
"IPv6 Neighbor Discovery Option Formats": | ||||
o Resource Directory address Option (38) | ||||
12.4. RD Parameter Registry | ||||
This specification defines a new sub-registry for registration and | This specification defines a new sub-registry for registration and | |||
lookup parameters called "RD Parameters" under "CoRE Parameters". | lookup parameters called "RD Parameters" under "CoRE Parameters". | |||
Although this specification defines a basic set of parameters, it is | Although this specification defines a basic set of parameters, it is | |||
expected that other standards that make use of this interface will | expected that other standards that make use of this interface will | |||
define new ones. | define new ones. | |||
Each entry in the registry must include the human readable name of | Each entry in the registry must include the human readable name of | |||
the parameter, the query parameter, validity requirements if any and | the parameter, the query parameter, validity requirements if any and | |||
a description. The query parameter MUST be a valid URI query key | a description. The query parameter MUST be a valid URI query key | |||
[RFC3986]. | [RFC3986]. | |||
Initial entries in this sub-registry are as follows: | Initial entries in this sub-registry are as follows: | |||
+----------+-------+---------------+--------------------------------+ | +-----------+-------+---------------+-------------------------------+ | |||
| Name | Query | Validity | Description | | | Name | Query | Validity | Description | | |||
+----------+-------+---------------+--------------------------------+ | +-----------+-------+---------------+-------------------------------+ | |||
| Endpoint | ep | | Name of the endpoint | | | Endpoint | ep | | Name of the endpoint, max 63 | | |||
| Name | | | | | | Name | | | bytes | | |||
| Lifetime | lt | 60-4294967295 | Lifetime of the registration | | | Lifetime | lt | 60-4294967295 | Lifetime of the registration | | |||
| | | | in seconds | | | | | | in seconds | | |||
| Domain | d | | Domain to which this endpoint | | | Domain | d | | Domain to which this endpoint | | |||
| | | | belongs | | | | | | belongs | | |||
| Endpoint | et | | Semantic name of the endpoint | | | Endpoint | et | | Semantic name of the endpoint | | |||
| Type | | | | | | Type | | | | | |||
| Context | con | URI | The scheme, address and port | | | Context | con | URI | The scheme, address and port | | |||
| | | | at which this server is | | | | | | at which this server is | | |||
| | | | available | | | | | | available | | |||
| Endpoint | ep | | Name of the endpoint, max 63 | | | Resource | res | | Name of the resource | | |||
| Name | | | bytes | | | Name | | | | | |||
| Group | gp | | Name of a group in the RD | | | Group | gp | | Name of a group in the RD | | |||
| Name | | | | | | Name | | | | | |||
| Page | page | Integer | Used for pagination | | | Page | page | Integer | Used for pagination | | |||
| Count | count | Integer | Used for pagination | | | Count | count | Integer | Used for pagination | | |||
+----------+-------+---------------+--------------------------------+ | | Resource | ins | | Instance Identifier | | |||
| Instance | | | | | ||||
| Export | exp | | A link MAY be exported to | | ||||
| | | | another Resource Directory | | ||||
+-----------+-------+---------------+-------------------------------+ | ||||
Table 1: RD Parameters | Table 1: RD Parameters | |||
The IANA policy for future additions to the sub-registry is "Expert | The IANA policy for future additions to the sub-registry is "Expert | |||
Review" as described in [RFC5226]. | Review" as described in [RFC5226]. | |||
12. Examples | 13. Examples | |||
Examples are added here. | Examples are added here. | |||
12.1. Lighting Installation | 13.1. Lighting Installation | |||
This example shows a simplified lighting installation which makes use | This example shows a simplified lighting installation which makes use | |||
of the Resource Directory (RD) with a CoAP interface to facilitate | of the Resource Directory (RD) with a CoAP interface to facilitate | |||
the installation and start up of the application code in the lights | the installation and start up of the application code in the lights | |||
and sensors. In particular, the example leads to the definition of a | and sensors. In particular, the example leads to the definition of a | |||
group and the enabling of the corresponding multicast address. No | group and the enabling of the corresponding multicast address. No | |||
conclusions must be drawn on the realization of actual installation | conclusions must be drawn on the realization of actual installation | |||
procedures, because the example "emphasizes" some of the issues that | or naming procedures, because the example only "emphasizes" some of | |||
may influence the use of the RD. | the issues that may influence the use of the RD and does not pretend | |||
to be normative. | ||||
12.1.1. Installation Characteristics | 13.1.1. Installation Characteristics | |||
The example assumes that the installation is managed. That means | The example assumes that the installation is managed. That means | |||
that a Commissioning Tool (CT) is used to authorize the addition of | that a Commissioning Tool (CT) is used to authorize the addition of | |||
nodes, name them, and name their services. The CT can be connected | nodes, name them, and name their services. The CT can be connected | |||
to the installation in many ways: the CT can be part of the | to the installation in many ways: the CT can be part of the | |||
installation network, connected by WiFi to the installation network, | installation network, connected by WiFi to the installation network, | |||
or connected via GPRS link, or other method. | or connected via GPRS link, or other method. | |||
It is assumed that there are two naming authorities for the | It is assumed that there are two naming authorities for the | |||
installation: (1) the network manager that is responsible for the | installation: (1) the network manager that is responsible for the | |||
correct operation of the network and the connected interfaces, and | correct operation of the network and the connected interfaces, and | |||
(2) the lighting manager that is responsible for the correct | (2) the lighting manager that is responsible for the correct | |||
functioning of networked lights and sensors. The result is the | functioning of networked lights and sensors. The result is the | |||
existence of two naming schemes coming from the two managing | existence of two naming schemes coming from the two managing | |||
entities. | entities. | |||
The example installation consists of one presence sensor, and two | The example installation consists of one presence sensor, and two | |||
luminaries, luminary1 and luminary2, each with their own wireless | luminaries, luminary1 and luminary2, each with their own wireless | |||
interface. Each luminary contains three lamps: left, right and | interface. Each luminary contains three lamps: left, right and | |||
middle. Each luminary is accessible through one end-point. For each | middle. Each luminary is accessible through one endpoint. For each | |||
lamp a resource exists to modify the settings of a lamp in a | lamp a resource exists to modify the settings of a lamp in a | |||
luminary. The purpose of the installation is that the presence | luminary. The purpose of the installation is that the presence | |||
sensor notifies the presence of persons to a group of lamps. The | sensor notifies the presence of persons to a group of lamps. The | |||
group of lamps consists of: middle and left lamps of luminary1 and | group of lamps consists of: middle and left lamps of luminary1 and | |||
right lamp of luminary2. | right lamp of luminary2. | |||
Before commissioning by the lighting manager, the network is | Before commissioning by the lighting manager, the network is | |||
installed and access to the interfaces is proven to work by the | installed and access to the interfaces is proven to work by the | |||
network manager. Following the lay-out of cables and routers the | network manager. | |||
network manager has defined DNS domains. The presence sensor and | ||||
luminary1 are part of DNS domain: rtr_5612_rrt.example.com and | ||||
luminary2 is part of rtr_7899_pfa.example.com. The names of | ||||
luminary1- luminary2-, and sensor- interfaces are respectively: | ||||
lm_12-345-678, lm_12-456-378, and sn_12-345-781. These names are | ||||
stored in DNS together with their IP addresses. The FQDN of the | ||||
interfaces is shown in Table 2 below: | ||||
+--------------------+----------------------------------------+ | ||||
| Name | FQDN | | ||||
+--------------------+----------------------------------------+ | ||||
| luminary1 | lm_12-345-678.rtr_5612_rrt.example.com | | ||||
| luminary2 | lm_12-456-378.rtr_7899_pfa.example.com | | ||||
| Presence sensor | sn_12-345-781.rtr_5612_rrt.example.com | | ||||
| Resource directory | pc_123456.rtr_5612_rrt.example.com | | ||||
+--------------------+----------------------------------------+ | ||||
Table 2: interface FQDNs | ||||
At the moment of installation, the network under installation is not | At the moment of installation, the network under installation is not | |||
necessarily connected to the DNS infra structure. Therefore, SLAAC | necessarily connected to the DNS infra structure. Therefore, SLAAC | |||
IPv6 addresses are assigned to CT, RD, luminaries and sensor shown in | IPv6 addresses are assigned to CT, RD, luminaries and sensor shown in | |||
Table 3 below: | Table 2 below: | |||
+--------------------+--------------+ | +--------------------+--------------+ | |||
| Name | IPv6 address | | | Name | IPv6 address | | |||
+--------------------+--------------+ | +--------------------+--------------+ | |||
| luminary1 | FDFD::ABCD:1 | | | luminary1 | FDFD::ABCD:1 | | |||
| luminary2 | FDFD::ABCD:2 | | | luminary2 | FDFD::ABCD:2 | | |||
| Presence sensor | FDFD::ABCD:3 | | | Presence sensor | FDFD::ABCD:3 | | |||
| Resource directory | FDFD::ABCD:0 | | | Resource directory | FDFD::ABCD:0 | | |||
+--------------------+--------------+ | +--------------------+--------------+ | |||
Table 3: interface SLAAC addresses | Table 2: interface SLAAC addresses | |||
In Section 12.1.2 the use of resource directory during installation | In Section 13.1.2 the use of resource directory during installation | |||
is presented. In Section 12.1.3 the connection to DNS is discussed. | is presented. In Section 13.1.3 the connection to DNS is discussed. | |||
12.1.2. RD entries | 13.1.2. RD entries | |||
It is assumed that access to the DNS infrastructure is not always | It is assumed that access to the DNS infrastructure is not always | |||
possible during installation. Therefore, the SLAAC addresses are | possible during installation. Therefore, the SLAAC addresses are | |||
used in this section. | used in this section. | |||
For discovery, the resource types (rt) of the devices are important. | For discovery, the resource types (rt) of the devices are important. | |||
The lamps in the luminaries have rt: light, and the presence sensor | The lamps in the luminaries have rt: light, and the presence sensor | |||
has rt: p-sensor. The end-points have names which are relevant to | has rt: p-sensor. The endpoints have names which are relevant to the | |||
the light installation manager. In this case luminary1, luminary2, | light installation manager. In this case luminary1, luminary2, and | |||
and the presence sensor are located in room 2-4-015, where luminary1 | the presence sensor are located in room 2-4-015, where luminary1 is | |||
is located at the window and luminary2 and the presence sensor are | located at the window and luminary2 and the presence sensor are | |||
located at the door. The end-point names reflect this physical | located at the door. The endpoint names reflect this physical | |||
location. The middle, left and right lamps are accessed via path | location. The middle, left and right lamps are accessed via path | |||
/light/middle, /light/left, and /light/right respectively. The | /light/middle, /light/left, and /light/right respectively. The | |||
identifiers relevant to the Resource Directory are shown in Table 4 | identifiers relevant to the Resource Directory are shown in Table 3 | |||
below: | below: | |||
+----------------+------------------+---------------+---------------+ | +----------------+------------------+---------------+---------------+ | |||
| Name | end-point | resource path | resource type | | | Name | endpoint | resource path | resource type | | |||
+----------------+------------------+---------------+---------------+ | +----------------+------------------+---------------+---------------+ | |||
| luminary1 | lm_R2-4-015_wndw | /light/left | light | | | luminary1 | lm_R2-4-015_wndw | /light/left | light | | |||
| luminary1 | lm_R2-4-015_wndw | /light/middle | light | | | luminary1 | lm_R2-4-015_wndw | /light/middle | light | | |||
| luminary1 | lm_R2-4-015_wndw | /light/right | light | | | luminary1 | lm_R2-4-015_wndw | /light/right | light | | |||
| luminary2 | lm_R2-4-015_door | /light/left | light | | | luminary2 | lm_R2-4-015_door | /light/left | light | | |||
| luminary2 | lm_R2-4-015_door | /light/middle | light | | | luminary2 | lm_R2-4-015_door | /light/middle | light | | |||
| luminary2 | lm_R2-4-015_door | /light/right | light | | | luminary2 | lm_R2-4-015_door | /light/right | light | | |||
| Presence | ps_R2-4-015_door | /ps | p-sensor | | | Presence | ps_R2-4-015_door | /ps | p-sensor | | |||
| sensor | | | | | | sensor | | | | | |||
+----------------+------------------+---------------+---------------+ | +----------------+------------------+---------------+---------------+ | |||
Table 4: Resource Directory identifiers | Table 3: Resource Directory identifiers | |||
The CT inserts the end-points of the luminaries and the sensor in the | The CT inserts the endpoints of the luminaries and the sensor in the | |||
RD using the Context parameter (con) to specify the interface | RD using the Context parameter (con) to specify the interface | |||
address: | address: | |||
Req: POST coap://[FDFD::ABCD:0]/rd | Req: POST coap://[FDFD::ABCD:0]/rd | |||
?ep=lm_R2-4-015_wndw&con=coap://[FDFD::ABCD:1] | ?ep=lm_R2-4-015_wndw&con=coap://[FDFD::ABCD:1] | |||
Payload: | Payload: | |||
</light/left>;rt="light"; | </light/left>;rt="light"; d="R2-4-015", | |||
d="R2-4-015";ins="lamp4444";exp, | </light/middle>;rt="light"; d="R2-4-015", | |||
</light/middle>;rt="light"; | </light/right>;rt="light";d="R2-4-015" | |||
d="R2-4-015";ins="lamp5555";exp, | ||||
</light/right>;rt="light"; | ||||
d="R2-4-015";ins="lamp6666";exp | ||||
Res: 2.01 Created | Res: 2.01 Created | |||
Location: /rd/4521 | Location: /rd/4521 | |||
Req: POST coap://[FDFD::ABCD:0]/rd | Req: POST coap://[FDFD::ABCD:0]/rd | |||
?ep=lm_R2-4-015_door&con=coap://[FDFD::ABCD:2] | ?ep=lm_R2-4-015_door&con=coap://[FDFD::ABCD:2] | |||
Payload: | Payload: | |||
</light/left>;rt="light"; | </light/left>;rt="light"; d="R2-4-015", | |||
d="R2-4-015";ins="lamp1111";exp, | </light/middle>;rt="light"; d="R2-4-015", | |||
</light/middle>;rt="light"; | </light/right>;rt="light"; d="R2-4-015" | |||
d="R2-4-015";ins="lamp2222";exp, | ||||
</light/right>;rt="light"; | ||||
d="R2-4-015";ins="lamp3333";exp | ||||
Res: 2.01 Created | Res: 2.01 Created | |||
Location: /rd/4522 | Location: /rd/4522 | |||
Req: POST coap://[FDFD::ABCD:0]/rd | Req: POST coap://[FDFD::ABCD:0]/rd | |||
?ep=ps_R2-4-015_door&con=coap://[FDFD::ABCD:3] | ?ep=ps_R2-4-015_door&con=coap://[FDFD::ABCD:3] | |||
Payload: | Payload: | |||
</ps>;rt="p-sensor"; | </ps>;rt="p-sensor"; d="R2-4-015" | |||
d="R2-4-015";ins="pres1234";exp | ||||
Res: 2.01 Created | Res: 2.01 Created | |||
Location: /rd/4523 | Location: /rd/4523 | |||
The domain name d="R2-4-015" has been added for an efficient lookup | The domain name d="R2-4-015" has been added for an efficient lookup | |||
because filtering on "ep" name is awkward. The same domain name is | because filtering on "ep" name is more awkward. The same domain name | |||
communicated to the two luminaries and the presence sensor by the CT. | is communicated to the two luminaries and the presence sensor by the | |||
The "exp" attribute is set for the later administration in DNS of the | CT. | |||
instance name ins="lampxxxx". | ||||
Once the individual endpoints are registered, the group needs to be | ||||
registered. Because the presence sensor sends one multicast message | ||||
to the luminaries, all lamps in the group need to have an identical | ||||
path. This path is created on the two luminaries using the batch | ||||
command defined in [I-D.ietf-core-interfaces]. The path to a batch | ||||
of lamps is defined as: /light/grp1. In the example below, two | ||||
endpoints are updated with an additional resource using the path | ||||
/light/grp1 on the two luminaries. | ||||
Req: POST | ||||
coap://[FDFD::ABCD:1]/light/grp1 | ||||
(Content-Format:application/link-format)<light/middle>,<light/left> | ||||
Res: 2.04 Changed | ||||
Req: POST | ||||
coap://[FDFD::ABCD:2]/light/grp1 | ||||
(Content-Format:application/link-format)<light/right> | ||||
Res: 2.04 Changed | ||||
The group is specified in the RD. The Context parameter is set to | The group is specified in the RD. The Context parameter is set to | |||
the site-local multicast address allocated to the group. In the POST | the site-local multicast address allocated to the group. In the POST | |||
in the example below, these two end-points and the end-point of the | in the example below, these two endpoints and the endpoint of the | |||
presence sensor are registered as members of the group. | presence sensor are registered as members of the group. | |||
It is expected that Standards Developing Organizations (SDOs) may | ||||
develop other special purpose protocols to specify additional group | ||||
links, group membership, group names and other parameters in the | ||||
individual nodes. | ||||
Req: POST coap://[FDFD::ABCD:0]/rd-group | Req: POST coap://[FDFD::ABCD:0]/rd-group | |||
?gp=grp_R2-4-015;con="coap//[FF05::1]";exp;ins="grp1234" | ?gp=grp_R2-4-015;con="coap//[FF05::1]";exp;ins="grp1234" | |||
Payload: | Payload: | |||
<>ep=lm_R2-4-015_wndw, | <>ep=lm_R2-4-015_wndw, | |||
<>ep=lm_R2-4-015_door, | <>ep=lm_R2-4-015_door, | |||
<>ep=ps_R2-4-015_door | <>ep=ps_R2-4-015_door | |||
Res: 2.01 Created | Res: 2.01 Created | |||
Location: /rd-group/501 | Location: /rd-group/501 | |||
After the filling of the RD by the CT, the application in the | After the filling of the RD by the CT, the application in the | |||
luminaries can learn to which groups they belong, and enable their | luminaries can learn to which groups they belong, and enable their | |||
interface for the multicast address. | interface for the multicast address. | |||
The luminary, knowing its domain, queries the RD for the end-point | The luminary, knowing its domain, queries the RD for the endpoint | |||
with rt=light and d=R2-4-015. The RD returns all end-points in the | with rt=light and d=R2-4-015. The RD returns all endpoints in the | |||
domain. | domain. | |||
Req: GET coap://[FDFD::ABCD:0]/rd-lookup/ep | Req: GET coap://[FDFD::ABCD:0]/rd-lookup/ep | |||
?d=R2-4-015;rt=light | ?d=R2-4-015;rt=light | |||
Res: 2.05 Content | Res: 2.05 Content | |||
<coap://[FDFD::ABCD:1]>; | <coap://[FDFD::ABCD:1]>; | |||
ep="lm_R2-4-015_wndw", | ep="lm_R2-4-015_wndw", | |||
<coap://[FDFD::ABCD:2]>; | <coap://[FDFD::ABCD:2]>; | |||
ep="lm_R2-4-015_door" | ep="lm_R2-4-015_door" | |||
Knowing its own IPv6 address, the luminary discovers its endpoint | Knowing its own IPv6 address, the luminary discovers its endpoint | |||
name. With the end-point name the luminary queries the RD for all | name. With the endpoint name the luminary queries the RD for all | |||
groups to which the end-point belongs. | groups to which the endpoint belongs. | |||
Req: GET coap://[FDFD::ABCD:0]/rd-lookup/gp | Req: GET coap://[FDFD::ABCD:0]/rd-lookup/gp | |||
?ep=lm_R2-4-015_wndw | ?ep=lm_R2-4-015_wndw | |||
Res: 2.05 Content | Res: 2.05 Content | |||
<coap://[FF05::1]>;gp="grp_R2-4-015" | <coap://[FF05::1]>;gp="grp_R2-4-015" | |||
From the context parameter value, the luminary learns the multicast | From the context parameter value, the luminary learns the multicast | |||
address of the multicast group. | address of the multicast group. | |||
Alternatively, the CT can communicate the multicast address directly | Alternatively, the CT can communicate the multicast address directly | |||
to the luminaries by using the "coap-group" resource specified in | to the luminaries by using the "coap-group" resource specified in | |||
[RFC7390]. | [RFC7390]. | |||
Req: POST //[FDFD::ABCD:1]/coap-group | Req: POST //[FDFD::ABCD:1]/coap-group | |||
Content-Format: application/coap-group+json | Content-Format: application/coap-group+json | |||
{ "a": "[FF05::1]" } | { "a": "[FF05::1]", | |||
{ "n": "grp_R2-4-015"} | "n": "grp_R2-4-015"} | |||
Res: 2.01 Created | Res: 2.01 Created | |||
Location-Path: /coap-group/1 | Location-Path: /coap-group/1 | |||
Dependent on the situation only the address ,"a", or the name, "n", | Dependent on the situation only the address ,"a", or the name, "n", | |||
is specified in the coap-group resource. Instead of the RD group | is specified in the coap-group resource. | |||
name also the DNS group name can be used. | ||||
12.1.3. DNS entries | ||||
The network manager assigns the domain bc.example.com to the entries | ||||
coming from the RD. The agent that looks up the resource directory | ||||
uses the domain name bc.example.com as prescribed, to enter the | ||||
services and hosts into the DNS. | ||||
The agent does a lookup as specified in Section 9.6. The RD returns | ||||
all entries annotated with "exp". The agent subsequently registers | ||||
the following DNS-SD RRs: | ||||
lm_R2-4-015_wndw.bc.example.com. IN AAAA FDFD::ABCD:1 | ||||
lm_R2-4-015_door.bc.example.com. IN AAAA FDFD::ABCD:2 | ||||
ps_R2-4-015_door.bc.example.com. IN AAAA FDFD::ABCD:3 | ||||
_light._udp.bc.example.com IN PTR | ||||
lamp1111._light._udp.bc.example.com | ||||
_light._udp.bc.example.com IN PTR | ||||
lamp2222._light._udp.bc.example.com | ||||
_light._udp.bc.example.com IN PTR | ||||
lamp3333._light._udp.bc.example.com | ||||
_light._udp.bc.example.com IN PTR | ||||
lamp4444._light._udp.bc.example.com | ||||
_light._udp.bc.example.com IN PTR | ||||
lamp5555._light._udp.bc.example.com | ||||
_light._udp.bc.example.com IN PTR | ||||
lamp6666._light._udp.bc.example.com | ||||
_p-sensor._udp.bc.example.com IN PTR | ||||
pres12324._p-sensor._udp.bc.example.com | ||||
lamp1111._light._udp.bc.example.com IN SRV 0 0 5683 | ||||
lm_R2-4-015_door.bc.example.com. | ||||
lamp1111._light._udp.bc.example.com IN TXT | ||||
txtver=1;path=/light/left | ||||
lamp2222._light._udp.bc.example.com IN SRV 0 0 5683 | ||||
lm_R2-4-015_door.bc.example.com. | ||||
lamp2222._light._udp.bc.example.com IN TXT | ||||
txtver=1;path=/light/middle | ||||
lamp3333._light._udp.bc.example.com IN SRV 0 0 5683 | ||||
lm_R2-4-015_door.bc.example.com. | ||||
lamp3333._light._udp.bc.example.com IN TXT | ||||
txtver=1;path=/light/right | ||||
lamp4444._light._udp.bc.example.com IN SRV 0 0 5683 | ||||
lm_R2-4-015_wndw.bc.example.com. | ||||
lamp4444._light._udp.bc.example.com IN TXT | ||||
txtver=1;path=/light/left | ||||
lamp5555._light._udp.bc.example.com IN SRV 0 0 5683 | ||||
lm_R2-4-015_wndw.bc.example.com. | ||||
lamp5555._light._udp.bc.example.com IN TXT | ||||
txtver=1;path=/light/middle | ||||
lamp6666._light._udp.bc.example.com IN SRV 0 0 5683 | ||||
lm_R2-4-015_wndw.bc.example.com. | ||||
lamp6666._light._udp.bc.example.com IN TXT | ||||
txtver=1;path=/light/right | ||||
pres1234._p-sensor._udp.bc.example.com IN SRV 0 0 5683 | ||||
ps_R2-4-015_door.bc.example.com. | ||||
pres1234._p-sensor._udp.bc.example.com IN TXT | ||||
txtver=1;path=/ps | ||||
To ask for all lamps is equivalent to returning all PTR RR with label | ||||
_light.udp.bc.example.com. from the DNS. When it is required to | ||||
filter on the rd=R2-4-015 value in the DNS, additional PTR RRs have | ||||
to be entered into the DNS. | ||||
R2-4-015._light._udp.bc.example.com IN PTR | ||||
lamp1111._light._udp.bc.example.com | ||||
R2-4-015._light._udp.bc.example.com IN PTR | ||||
lamp2222._light._udp.bc.example.com | ||||
R2-4-015._light._udp.bc.example.com IN PTR | ||||
lamp3333._light._udp.bc.example.com | ||||
R2-4-015._light._udp.bc.example.com IN PTR | ||||
lamp4444._light._udp.bc.example.com | ||||
R2-4-015._light._udp.bc.example.com IN PTR | ||||
lamp5555._light._udp.bc.example.com | ||||
R2-4-015._light._udp.bc.example.com IN PTR | ||||
lamp6666._light._udp.bc.example.com | ||||
Returning all PTR RRs with label R2-4-015._light._udp.bc.example.com | 13.1.3. DNS entries | |||
provides all service instances within the domain R2-4-015. This | ||||
filtering can be handy when there are many rooms. In the example | ||||
there is only one room, making the filtering superfluous. | ||||
The agent can also discover groups that need to be discovered. It | It may be profitable to discover the light groups for applications, | |||
queries RD to return all groups which are exported. | which are unaware ot the existence of the RD. An agent needs to | |||
query the RD to return all groups which are exported to be inserted | ||||
into DNS. | ||||
Req: GET /rd-lookup/gp?exp | Req: GET /rd-lookup/gp?exp | |||
Res: 2.05 Content | Res: 2.05 Content | |||
<coap://[FF05::1]/>;exp;gp="grp_R2-4-015;ins="grp1234"; | <coap://[FF05::1]/>;exp;gp="grp_R2-4-015;ins="grp1234"; | |||
ep="lm_R2-4-015_wndw"; | ep="lm_R2-4-015_wndw"; | |||
ep="lm_R2-4-015_door | ep="lm_R2-4-015_door | |||
The group with FQDN grp_R2-4-015.bc.example.com can be entered into | The group with FQDN grp_R2-4-015.bc.example.com can be entered into | |||
the DNS by the agent. The accompanying instance name is grp1234. | the DNS by the agent. The accompanying instance name is grp1234. | |||
skipping to change at page 45, line 5 ¶ | skipping to change at page 44, line 32 ¶ | |||
following RRs into the DNS. | following RRs into the DNS. | |||
grp_R2-4-015.bc.example.com. IN AAAA FF05::1 | grp_R2-4-015.bc.example.com. IN AAAA FF05::1 | |||
_group._udp.bc.example.com IN PTR | _group._udp.bc.example.com IN PTR | |||
grp1234._group._udp.bc.example.com | grp1234._group._udp.bc.example.com | |||
grp1234._group._udp.bc.example.com IN SRV 0 0 5683 | grp1234._group._udp.bc.example.com IN SRV 0 0 5683 | |||
grp_R2-4-015_door.bc.example.com. | grp_R2-4-015_door.bc.example.com. | |||
grp1234._group._udp.bc.example.com IN TXT | grp1234._group._udp.bc.example.com IN TXT | |||
txtver=1;path=/light/grp1 | txtver=1;path=/light/grp1 | |||
12.1.4. RD Operation | From then on applications, not familiar with the existence of the RD, | |||
can use DNS to access the lighting group. | ||||
The specification of the group can be used by devices other than the | ||||
luminaries and the sensor to learn the multicast address of the group | ||||
in a given room. For example a smart phone may be used to adjust the | ||||
lamps in the room. | ||||
After entry into the room, on request of the user, the smart phone | ||||
queries the presence of RDs and may display all the domain names | ||||
found on the RDs. The user can, for example, scroll all domains | ||||
(room names in this case) and select the room that he entered. After | ||||
selection the phone shows all groups in the selected room with their | ||||
members. Selecting a group, the user can dim, switch on/off the | ||||
group of lights, or possibly even create temporary new groups. | ||||
In all examples the SLAAC IPv6 address can be exchanged with the | ||||
FQDN, when a connection to DNS exists. Using the FQDN, a node learns | ||||
the interface's IPv6 address, or the group's multicast address from | ||||
DNS. In the same way the presence sensor can learn the multicast | ||||
address to which it should send its presence messages. | ||||
12.2. OMA Lightweight M2M (LWM2M) Example | 13.2. OMA Lightweight M2M (LWM2M) Example | |||
This example shows how the OMA LWM2M specification makes use of | This example shows how the OMA LWM2M specification makes use of | |||
Resource Directory (RD). | Resource Directory (RD). | |||
OMA LWM2M is a profile for device services based on CoAP, CoRE RD, | OMA LWM2M is a profile for device services based on CoAP(OMA Name | |||
and other IETF RFCs and drafts. LWM2M defines a simple object model | Authority). LWM2M defines a simple object model and a number of | |||
and a number of abstract interfaces and operations for device | abstract interfaces and operations for device management and device | |||
management and device service enablement. | service enablement. | |||
An LWM2M server is an instance of an LWM2M middleware service layer, | An LWM2M server is an instance of an LWM2M middleware service layer, | |||
containing a Resource Directory along with other LWM2M interfaces | containing a Resource Directory along with other LWM2M interfaces | |||
defined by the LWM2M specification. | defined by the LWM2M specification. | |||
CoRE Resource Directory (RD) is used to provide the LWM2M | CoRE Resource Directory (RD) is used to provide the LWM2M | |||
Registration interface. | Registration interface. | |||
LWM2M does not provide for registration domains and does not | LWM2M does not provide for registration domains and does not | |||
currently use the rd-group or rd-lookup interfaces. | currently use the rd-group or rd-lookup interfaces. | |||
skipping to change at page 46, line 7 ¶ | skipping to change at page 45, line 18 ¶ | |||
The LWM2M specification describes a set of interfaces and a resource | The LWM2M specification describes a set of interfaces and a resource | |||
model used between a LWM2M device and an LWM2M server. Other | model used between a LWM2M device and an LWM2M server. Other | |||
interfaces, proxies, applications, and function sets are currently | interfaces, proxies, applications, and function sets are currently | |||
out of scope for LWM2M. | out of scope for LWM2M. | |||
The location of the LWM2M Server and RD Function Set is provided by | The location of the LWM2M Server and RD Function Set is provided by | |||
the LWM2M Bootstrap process, so no dynamic discovery of the RD | the LWM2M Bootstrap process, so no dynamic discovery of the RD | |||
function set is used. LWM2M Servers and endpoints are not required | function set is used. LWM2M Servers and endpoints are not required | |||
to implement the ./well-known/core resource. | to implement the ./well-known/core resource. | |||
12.2.1. The LWM2M Object Model | 13.2.1. The LWM2M Object Model | |||
The OMA LWM2M object model is based on a simple 2 level class | The OMA LWM2M object model is based on a simple 2 level class | |||
hierarchy consisting of Objects and Resources. | hierarchy consisting of Objects and Resources. | |||
An LWM2M Resource is a REST endpoint, allowed to be a single value or | An LWM2M Resource is a REST endpoint, allowed to be a single value or | |||
an array of values of the same data type. | an array of values of the same data type. | |||
An LWM2M Object is a resource template and container type that | An LWM2M Object is a resource template and container type that | |||
encapsulates a set of related resources. An LWM2M Object represents | encapsulates a set of related resources. An LWM2M Object represents | |||
a specific type of information source; for example, there is a LWM2M | a specific type of information source; for example, there is a LWM2M | |||
skipping to change at page 46, line 40 ¶ | skipping to change at page 46, line 4 ¶ | |||
{/base-uri}{/object-id}{/object-instance}{/resource-id}{/resource- | {/base-uri}{/object-id}{/object-instance}{/resource-id}{/resource- | |||
instance} | instance} | |||
The five variables given here are strings. base-uri can also have | The five variables given here are strings. base-uri can also have | |||
the special value "undefined" (sometimes called "null" in RFC 6570). | the special value "undefined" (sometimes called "null" in RFC 6570). | |||
Each of the variables object-instance, resource-id, and resource- | Each of the variables object-instance, resource-id, and resource- | |||
instance can be the special value "undefined" only if the values | instance can be the special value "undefined" only if the values | |||
behind it in this sequence also are "undefined". As a special case, | behind it in this sequence also are "undefined". As a special case, | |||
object-instance can be "empty" (which is different from "undefined") | object-instance can be "empty" (which is different from "undefined") | |||
if resource-id is not "undefined". [_TEMPLATE_TODO] | if resource-id is not "undefined". [_TEMPLATE_TODO] | |||
base-uri := Base URI for LWM2M resources or "undefined" for default | base-uri := Base URI for LWM2M resources or "undefined" for default | |||
(empty) base URI | (empty) base URI | |||
object-id := OMNA registered object ID (0-65535) | object-id := OMNA (OMA Name Authority) registered object ID (0-65535) | |||
object-instance := Object instance identifier (0-65535) or | object-instance := Object instance identifier (0-65535) or | |||
"undefined"/"empty" (see above)) to refer to all instances of an | "undefined"/"empty" (see above)) to refer to all instances of an | |||
object ID | object ID | |||
resource-id := OMNA registered resource ID (0-65535) or "undefined" | resource-id := OMNA (OMA Name Authority) registered resource ID | |||
to refer to all resources within an instance | (0-65535) or "undefined" to refer to all resources within an instance | |||
resource-instance := Resource instance identifier or "undefined" to | resource-instance := Resource instance identifier or "undefined" to | |||
refer to single instance of a resource | refer to single instance of a resource | |||
LWM2M IDs are 16 bit unsigned integers represented in decimal (no | LWM2M IDs are 16 bit unsigned integers represented in decimal (no | |||
leading zeroes except for the value 0) by URI format strings. For | leading zeroes except for the value 0) by URI format strings. For | |||
example, a LWM2M URI might be: | example, a LWM2M URI might be: | |||
/1/0/1 | /1/0/1 | |||
The base uri is empty, the Object ID is 1, the instance ID is 0, the | The base uri is empty, the Object ID is 1, the instance ID is 0, the | |||
resource ID is 1, and the resource instance is "undefined". This | resource ID is 1, and the resource instance is "undefined". This | |||
example URI points to internal resource 1, which represents the | example URI points to internal resource 1, which represents the | |||
registration lifetime configured, in instance 0 of a type 1 object | registration lifetime configured, in instance 0 of a type 1 object | |||
(LWM2M Server Object). | (LWM2M Server Object). | |||
12.2.2. LWM2M Register Endpoint | 13.2.2. LWM2M Register Endpoint | |||
LWM2M defines a registration interface based on the Resource | LWM2M defines a registration interface based on the Resource | |||
Directory Function Set, described in Section 5. The URI of the LWM2M | Directory Function Set, described in Section 6. The URI of the LWM2M | |||
Resource Directory function set is specified to be "/rd" as | Resource Directory function set is specified to be "/rd" as | |||
recommended in Section 5.2. | recommended in Section 6.3. | |||
LWM2M endpoints register object IDs, for example </1>, to indicate | LWM2M endpoints register object IDs, for example </1>, to indicate | |||
that a particular object type is supported, and register object | that a particular object type is supported, and register object | |||
instances, for example </1/0>, to indicate that a particular instance | instances, for example </1/0>, to indicate that a particular instance | |||
of that object type exists. | of that object type exists. | |||
Resources within the LWM2M object instance are not registered with | Resources within the LWM2M object instance are not registered with | |||
the RD, but may be discovered by reading the resource links from the | the RD, but may be discovered by reading the resource links from the | |||
object instance using GET with a CoAP Content-Format of application/ | object instance using GET with a CoAP Content-Format of application/ | |||
link-format. Resources may also be read as a structured object by | link-format. Resources may also be read as a structured object by | |||
performing a GET to the object instance with a Content-Format of | performing a GET to the object instance with a Content-Format of | |||
senml+json. | senml+json. | |||
When an LWM2M object or instance is registered, this indicates to the | When an LWM2M object or instance is registered, this indicates to the | |||
LWM2M server that the object and it's resources are available for | LWM2M server that the object and its resources are available for | |||
management and service enablement (REST API) operations. | management and service enablement (REST API) operations. | |||
LWM2M endpoints may use the following RD registration parameters as | LWM2M endpoints may use the following RD registration parameters as | |||
defined in Table 1 : | defined in Table 1 : | |||
ep - Endpoint Name | ep - Endpoint Name | |||
lt - registration lifetime | lt - registration lifetime | |||
Endpoint Name is mandatory, all other registration parameters are | Endpoint Name is mandatory, all other registration parameters are | |||
optional. | optional. | |||
skipping to change at page 48, line 17 ¶ | skipping to change at page 47, line 32 ¶ | |||
+------------+-------+-------------------------------+--------------+ | +------------+-------+-------------------------------+--------------+ | |||
| Protocol | b | {"U",UQ","S","SQ","US","UQS"} | Available | | | Protocol | b | {"U",UQ","S","SQ","US","UQS"} | Available | | |||
| Binding | | | Protocols | | | Binding | | | Protocols | | |||
| | | | | | | | | | | | |||
| LWM2M | ver | 1.0 | Spec Version | | | LWM2M | ver | 1.0 | Spec Version | | |||
| Version | | | | | | Version | | | | | |||
| | | | | | | | | | | | |||
| SMS Number | sms | | MSISDN | | | SMS Number | sms | | MSISDN | | |||
+------------+-------+-------------------------------+--------------+ | +------------+-------+-------------------------------+--------------+ | |||
Table 5: LWM2M Additional Registration Parameters | Table 4: LWM2M Additional Registration Parameters | |||
The following RD registration parameters are not currently specified | The following RD registration parameters are not currently specified | |||
for use in LWM2M: | for use in LWM2M: | |||
et - Endpoint Type | et - Endpoint Type | |||
con - Context | con - Context | |||
The endpoint registration must include a payload containing links to | The endpoint registration must include a payload containing links to | |||
all supported objects and existing object instances, optionally | all supported objects and existing object instances, optionally | |||
including the appropriate link-format relations. | including the appropriate link-format relations. | |||
skipping to change at page 48, line 39 ¶ | skipping to change at page 48, line 5 ¶ | |||
Here is an example LWM2M registration payload: | Here is an example LWM2M registration payload: | |||
</1>,</1/0>,</3/0>,</5> | </1>,</1/0>,</3/0>,</5> | |||
This link format payload indicates that object ID 1 (LWM2M Server | This link format payload indicates that object ID 1 (LWM2M Server | |||
Object) is supported, with a single instance 0 existing, object ID 3 | Object) is supported, with a single instance 0 existing, object ID 3 | |||
(LWM2M Device object) is supported, with a single instance 0 | (LWM2M Device object) is supported, with a single instance 0 | |||
existing, and object 5 (LWM2M Firmware Object) is supported, with no | existing, and object 5 (LWM2M Firmware Object) is supported, with no | |||
existing instances. | existing instances. | |||
12.2.3. Alternate Base URI | 13.2.3. Alternate Base URI | |||
If the LWM2M endpoint exposes objects at a base URI other than the | If the LWM2M endpoint exposes objects at a base URI other than the | |||
default empty base path, the endpoint must register the base URI | default empty base path, the endpoint must register the base URI | |||
using rt="oma.lwm2m". An example link payload using alternate base | using rt="oma.lwm2m". An example link payload using alternate base | |||
URI would be: | URI would be: | |||
</my_lwm2m>;rt="oma.lwm2m",</my_lwm2m/1>,<my_lwm2m/1/0>,<my_lwm2m/5> | </my_lwm2m>;rt="oma.lwm2m",</my_lwm2m/1>,<my_lwm2m/1/0>,<my_lwm2m/5> | |||
This link payload indicates that the lwm2m objects will be placed | This link payload indicates that the lwm2m objects will be placed | |||
under the base URI "/my_lwm2m" and that object ID 1 (server) is | under the base URI "/my_lwm2m" and that object ID 1 (server) is | |||
supported, with a single instance 0 existing, and object 5 (firmware | supported, with a single instance 0 existing, and object 5 (firmware | |||
update) is supported. | update) is supported. | |||
12.2.4. LWM2M Update Endpoint Registration | 13.2.4. LWM2M Update Endpoint Registration | |||
An LWM2M Registration update proceeds as described in Section 5.3, | An LWM2M Registration update proceeds as described in Section 6.4, | |||
and adds some optional parameter updates: | and adds some optional parameter updates: | |||
lt - Registration Lifetime | lt - Registration Lifetime | |||
b - Protocol Binding | b - Protocol Binding | |||
sms - MSISDN | sms - MSISDN | |||
link payload - new or modified links | link payload - new or modified links | |||
A Registration update is also specified to be used to update the | A Registration update is also specified to be used to update the | |||
LWM2M server whenever the endpoint's UDP port or IP address are | LWM2M server whenever the endpoint's UDP port or IP address are | |||
changed. | changed. | |||
12.2.5. LWM2M De-Register Endpoint | 13.2.5. LWM2M De-Register Endpoint | |||
LWM2M allows for de-registration using the delete method on the | LWM2M allows for de-registration using the delete method on the | |||
returned location from the initial registration operation. LWM2M de- | returned location from the initial registration operation. LWM2M de- | |||
registration proceeds as described in Section 5.4. | registration proceeds as described in Section 6.5. | |||
13. Acknowledgments | 14. Acknowledgments | |||
Srdjan Krco, Szymon Sasin, Kerry Lynn, Esko Dijk, Anders Brandt, | Oscar Novo, Srdjan Krco, Szymon Sasin, Kerry Lynn, Esko Dijk, Anders | |||
Matthieu Vial, Mohit Sethi, Sampo Ukkola and Linyi Tian have provided | Brandt, Matthieu Vial, Mohit Sethi, Sampo Ukkola and Linyi Tian have | |||
helpful comments, discussions and ideas to improve and shape this | provided helpful comments, discussions and ideas to improve and shape | |||
document. Section 9 is based on an earlier draft by Kerry Lynn. | this document. Section 9 is based on an earlier draft by Kerry Lynn. | |||
Zach would also like to thank his colleagues from the EU FP7 SENSEI | Zach would also like to thank his colleagues from the EU FP7 SENSEI | |||
project, where many of the resource directory concepts were | project, where many of the resource directory concepts were | |||
originally developed. | originally developed. | |||
14. Changelog | 15. Changelog | |||
changes from -07 to -08 | ||||
o removed link target value returned from domain and group lookup | ||||
types | ||||
o Maximum length of domain parameter 63 bytes for consistency with | ||||
group | ||||
o removed option for simple POST of link data, don't require a | ||||
.well-known/core resource to accept POST data and handle it in a | ||||
special way; we already have /rd for that | ||||
o add IPv6 ND Option for discovery of an RD | ||||
o clarify group configuration section 6.1 that endpoints must be | ||||
registered before including them in a group | ||||
o removed all superfluous client-server diagrams | ||||
o simplified lighting example | ||||
o introduced Commissioning Tool | ||||
o RD-Look-up text is extended. | ||||
changes from -06 to -07 | changes from -06 to -07 | |||
o added text in the discovery section to allow content format hints | o added text in the discovery section to allow content format hints | |||
to be exposed in the discovery link attributes | to be exposed in the discovery link attributes | |||
o editorial updates to section 9 | o editorial updates to section 9 | |||
o update author information | o update author information | |||
skipping to change at page 52, line 29 ¶ | skipping to change at page 52, line 22 ¶ | |||
o Added the concept of an RD Domain and a registration parameter for | o Added the concept of an RD Domain and a registration parameter for | |||
it. | it. | |||
o Recommended the Location returned from a registration to be | o Recommended the Location returned from a registration to be | |||
stable, allowing for endpoint and Domain information to be changed | stable, allowing for endpoint and Domain information to be changed | |||
during updates. | during updates. | |||
o Changed the lookup interface to accept endpoint and Domain as | o Changed the lookup interface to accept endpoint and Domain as | |||
query string parameters to control the scope of a lookup. | query string parameters to control the scope of a lookup. | |||
15. References | 16. References | |||
15.1. Normative References | 16.1. Normative References | |||
[I-D.ietf-core-links-json] | [I-D.ietf-core-links-json] | |||
Li, K., Rahman, A., and C. Bormann, "Representing CoRE | Li, K., Rahman, A., and D. Bormann, "Representing CoRE | |||
Formats in JSON and CBOR", draft-ietf-core-links-json-04 | Formats in JSON and CBOR", draft-ietf-core-links-json-05 | |||
(work in progress), November 2015. | (work in progress), April 2016. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
RFC 3986, DOI 10.17487/RFC3986, January 2005, | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
<http://www.rfc-editor.org/info/rfc3986>. | <http://www.rfc-editor.org/info/rfc3986>. | |||
skipping to change at page 53, line 33 ¶ | skipping to change at page 53, line 29 ¶ | |||
<http://www.rfc-editor.org/info/rfc6690>. | <http://www.rfc-editor.org/info/rfc6690>. | |||
[RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | [RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service | |||
Discovery", RFC 6763, DOI 10.17487/RFC6763, February 2013, | Discovery", RFC 6763, DOI 10.17487/RFC6763, February 2013, | |||
<http://www.rfc-editor.org/info/rfc6763>. | <http://www.rfc-editor.org/info/rfc6763>. | |||
[RFC7396] Hoffman, P. and J. Snell, "JSON Merge Patch", RFC 7396, | [RFC7396] Hoffman, P. and J. Snell, "JSON Merge Patch", RFC 7396, | |||
DOI 10.17487/RFC7396, October 2014, | DOI 10.17487/RFC7396, October 2014, | |||
<http://www.rfc-editor.org/info/rfc7396>. | <http://www.rfc-editor.org/info/rfc7396>. | |||
15.2. Informative References | 16.2. Informative References | |||
[I-D.ietf-core-interfaces] | ||||
Shelby, Z., Vial, M., and M. Koster, "Reusable Interface | ||||
Definitions for Constrained RESTful Environments", draft- | ||||
ietf-core-interfaces-04 (work in progress), October 2015. | ||||
[RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | |||
STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, | STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, | |||
<http://www.rfc-editor.org/info/rfc1034>. | <http://www.rfc-editor.org/info/rfc1034>. | |||
[RFC1123] Braden, R., Ed., "Requirements for Internet Hosts - | [RFC1123] Braden, R., Ed., "Requirements for Internet Hosts - | |||
Application and Support", STD 3, RFC 1123, | Application and Support", STD 3, RFC 1123, | |||
DOI 10.17487/RFC1123, October 1989, | DOI 10.17487/RFC1123, October 1989, | |||
<http://www.rfc-editor.org/info/rfc1123>. | <http://www.rfc-editor.org/info/rfc1123>. | |||
End of changes. 172 change blocks. | ||||
659 lines changed or deleted | 622 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/ |