| < draft-shelby-core-resource-directory-04.txt | draft-shelby-core-resource-directory-05.txt > | |||
|---|---|---|---|---|
| CoRE Z. Shelby | CoRE Z. Shelby | |||
| Internet-Draft Sensinode | Internet-Draft Sensinode | |||
| Intended status: Standards Track S. Krco | Intended status: Standards Track S. Krco | |||
| Expires: January 17, 2013 Ericsson | Expires: August 29, 2013 Ericsson | |||
| C. Bormann | C. Bormann | |||
| Universitaet Bremen TZI | Universitaet Bremen TZI | |||
| July 16, 2012 | February 25, 2013 | |||
| CoRE Resource Directory | CoRE Resource Directory | |||
| draft-shelby-core-resource-directory-04 | draft-shelby-core-resource-directory-05 | |||
| 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 42 ¶ | skipping to change at page 1, line 42 ¶ | |||
| 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 January 17, 2013. | This Internet-Draft will expire on August 29, 2013. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2012 IETF Trust and the persons identified as the | Copyright (c) 2013 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 | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| skipping to change at page 2, line 27 ¶ | skipping to change at page 2, line 27 ¶ | |||
| 3. Architecture and Use Cases . . . . . . . . . . . . . . . . . . 4 | 3. Architecture and Use Cases . . . . . . . . . . . . . . . . . . 4 | |||
| 3.1. Use Case: Cellular M2M . . . . . . . . . . . . . . . . . . 5 | 3.1. Use Case: Cellular M2M . . . . . . . . . . . . . . . . . . 5 | |||
| 3.2. Use Case: Home and Building Automation . . . . . . . . . . 6 | 3.2. Use Case: Home and Building Automation . . . . . . . . . . 6 | |||
| 4. Simple Directory Discovery . . . . . . . . . . . . . . . . . . 6 | 4. Simple Directory Discovery . . . . . . . . . . . . . . . . . . 6 | |||
| 4.1. Finding a Directory Server . . . . . . . . . . . . . . . . 7 | 4.1. Finding a Directory Server . . . . . . . . . . . . . . . . 7 | |||
| 5. Resource Directory Function Set . . . . . . . . . . . . . . . 8 | 5. Resource Directory Function Set . . . . . . . . . . . . . . . 8 | |||
| 5.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 8 | 5.1. Discovery . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5.2. Registration . . . . . . . . . . . . . . . . . . . . . . . 10 | 5.2. Registration . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.3. Update . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 5.3. Update . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.4. Validation . . . . . . . . . . . . . . . . . . . . . . . . 13 | 5.4. Validation . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5.5. Removal . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 5.5. Removal . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 6. RD Lookup Function Set . . . . . . . . . . . . . . . . . . . . 15 | 6. Group Function Set . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 7. New Link-Format Attributes . . . . . . . . . . . . . . . . . . 18 | 6.1. Register a Group . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 7.1. Resource Instance 'ins' attribute . . . . . . . . . . . . 18 | 6.2. Group Removal . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 7.2. Export 'exp' attribute . . . . . . . . . . . . . . . . . . 19 | 7. RD Lookup Function Set . . . . . . . . . . . . . . . . . . . . 18 | |||
| 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19 | 8. New Link-Format Attributes . . . . . . . . . . . . . . . . . . 23 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | 8.1. Resource Instance 'ins' attribute . . . . . . . . . . . . 23 | |||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 20 | 8.2. Export 'exp' attribute . . . . . . . . . . . . . . . . . . 23 | |||
| 11. Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . . 21 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . . 21 | 12. Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 22 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . . 26 | ||||
| 13.2. Informative References . . . . . . . . . . . . . . . . . . 26 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 26 | ||||
| 1. Introduction | 1. Introduction | |||
| The Constrained RESTful Environments (CoRE) work aims at realizing | The Constrained RESTful Environments (CoRE) work 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. | |||
| The discovery of resources offered by a constrained server is very | The discovery of resources offered by a constrained server is very | |||
| important in machine-to-machine applications where there are no | important in machine-to-machine applications where there are no | |||
| humans in the loop and static interfaces result in fragility. The | humans in the loop and static interfaces result in fragility. The | |||
| discovery of resources provided by an HTTP Web Server is typically | discovery of resources provided by an HTTP Web Server is typically | |||
| called Web Linking [RFC5988]. The use of Web Linking for the | called Web Linking [RFC5988]. The use of Web Linking for the | |||
| description and discovery of resources hosted by constrained web | description and discovery of resources hosted by constrained web | |||
| servers is specified by the CoRE Link Format | servers is specified by the CoRE Link Format [RFC6690]. This | |||
| [I-D.ietf-core-link-format]. This specification however only | specification however only describes how to discover resources from | |||
| describes how to discover resources from the web server that hosts | the web server that hosts them by requesting /.well-known/core. In | |||
| them by requesting /.well-known/core. In many M2M scenarios, direct | many M2M scenarios, direct discovery of resources is not practical | |||
| discovery of resources is not practical due to sleeping nodes, | due to sleeping nodes, disperse networks, or networks where multicast | |||
| disperse networks, or networks where multicast traffic is | traffic is inefficient. These problems can be solved by employing an | |||
| inefficient. These problems can be solved by employing an entity | entity called a Resource Directory (RD), which hosts descriptions of | |||
| called a Resource Directory (RD), which hosts descriptions of | ||||
| resources held on other servers, allowing lookups to be performed for | resources held on other servers, allowing lookups to be performed for | |||
| those resources. | those resources. | |||
| This document specifies the web interfaces that a Resource Directory | This document specifies the web interfaces that a Resource Directory | |||
| supports in order for web servers to discover the RD and to | supports in order for web servers to discover the RD and to | |||
| registrer, maintain, lookup and remove resources descriptions. | registrer, maintain, lookup and remove resource descriptions. | |||
| Furthermore, new link attributes useful in conjunction with a | Furthermore, new link attributes useful in conjunction with a | |||
| Resource Directory are defined. Although the examples in this | Resource Directory are defined. Although the examples in this | |||
| document show the use of these interfaces with CoAP | document show the use of these interfaces with CoAP | |||
| [I-D.ietf-core-coap], they may be applied in an equivalent manner to | [I-D.ietf-core-coap], they may be applied in an equivalent manner to | |||
| HTTP [RFC2616]. | HTTP [RFC2616]. | |||
| 2. Terminology | 2. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. The term | document are to be interpreted as described in [RFC2119]. The term | |||
| "byte" is used in its now customary sense as a synonym for "octet". | "byte" is used in its now customary sense as a synonym for "octet". | |||
| This specification requires readers to be familiar with all the terms | This specification requires readers to be familiar with all the terms | |||
| and concepts that are discussed in [RFC5988] and | and concepts that are discussed in [RFC5988] and [RFC6690]. Readers | |||
| [I-D.ietf-core-link-format]. Readers should also be familiar with | should also be familiar with the terms and concepts discussed in | |||
| the terms and concepts discussed in [I-D.ietf-core-coap]. The URI | [I-D.ietf-core-coap]. The URI Template format is used to describe | |||
| Template format is used to describe the REST interfaces defined in | the REST interfaces defined in this specification [RFC6570]. This | |||
| this specification [RFC6570]. This specification makes use of the | specification makes use of the following additional terminology: | |||
| following additional terminology: | ||||
| Resource Directory | Resource Directory | |||
| An web entity that stores information about web resources and | An web entity that stores information about web resources and | |||
| implements the REST interfaces defined in this specification for | implements the REST interfaces defined in this specification for | |||
| registration and lookup of those resources. | registration and lookup of those resources. | |||
| Domain | Domain | |||
| In the context of a Resource Directory, a Domain is a logical | In the context of a Resource Directory, a domain is a logical | |||
| grouping of endpoints. All endpoint within a Domain MUST be | grouping of endpoints. All endpoint within a domain MUST be | |||
| unique. This specification assumes that the list of Domains | unique. This specification assumes that the list of Domains | |||
| supported by an RD is pre-configured by that RD. | supported by an RD is pre-configured by that RD. | |||
| Group | ||||
| In the context of a Resource Directory, a group is a logical | ||||
| grouping of endpoints for the purpose of group communications. | ||||
| All groups within a domain MUST be unique. | ||||
| Endpoint | Endpoint | |||
| An endpoint (EP) is a term used to describe a web server or client | An endpoint (EP) is a term used to describe a web server or client | |||
| in [I-D.ietf-core-coap]. In the context of this specification an | in [I-D.ietf-core-coap]. In the context of this specification an | |||
| endpoint is used to describe a web server that registers resources | endpoint is used to describe a web server that registers resources | |||
| to the Resource Directory. An endpoint is identified by its | to the Resource Directory. An endpoint is identified by its | |||
| endpoint name, which is included during registration, and MUST be | endpoint name, which is included during registration, and MUST be | |||
| unique within the associated Domain of the registration. | unique within the associated domain of the registration. | |||
| 3. Architecture and Use Cases | 3. Architecture and Use Cases | |||
| The resource directory architecture is shown in Figure 1. A Resource | The resource directory architecture is shown in Figure 1. A Resource | |||
| Directory (RD) is used as a repository for Web Links [RFC5988] about | Directory (RD) is used as a repository for Web Links [RFC5988] about | |||
| resources hosted on other web servers, which are called endpoints | resources hosted on other web servers, which are called endpoints | |||
| (EP). An endpoint is a web server associated with a port, thus a | (EP). An endpoint is a web server associated with a port, thus a | |||
| physical node may host one or more endpoints. The RD implements a | physical node may host one or more endpoints. The RD implements a | |||
| set of REST interfaces for endpoints to register and maintain sets of | set of REST interfaces for endpoints to register and maintain sets of | |||
| Web Links (called resource directory entries), for the RD to validate | Web Links (called resource directory entries), for the RD to validate | |||
| entries, and for clients to lookup resources from the RD. Endpoints | entries, and for clients to lookup resources from the RD. Endpoints | |||
| themselves can also act as clients. An RD can be logically segmented | themselves can also act as clients. An RD can be logically segmented | |||
| by the use of Domains. The Domain an endpoint is associated with can | by the use of Domains. The domain an endpoint is associated with can | |||
| be defined by the RD or configured by an outside entity. | be defined by the RD or configured by an outside entity. | |||
| 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 | |||
| periodially refreshed. An endpoint is provided with interfaces to | periodially 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 a RD using the CoRE Link Format is defined. | a mechanism to discover a RD using the CoRE Link Format is defined. | |||
| It is also possible for an RD to proactively discover Web Links from | It is also possible for an RD to proactively discover Web Links from | |||
| endpoints and add them as resource directory entries, or to validate | endpoints and add them as resource directory entries, or to validate | |||
| existing resource directory entries. A lookup interface for | existing resource directory entries. A lookup interface for | |||
| skipping to change at page 6, line 41 ¶ | skipping to change at page 6, line 44 ¶ | |||
| implement the Resource Directory Function Set and thus explicitly | implement the Resource Directory Function Set and thus explicitly | |||
| register with a Resource Directory (or other such directory server). | register with a Resource Directory (or other such directory server). | |||
| Instead, simple endpoints can implement the generic Simple Directory | Instead, simple endpoints can implement the generic Simple Directory | |||
| Discovery approach described in this section. An RD implementing | Discovery approach described in this section. An RD implementing | |||
| this specification MUST implement Simple Directory Discovery. | this specification MUST implement Simple Directory Discovery. | |||
| However, there may be security reasons why this form of directory | However, there may be security reasons why this form of directory | |||
| discovery would be disabled. | discovery would be disabled. | |||
| This approach requires that the endpoint makes the hosted resources | This approach requires that the endpoint makes the hosted resources | |||
| that it wants discovered available as links on its /.well-known/core | that it wants discovered available as links on its /.well-known/core | |||
| interface as specified in [I-D.ietf-core-link-format]. | interface as specified in [RFC6690]. | |||
| The endpoint then finds one or more IP addresses of the directory | The endpoint then finds one or more IP addresses of the directory | |||
| server it wants to know about its resources as described in | server it wants to know about its resources as described in | |||
| Section 4.1. | Section 4.1. | |||
| An endpoint that wants to make itself discoverable occasionally sends | An endpoint that wants to make itself discoverable occasionally sends | |||
| a POST request to the /.well-known/core URI of any candidate | a POST request to the /.well-known/core URI of any candidate | |||
| directory server that it finds. The body of the POST request is | directory server that it finds. The body of the POST request is | |||
| either | either | |||
| o empty, in which case the directory server is encouraged by this | o empty, in which case the directory server is encouraged by this | |||
| POST request to perform GET requests at the requesting server's | POST request to perform GET requests at the requesting server's | |||
| default discovery URI. | default discovery URI. | |||
| or | or | |||
| o a link-format document, which indicates the specific services that | o a link-format document, which indicates the specific services that | |||
| the requesting server wants to make known to the directory server. | the requesting server wants to make known to the directory server. | |||
| The directory server integrates the information it received this way | The directory server integrates the information it received this way | |||
| skipping to change at page 7, line 40 ¶ | skipping to change at page 7, line 44 ¶ | |||
| 4.1. Finding a Directory Server | 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 [I-D.ietf-6lowpan-nd], | 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. | |||
| 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 POST requests to that well-known | are found by simply sending POST requests to that well-known | |||
| multicast address (details TBD). | multicast address (details TBD). | |||
| 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. E.g., | limit requests to candidate IP addresses that don't work out. E.g., | |||
| skipping to change at page 8, line 44 ¶ | skipping to change at page 8, line 48 ¶ | |||
| 5.1. Discovery | 5.1. 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 | IP address, 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 (also see Section 4.1). This section | using the CoRE Link Format (also see Section 4.1). 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 [I-D.ietf-core-link-format] as the required | CoRE Link Format [RFC6690] as the required mechanism. It is however | |||
| mechanism. It is however expected that RDs will also be discoverable | expected that RDs will also be discoverable via other methods | |||
| via other methods depending on the deployment. | depending on the deployment. | |||
| Discovery is performed by sending either a multicast or unicast GET | Discovery is performed by sending either a multicast or unicast GET | |||
| request to /.well-known/core and including a Resource Type (rt) | request to /.well-known/core and including a Resource Type (rt) | |||
| parameter [I-D.ietf-core-link-format] with the value "core.rd" in the | parameter [RFC6690] with the value "core.rd" in the query string. | |||
| query string. Likewise, a Resource Type parameter value of "core.rd- | Likewise, a Resource Type parameter value of "core.rd-lookup" is used | |||
| lookup" is used to discover the RD Lookup Function Set. Upon success, | to discover the RD Lookup Function Set. Upon success, the response | |||
| the response will contain a payload with a link format entry for each | will contain a payload with a link format entry for each RD | |||
| RD discovered, with the URL indicating the root resource of the RD. | discovered, with the URL indicating the root resource of the RD. | |||
| When performing multicast discovery, the multicast IP address used | When performing multicast discovery, the multicast IP address used | |||
| will depend on the scope required and the multicast capabilities of | will depend on the scope required and the multicast capabilities of | |||
| the network. | the network. | |||
| An RD implementation of this specification MUST support query | An RD implementation of this specification MUST support query | |||
| filtering for the rt parameter as defined in | filtering for the rt parameter as defined in [RFC6690]. | |||
| [I-D.ietf-core-link-format]. | ||||
| The discovery request interface is specified as follows: | The discovery request interface is specified as follows: | |||
| Interaction: EP -> RD | Interaction: EP -> RD | |||
| Method: GET | Method: GET | |||
| URI Template: /.well-known/core{?rt} | URI Template: /.well-known/core{?rt} | |||
| URI Template Variables: | URI Template Variables: | |||
| skipping to change at page 10, line 17 ¶ | skipping to change at page 10, line 17 ¶ | |||
| | ----- GET /.well-known/core?rt=core.rd* ------> | | | ----- GET /.well-known/core?rt=core.rd* ------> | | |||
| | | | | | | |||
| | | | | | | |||
| | <---- 2.05 Content "</rd>; rt="core.rd" ------ | | | <---- 2.05 Content "</rd>; rt="core.rd" ------ | | |||
| | | | | | | |||
| 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", | </rd>;rt="core.rd", | |||
| </rd-lookup>;rt="core.rd-lookup" | </rd-lookup>;rt="core.rd-lookup", | |||
| </rd-group>;rt="core.rd-group" | ||||
| 5.2. Registration | 5.2. 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 along with query string parameters indicating the | CoRE Link Format along with query string parameters indicating the | |||
| name of the endpoint, its Domain and the lifetime of the | name of the endpoint, its domain and the lifetime of the | |||
| registration. All parameters except the endpoint name are optional. | registration. All parameters except the endpoint name are optional. | |||
| The RD then creates a new resource or updates an existing resource in | It is expected that other specifications MAY define further | |||
| the RD and returns its location. An endpoint MUST use that location | parameters (it is to be determined if a registry of parameters is | |||
| when refreshing registrations using this interface. endpoint | needed for this purpose). The RD then creates a new resource or | |||
| resources in the RD are kept active for the period indicated by the | updates an existing resource in the RD and returns its location. An | |||
| lifetime parameter. The endpoint is responsible for refreshing the | endpoint MUST use that location when refreshing registrations using | |||
| entry within this period using either the registration or update | this interface. Endpoint resources in the RD are kept active for the | |||
| interface. The registration interface MUST be implemented to be | period indicated by the lifetime parameter. The endpoint is | |||
| idempotent, so that registering twice with the same endpoint | responsible for refreshing the entry within this period using either | |||
| parameter does not create multiple RD entries. | the registration or update interface. The registration interface | |||
| MUST be implemented to be idempotent, so that registering twice with | ||||
| the same endpoint parameter does not create multiple RD entries. | ||||
| 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,rt,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. An RD SHOULD use the value "rd" for this | RD Function Set. An RD SHOULD use the value "rd" for this | |||
| variable whenever possible. | variable whenever possible. | |||
| ep := Endpoint (mandatory). The endpoint identifier or name of | ep := Endpoint (mandatory). The endpoint identifier or name of | |||
| the registering node, unique within that Domain. The maximum | the registering node, 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 endpoint | d := Domain (optional). The domain to which this endpoint | |||
| belongs. The maximum length of this parameter is 63 bytes. | belongs. The maximum length of this parameter is 63 bytes. | |||
| Optional. When this parameter is elided, the RD MAY associate | Optional. When this parameter is elided, the RD MAY associate | |||
| the endpoint with a configured default Domain. | the endpoint with a configured default domain. | |||
| rt := Endpoint Type (optional). The semantic type of the | et := Endpoint Type (optional). The semantic type of the | |||
| endpoint. The maximum length of this parameter is 63 bytes. | endpoint. The maximum length of this parameter is 63 bytes. | |||
| Optional. | 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. 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. | source port of the register request are assumed. | |||
| Content-Type: application/link-format | Content-Type: application/link-format | |||
| The following response codes are defined for this interface: | The following response codes are defined for this interface: | |||
| Success: 2.01 "Created". The Location header MUST be included with | Success: 2.01 "Created". The Location header MUST be included with | |||
| the new resource entry for the endpoint. This Location MUST be a | the new resource entry for the endpoint. This Location MUST be a | |||
| stable identifier generated by the RD as it is used for all | stable identifier generated by the RD as it is used for all | |||
| subsequent operations on this registration (update, delete). | subsequent operations on this registration (update, delete). | |||
| skipping to change at page 12, line 15 ¶ | skipping to change at page 12, line 16 ¶ | |||
| EP RD | EP RD | |||
| | | | | | | |||
| | --- POST /rd?ep=node1 "</sensors..." -------> | | | --- POST /rd?ep=node1 "</sensors..." -------> | | |||
| | | | | | | |||
| | | | | | | |||
| | <-- 2.01 Created Location: /rd/4521 ---------- | | | <-- 2.01 Created Location: /rd/4521 ---------- | | |||
| | | | | | | |||
| Req: POST coap://rd.example.com/rd?ep=node1 | Req: POST coap://rd.example.com/rd?ep=node1 | |||
| Payload: | Payload: | |||
| </sensors/temp>;ct=41;rt="TemperatureC";if="sensor", | </sensors/temp>;ct=41;rt="temperature-c";if="sensor", | |||
| </sensors/light>;ct=41;rt="LightLux";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 | |||
| 5.3. Update | 5.3. 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 | |||
| PUT request to the resource returned in the Location option in the | PUT request to the resource returned in the Location option in the | |||
| response to the first registration. An update MAY contain | response to the first registration. An update MAY contain | |||
| registration parameters or a payload in CoRE Link Format if there | registration parameters if there have been changes since the last | |||
| have been changes since the last registration or update. Paremeters | registration or update. Parameters that have not changed SHOULD NOT | |||
| that have not changed SHOULD NOT be included in an update. | be included in an update. Upon receiving an update request, the RD | |||
| resets the timeout for that endpoint and stores the values of the | ||||
| parameters included in the update (if any). | ||||
| The update request interface is specified as follows: | The update request interface is specified as follows: | |||
| Interaction: EP -> RD | Interaction: EP -> RD | |||
| Method: PUT | Method: PUT | |||
| URI Template: /{+location}{?rt,lt,con} | URI Template: /{+location}{?et,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 | |||
| result of a successful registration. | result of a successful registration. | |||
| rt := Endpoint Type (optional). The semantic type of the | et := Endpoint Type (optional). The semantic type of the | |||
| endpoint. The maximum length of this parameter is 63 btyes. | endpoint. The maximum length of this parameter is 63 btyes. | |||
| Optional. | 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. 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. | source port used to register are assumed. | |||
| Content-Type: application/link-format (if any) | Content-Type: None | |||
| The following response codes are defined for this interface: | The following response codes are defined for this interface: | |||
| Success: 2.04 "Changed" in case the resource and/or lifetime was | Success: 2.04 "Changed" in the update was successfully processed. | |||
| successfully updated | ||||
| Failure: 4.00 "Bad Request". Malformed request. | Failure: 4.00 "Bad Request". Malformed request. | |||
| Failure: 5.03 "Service Unavailable". Service could not perform the | Failure: 5.03 "Service Unavailable". Service could not perform the | |||
| operation. | operation. | |||
| The following example shows an endpoint updating a new set of | The following example shows an endpoint updating a new set of | |||
| resources to an RD using this interface. | resources to an RD using this interface. | |||
| EP RD | EP RD | |||
| | | | | | | |||
| | --- PUT /rd/4521 "</sensors..." ------------> | | | --- PUT /rd/4521 --------------------------> | | |||
| | | | | | | |||
| | | | | | | |||
| | <-- 2.04 Changed ---------------------------- | | | <-- 2.04 Changed ---------------------------- | | |||
| | | | | | | |||
| Req: PUT /rd/4521 | Req: PUT /rd/4521 | |||
| Payload: | ||||
| </sensors/temp/1>;ct=41;ins="Indoor";rt="TemperatureC";if="sensor", | ||||
| </sensors/temp/2>;ct=41;ins="Outdoor";rt="TemperatureC";if="sensor", | ||||
| </sensors/light>;ct=41;rt="LightLux";if="sensor" | ||||
| Res: 2.04 Changed | Res: 2.04 Changed | |||
| 5.4. Validation | 5.4. Validation | |||
| In some cases, an RD may want to validate that it has the latest | In some cases, an RD may want to validate that it has the latest | |||
| version of an endpoint's resources. This can be performed with a GET | version of an endpoint's resources. This can be performed with a GET | |||
| on the well-known interface of the CoRE Link Format including the | on the well-known interface of the CoRE Link Format including the | |||
| latest ETag stored for that endpoint. For the purpose of validation, | latest ETag stored for that endpoint. For the purpose of validation, | |||
| an endpoint implementing this specification SHOULD support ETag | an endpoint implementing this specification SHOULD support ETag | |||
| skipping to change at page 15, line 42 ¶ | skipping to change at page 16, line 5 ¶ | |||
| | --- DELETE /rd/4521 ------------------------> | | | --- DELETE /rd/4521 ------------------------> | | |||
| | | | | | | |||
| | | | | | | |||
| | <-- 2.02 Deleted ---------------------------- | | | <-- 2.02 Deleted ---------------------------- | | |||
| | | | | | | |||
| Req: DELETE /rd/4521 | Req: DELETE /rd/4521 | |||
| Res: 2.02 Deleted | Res: 2.02 Deleted | |||
| 6. RD Lookup Function Set | 6. Group Function Set | |||
| This section defines a function set for the creation of groups of | ||||
| endpoints for the purpose of managing and looking up endpoints for | ||||
| group operations. The group function set is similar to the resource | ||||
| 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 | ||||
| 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 | ||||
| multicast address associated with it. | ||||
| 6.1. Register a Group | ||||
| In order to create a group, a management entity used to configure | ||||
| groups, makes a request to the RD indicating the name of the group to | ||||
| create (or update), the optional domain the group belongs to, and the | ||||
| optional multicast address of the group. The registration message | ||||
| includes the list of endpoints that belong to that group. If an | ||||
| endpoint has already registered with the RD, the RD attempts to use | ||||
| the context of the endpoint from its RD endpoint entry. If the | ||||
| client registering the group knows the endpoint has already | ||||
| registered, then it MAY send a blank target URI for that endpoint | ||||
| link when registering the group. | ||||
| The registration request interface is specified as follows: | ||||
| Interaction: Manager -> RD | ||||
| Method: POST | ||||
| URI Template: /{+rd-group}{?gp,d,con} | ||||
| URI Template Variables: | ||||
| rd-group := RD Group Function Set path (mandatory). This is the | ||||
| path of the RD Group Function Set. An RD SHOULD use the value | ||||
| "rd-group" for this variable whenever possible. | ||||
| gp := Group Name (mandatory). The name of the group to be | ||||
| created or replaced, unique within that domain. The maximum | ||||
| length of this parameter is 63 bytes. | ||||
| d := Domain (optional). The domain to which this group belongs. | ||||
| The maximum length of this parameter is 63 bytes. Optional. | ||||
| When this parameter is elided, the RD MAY associate the | ||||
| endpoint with a configured default domain. | ||||
| con := Context (optional). This parameter is used to set the IP | ||||
| multicast address at which this server is available in the form | ||||
| scheme://multicast-address:port. Optional. In the absence of | ||||
| this parameter no multicast address is configured. | ||||
| Content-Type: application/link-format | ||||
| The following response codes are defined for this interface: | ||||
| Success: 2.01 "Created". The Location header MUST be included with | ||||
| the new group entry. This Location MUST be a stable identifier | ||||
| generated by the RD as it is used for delete operations on this | ||||
| registration. | ||||
| Failure: 4.00 "Bad Request". Malformed request. | ||||
| Failure: 5.03 "Service Unavailable". Service could not perform the | ||||
| operation. | ||||
| The following example shows a group with the name "lights" | ||||
| registering two endpoints to an RD using this interface. The | ||||
| resulting location /rd-group/12 is just an example of an RD generated | ||||
| 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 | ||||
| Payload: | ||||
| <>;ep="node1", | ||||
| <>;ep="node2" | ||||
| Res: 2.01 Created | ||||
| Location: /rd-group/12 | ||||
| 6.2. Group Removal | ||||
| A group can be removed simply by sending a removal message to the | ||||
| location returned when registering the group. Removing a group MUST | ||||
| NOT remove the endpoints of the group from the RD. | ||||
| The removal request interface is specified as follows: | ||||
| Interaction: Manager -> RD | ||||
| Method: DELETE | ||||
| URI Template: /{+location} | ||||
| URI Template Variables: | ||||
| location := This is the Location path returned by the RD as a | ||||
| result of a successful group registration. | ||||
| The following responses codes are defined for this interface: | ||||
| Success: 2.02 "Deleted" upon successful deletion | ||||
| Failure: 4.00 "Bad Request". Malformed request. | ||||
| Failure: 5.03 "Service Unavailable". Service could not perform the | ||||
| operation. | ||||
| The following examples shows successful removal of the group from the | ||||
| RD. | ||||
| EP RD | ||||
| | | | ||||
| | --- DELETE /rd-group/412 -------------------> | | ||||
| | | | ||||
| | | | ||||
| | <-- 2.02 Deleted ---------------------------- | | ||||
| | | | ||||
| Req: DELETE /rd-group/12 | ||||
| Res: 2.02 Deleted | ||||
| 7. 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, endpoints and resources | This function set allows lookups for domains, groups, endpoints and | |||
| using attributes defined in the RD Function Set and for use with the | resources using attributes defined in the RD Function Set and for use | |||
| CoRE Link Format. The result of a lookup request is the list of | with the CoRE Link Format. The result of a lookup request is the | |||
| links (if any) in CoRE Link Format corresponding to the type of | list of links (if any) in CoRE Link Format corresponding to the type | |||
| lookup. The target of these links SHOULD be the actual location of | of lookup. The target of these links SHOULD be the actual location | |||
| the Domain, endpoint or resource, but MAY be an intermediate proxy | of the domain, endpoint or resource, but MAY be an intermediate proxy | |||
| e.g. in the case of an HTTP lookup interface for CoAP endpoints. | e.g. in the case of an HTTP lookup interface for CoAP endpoints. | |||
| 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 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-type}{?d,ep,resource-param} | URI Template: /{+rd-lookup-base}/ | |||
| {lookup-type}{?d,ep,gp,et,rt,page,count,resource-param} | ||||
| Parameters: | Parameters: | |||
| 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. | |||
| lookup-type := ("d", "ep", "res") (mandatory) This variable is | lookup-type := ("d", "ep", "res", "gp") (mandatory) This | |||
| used to select the kind of lookup to perform (Domain, endpoint | variable is used to select the kind of lookup to perform | |||
| or resource). | (domain, endpoint or resource). | |||
| ep := endpoint (optional). Used for endpoint and resource | ep := Endpoint (optional). Used for endpoint, group and | |||
| lookups. | resource lookups. | |||
| d := Domain (optional). Used for Domain, endpoint and resource | d := Domain (optional). Used for domain, group, endpoint and | |||
| lookups. | resource lookups. | |||
| rt := endpoint type (optional). Used for endpoint lookups. | page := Page (optional). Parameter can not be used without the | |||
| count parameter. Results are returned from result set in pages | ||||
| that contains 'count' results starting from index (page * | ||||
| count). | ||||
| count := Count (optional). Number of results is limited to this | ||||
| parameter value. If the parameter is not present, then an RD | ||||
| implementation specific default value SHOULD be used. | ||||
| rt := Resource type (optional). Used for group, endpoint and | ||||
| resource lookups. | ||||
| rt := Endpoint type (optional). Used for group, endpoint and | ||||
| resource lookups. | ||||
| resource-param := Link attribute parameters (optional). Any | resource-param := Link attribute parameters (optional). Any | |||
| link attribute as defined in Section 4.1 of | link attribute as defined in Section 4.1 of [RFC6690], used for | |||
| [I-D.ietf-core-link-format], used for resource lookups. | resource lookups. | |||
| The following responses codes are defined for this interface: | The following responses codes are defined for this interface: | |||
| Success: 2.05 "Content" with an application/link-format payload | Success: 2.05 "Content" with an application/link-format payload | |||
| containing a matching entries for the lookup. | containing a matching entries for the lookup. | |||
| Failure: 4.04 "Not Found" in case no matching entry is found for a | Failure: 4.04 "Not Found" in case no matching entry is found for a | |||
| unicast request. | unicast request. | |||
| Failure: No error response to a multicast request. | Failure: No error response to a multicast request. | |||
| Failure: 4.00 "Bad Request". Malformed request. | Failure: 4.00 "Bad Request". Malformed request. | |||
| Failure: 5.03 "Service Unavailable". Service could not perform the | Failure: 5.03 "Service Unavailable". Service could not perform the | |||
| operation. | operation. | |||
| The following example shows a client performing a resource lookup: | The following example shows a client performing a resource lookup: | |||
| Client RD | Client RD | |||
| | | | | | | |||
| | ----- GET /rd-lookup/res?rt=Temperature -----------------> | | | ----- GET /rd-lookup/res?rt=temperature -----------------> | | |||
| | | | | | | |||
| | | | | | | |||
| | <-- 2.05 Content "<coap://node1/temp>;rt="Temperature" ---- | | | <-- 2.05 Content "<coap://node1/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://{ip:port}/temp>;rt="Temperature" | <coap://{ip:port}/temp> | |||
| The following example shows a client performing an endpoint lookup: | The following example shows a client performing an endpoint lookup: | |||
| Client RD | Client RD | |||
| | | | | | | |||
| | ----- GET /rd-lookup/ep?rt=PowerNode --------------------> | | | ----- GET /rd-lookup/ep?et=power-node --------------------> | | |||
| | | | | | | |||
| | | | | | | |||
| | <-- 2.05 Content "<coap://{ip:port}>;ep="node5" ----------- | | | <-- 2.05 Content "<coap://{ip:port}>;ep="node5" ----------- | | |||
| | | | | | | |||
| Req: GET /rd-lookup/ep?rt=PowerNode | Req: GET /rd-lookup/ep?et=power-node | |||
| Res: 2.05 Content | Res: 2.05 Content | |||
| <coap://{ip:port}>;ep="node5" | <coap://{ip:port}>;ep="node5", | |||
| <coap://{ip:port}>;ep="node7" | <coap://{ip:port}>;ep="node7" | |||
| The following example shows a client performing a Domain lookup: | The following example shows a client performing a domain lookup: | |||
| Client RD | Client RD | |||
| | | | | | | |||
| | ----- GET /rd-lookup/domain -----------------------------> | | | ----- GET /rd-lookup/d ----------------------------------> | | |||
| | | | | | | |||
| | | | | | | |||
| | <-- 2.05 Content "</rd>;d=domain1,</rd>;d=domain2 --------- | | | <-- 2.05 Content "</rd>;d=domain1,</rd>;d=domain2 --------- | | |||
| | | | | | | |||
| Req: GET /rd-lookup/domain | Req: GET /rd-lookup/d | |||
| Res: 2.05 Content | Res: 2.05 Content | |||
| </rd>;d=domain1, | </rd>;d="domain1", | |||
| </rd>;d=domain2 | </rd>;d="domain2" | |||
| 7. New Link-Format Attributes | The following example shows a client performing a group lookup for | |||
| all groups: | ||||
| Client RD | ||||
| | | | ||||
| | ----- GET /rd-lookup/gp ---------------------------------> | | ||||
| | | | ||||
| | | | ||||
| | <-- 2.05 Content </rd-group/12>;gp="lights1";d="domain1" -- | | ||||
| | | | ||||
| Req: GET /rd-lookup/gp | ||||
| Res: 2.05 Content | ||||
| </rd-group/12>;gp="lights1";d="domain1" | ||||
| The following example shows a client performing a lookup for all | ||||
| endpoints in a particular group: | ||||
| Client RD | ||||
| | | | ||||
| | ----- GET GET /rd-lookup/ep?gp=lights1-------------------> | | ||||
| | | | ||||
| | | | ||||
| | <-- 2.05 Content "</rd>;d=domain1,</rd>;d=domain2 --------- | | ||||
| | | | ||||
| Req: GET /rd-lookup/ep?gp=lights1 | ||||
| Res: 2.05 Content | ||||
| <coap://host:port>;ep="node1", | ||||
| <coap://host:port>;ep="node2", | ||||
| The following example shows a client performing a lookup for all | ||||
| groups an endpoint belongs to: | ||||
| Client RD | ||||
| | | | ||||
| | ----- GET /rd-lookup/gp?ep=node1 ------------------------> | | ||||
| | | | ||||
| | | | ||||
| | <-- 2.05 Content "</rd>;d=domain1,</rd>;d=domain2 --------- | | ||||
| | | | ||||
| Req: GET /rd-lookup/gp?ep=node1 | ||||
| Res: 2.05 Content | ||||
| <coap://host:port>;gp="lights1";ep="node1", | ||||
| 8. 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 | |||
| [I-D.ietf-core-link-format]: | [RFC6690]: | |||
| link-extension = ( "ins" "=" quoted-string ) ; Max 63 bytes | link-extension = ( "ins" "=" quoted-string ) ; Max 63 bytes | |||
| link-extension = ( "exp" ) | link-extension = ( "exp" ) | |||
| 7.1. Resource Instance 'ins' attribute | 8.1. Resource Instance 'ins' attribute | |||
| 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 from other similar | resource, which makes it possible to distinguish from other similar | |||
| resources. This attribute is similar in use to the "Instance" | resources. This attribute is similar in use to the "Instance" | |||
| portion of a DNS-SD record, and SHOULD be unique across resources | portion of a DNS-SD record, and SHOULD be unique across resources | |||
| with the same Resource Type attribute in the Domain it is used. A | with the same Resource Type attribute in the domain it is used. A | |||
| Resource Instance might be a descriptive string like "Ceiling Light, | Resource Instance might be a descriptive string like "Ceiling Light, | |||
| Room 3", a short ID like "AF39" or a unique UUID or iNumber. This | Room 3", a short ID like "AF39" or a unique UUID or iNumber. This | |||
| attribute is used by a Resource Directory to distinguish between | attribute is used by a Resource Directory to distinguish between | |||
| multiple instances of the same resource type within a system. | multiple instances of the same resource type within a system. | |||
| 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. | |||
| 7.2. Export 'exp' attribute | 8.2. Export 'exp' attribute | |||
| 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. | |||
| 8. Security Considerations | 9. Security Considerations | |||
| This document needs the same security considerations as described in | This document needs the same security considerations as described in | |||
| Section 7 of [RFC5988] and Section 6 of [I-D.ietf-core-link-format]. | Section 7 of [RFC5988] and Section 6 of [RFC6690]. The /.well-known/ | |||
| The /.well-known/core resource may be protected e.g. using DTLS when | core resource may be protected e.g. using DTLS when hosted on a CoAP | |||
| hosted on a CoAP server as described in [I-D.ietf-core-coap]. | server as described in [I-D.ietf-core-coap]. | |||
| 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. | |||
| 9. IANA Considerations | 10. IANA Considerations | |||
| "core.rd" and "core.rd-lookup" resource type needs to be registered | "core.rd", "core.rd-group" and "core.rd-lookup" resource types need | |||
| when the appropriate registry is created by | to be registered with the resource type registry defined by | |||
| [I-D.ietf-core-link-format]. | [RFC6690]. | |||
| The "exp" attribute needs to be registered when a future Web Linking | The "exp" attribute needs to be registered when a future Web Linking | |||
| attribute is created. | attribute is created. | |||
| 10. Acknowledgments | 11. Acknowledgments | |||
| Szymon Sasin, Kerry Lynn, Peter van der Stok, Anders Brandt, Matthieu | Szymon Sasin, Kerry Lynn, Esko Dijk, Peter van der Stok, Anders | |||
| Vial, Sampo Ukkola and Linyi Tian have provided helpful comments, | Brandt, Matthieu Vial, Sampo Ukkola and Linyi Tian have provided | |||
| discussions and ideas to improve and shape this document. The | helpful comments, discussions and ideas to improve and shape this | |||
| authors would also like to thank their collagues from the EU FP7 | document. The authors would also like to thank their collagues from | |||
| SENSEI project, where many of the resource directory concepts were | the EU FP7 SENSEI project, where many of the resource directory | |||
| originally developed. | concepts were originally developed. | |||
| 11. Changelog | 12. Changelog | |||
| Changes from -04 to -05: | ||||
| o Restricted Update to parameter updates. | ||||
| o Added pagination support for the Lookup interface. | ||||
| o Minor editing, bug fixes and reference updates. | ||||
| o Added group support. | ||||
| o Changed rt= to et= for the registration & update interface | ||||
| Changes from -03 to -04: | Changes from -03 to -04: | |||
| o Added the ins= parameter back for the DNS-SD mapping. | o Added the ins= parameter back for the DNS-SD mapping. | |||
| o Integrated the Simple Directory Discovery from Carsten. | o Integrated the Simple Directory Discovery from Carsten. | |||
| o Editorial improvements. | o Editorial improvements. | |||
| o Fixed the use of ETags. | o Fixed the use of ETags. | |||
| skipping to change at page 21, line 12 ¶ | skipping to change at page 25, line 49 ¶ | |||
| o Added the concept of an RD Domain and a registration parameter | o Added the concept of an RD Domain and a registration parameter | |||
| for it. | for 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. | |||
| 12. References | 13. References | |||
| 13.1. Normative References | ||||
| 12.1. Normative References | ||||
| [I-D.ietf-core-link-format] | ||||
| Shelby, Z., "CoRE Link Format", | ||||
| draft-ietf-core-link-format-14 (work in progress), | ||||
| June 2012. | ||||
| [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, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010. | [RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010. | |||
| [RFC6570] Gregorio, J., Fielding, R., Hadley, M., Nottingham, M., | [RFC6570] Gregorio, J., Fielding, R., Hadley, M., Nottingham, M., | |||
| and D. Orchard, "URI Template", RFC 6570, March 2012. | and D. Orchard, "URI Template", RFC 6570, March 2012. | |||
| 12.2. Informative References | [RFC6690] Shelby, Z., "Constrained RESTful Environments (CoRE) Link | |||
| Format", RFC 6690, August 2012. | ||||
| 13.2. Informative References | ||||
| [I-D.brandt-coap-subnet-discovery] | [I-D.brandt-coap-subnet-discovery] | |||
| Brandt, A., "Discovery of CoAP servers across subnets", | Brandt, A., "Discovery of CoAP servers across subnets", | |||
| draft-brandt-coap-subnet-discovery-00 (work in progress), | draft-brandt-coap-subnet-discovery-00 (work in progress), | |||
| March 2011. | March 2011. | |||
| [I-D.ietf-6lowpan-nd] | ||||
| Shelby, Z., Chakrabarti, S., and E. Nordmark, "Neighbor | ||||
| Discovery Optimization for Low Power and Lossy Networks | ||||
| (6LoWPAN)", draft-ietf-6lowpan-nd-18 (work in progress), | ||||
| October 2011. | ||||
| [I-D.ietf-core-coap] | [I-D.ietf-core-coap] | |||
| Shelby, Z., Hartke, K., Bormann, C., and B. Frank, | Shelby, Z., Hartke, K., Bormann, C., and B. Frank, | |||
| "Constrained Application Protocol (CoAP)", | "Constrained Application Protocol (CoAP)", | |||
| draft-ietf-core-coap-10 (work in progress), June 2012. | draft-ietf-core-coap-13 (work in progress), December 2012. | |||
| [I-D.vanderstok-core-bc] | [I-D.vanderstok-core-bc] | |||
| Stok, P. and K. Lynn, "CoAP Utilization for Building | Stok, P. and K. Lynn, "CoAP Utilization for Building | |||
| Control", draft-vanderstok-core-bc-05 (work in progress), | Control", draft-vanderstok-core-bc-05 (work in progress), | |||
| October 2011. | October 2011. | |||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | |||
| Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | |||
| Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | |||
| [RFC6775] Shelby, Z., Chakrabarti, S., Nordmark, E., and C. Bormann, | ||||
| "Neighbor Discovery Optimization for IPv6 over Low-Power | ||||
| Wireless Personal Area Networks (6LoWPANs)", RFC 6775, | ||||
| November 2012. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Zach Shelby | Zach Shelby | |||
| Sensinode | Sensinode | |||
| Kidekuja 2 | Kidekuja 2 | |||
| Vuokatti 88600 | Vuokatti 88600 | |||
| FINLAND | FINLAND | |||
| Phone: +358407796297 | Phone: +358407796297 | |||
| Email: zach@sensinode.com | Email: zach@sensinode.com | |||
| End of changes. 75 change blocks. | ||||
| 151 lines changed or deleted | 360 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/ | ||||