CoRE Working Group                                          E. Dijk, Ed.
Internet-Draft                                          Philips Research
Intended status: Informational                          November 8, 2013
Expires: May 12, 2014


             Sleepy Devices using CoAP - Possible Solutions
                  draft-dijk-core-sleepy-solutions-02

Abstract

   This document describes possible solutions for sleepy devices support
   for the CoAP protocol.  The solutions aim to meet the requirements
   for CoAP sleepy devices in home and building control use cases.  The
   purpose of this document is to guide and stimulate the discussion on
   sleepy devices support for CoAP in the CoRE WG.

Status of this Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on May 12, 2014.

Copyright Notice

   Copyright (c) 2013 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.



Dijk                      Expires May 12, 2014                  [Page 1]


Internet-Draft       CoAP Sleepy Devices - Solutions       November 2013


Table of Contents

   1.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  3
     1.1.  Abbreviations  . . . . . . . . . . . . . . . . . . . . . .  3
     1.2.  Definitions  . . . . . . . . . . . . . . . . . . . . . . .  3
     1.3.  Requirements Language  . . . . . . . . . . . . . . . . . .  4
   2.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  4
   3.  Architecture . . . . . . . . . . . . . . . . . . . . . . . . .  4
     3.1.  Components . . . . . . . . . . . . . . . . . . . . . . . .  4
     3.2.  Interfaces . . . . . . . . . . . . . . . . . . . . . . . .  5
     3.3.  Implementation of Interfaces . . . . . . . . . . . . . . .  6
       3.3.1.  I1: SEP Reporting to Destinations (R1) . . . . . . . .  6
       3.3.2.  I2: SEP Reading from External Server (R2,R5) . . . . .  6
       3.3.3.  I3: Reading Device Reads SEP Resource(s) Via Proxy
               (R3) . . . . . . . . . . . . . . . . . . . . . . . . .  7
       3.3.4.  I4: Configuring Device Writes SEP Resource(s) Via
               Proxy (R4,R5,R7) . . . . . . . . . . . . . . . . . . .  7
       3.3.5.  I5: Proxy Notifies Destination (R1)  . . . . . . . . .  7
       3.3.6.  I6: SEP Notifies Events to Proxy (R1)  . . . . . . . .  7
       3.3.7.  I7: SEP Checks Proxy For Resource Updates (R4,R5)  . .  7
       3.3.8.  I8: Proxy Requests Resources from SEP (R3) . . . . . .  8
       3.3.9.  I9: Proxy Registers Resources at Discovery Service
               (R7) . . . . . . . . . . . . . . . . . . . . . . . . .  8
       3.3.10. I10: CoAP Endpoint Discovers SEP(s) (R7) . . . . . . .  8
     3.4.  Resources  . . . . . . . . . . . . . . . . . . . . . . . .  9
       3.4.1.  SEP Resources  . . . . . . . . . . . . . . . . . . . .  9
       3.4.2.  Proxy Resources  . . . . . . . . . . . . . . . . . . .  9
       3.4.3.  Destination Resources  . . . . . . . . . . . . . . . .  9
       3.4.4.  Other Resources  . . . . . . . . . . . . . . . . . . .  9
   4.  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . .  9
   5.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 10
   6.  Security Considerations  . . . . . . . . . . . . . . . . . . . 10
   7.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 10
     7.1.  Normative References . . . . . . . . . . . . . . . . . . . 10
     7.2.  Informative References . . . . . . . . . . . . . . . . . . 10
   Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 11















Dijk                      Expires May 12, 2014                  [Page 2]


Internet-Draft       CoAP Sleepy Devices - Solutions       November 2013


1.  Terminology

1.1.  Abbreviations

      CoRE: Constrained RESTful Environments

      SEP: Sleepy Endpoint

      NSEP: Non-Sleepy Endpoint

1.2.  Definitions

   Sleepy Endpoint (SEP)  : A CoAP endpoint hosted on a networked
      computing device, which sets its network link to a disconnected
      state during long periods of time to save energy.  "Long" means
      here that the period is of such duration that most messages sent
      to a SEP are lost despite use of standard "reliable transmission"
      techniques.  The device is S0 class and any of E0/E1/E2 class
      according to [I-D.ietf-lwig-terminology].  See also the similar
      definition of SEP in [I-D.rahman-core-sleepy-problem-statement].

   Non-Sleepy Endpoint (NSEP)  : A CoAP endpoint hosted on a networked
      computing device, which has its network interface in an always-
      connected state or operates its network interface such that the
      endpoint(s) on it appear always-connected.  The device is S1 or S2
      class and any of E1/E2/E3 class as in [I-D.ietf-lwig-terminology].

   Sleeping/Asleep  : A SEP being in a "sleeping state" i.e. its network
      interface is disconnected and a SEP is not able to send or receive
      messages.

   Awake/Not Sleeping  : A SEP being in an "awake state" i.e. its
      network interface is connected and the SEP is able to send or
      receive messages.

   Destination  : a NSEP to which event messages are sent by a SEP, or
      by a Proxy on behalf of a SEP.

   Heartbeat  : a type of message (event), which is sent periodically to
      indicate to a Destination that the sender is still operational and
      able to communicate to the Destination.  A heartbeat message may
      contain data about the current status of the sender.  Typically
      sent by a SEP.

   Proxy  : a NSEP which is communicating directly with a SEP; able to
      cache information/CoAP resources on behalf of SEP for the purpose
      of further distribution or making it accessible to interested
      endpoints.  It acts as an intermediary between a SEP and a NSEP.



Dijk                      Expires May 12, 2014                  [Page 3]


Internet-Draft       CoAP Sleepy Devices - Solutions       November 2013


      The Proxy provides immediate/reliable connectivity, to enable
      NSEPs to operate on SEP resources even while the SEP is sleeping.

   In addition to these definitions, readers should also be familiar
   with the terms and concepts discussed in [I-D.ietf-core-coap].

1.3.  Requirements Language

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in RFC
   2119 [RFC2119].


2.  Introduction

   The CoRE WG charter includes the topic of caching resources on behalf
   of sleepy devices.  This document describes an overall architecture
   proposal on how support for sleepy CoAP devices can be added to
   Constrained RESTful systems, to support caching but also other
   functions.  Possible solutions for the various identified functions
   are proposed.  The motivation for sleepy CoAP devices is described in
   [I-D.rahman-core-sleepy-problem-statement] and
   [I-D.dijk-core-sleepy-reqs].

   The aim of this document is to guide and stimulate the discussion on
   sleepy devices support in the CoRE WG.  The use cases and
   requirements documented in [I-D.dijk-core-sleepy-reqs] are taken as
   the reference.


3.  Architecture

   Based on the use cases, requirements and existing CoRE building
   blocks (such as the CoAP protocol, CoAP proxying, core-observe, etc.)
   a solution architecture is described in this section.  First we
   identify the components, then the interfaces between components, and
   finally possible solutions to realize these interfaces.

3.1.  Components

   From the use cases and requirements the following components (i.e.
   devices, or functions of devices) can be identified:

   1.  Sleepy Endpoint (SEP)

   2.  Proxy: NSEP that maintains a relation with SEP and caches
       resources on behalf of the SEP.



Dijk                      Expires May 12, 2014                  [Page 4]


Internet-Draft       CoAP Sleepy Devices - Solutions       November 2013


   3.  Destinations(s): NSEPs, other than Proxy, where SEP directly
       reports events to.  Events are typically a change of resource.  A
       destination endpoint may consist of a multicast group.

   4.  External server: a CoAP server to which a SEP can make requests
       e.g. for parameter updates, firmware or external information.

   5.  Configuring NSEP: a CoAP endpoint that changes/writes data on the
       SEP

   6.  Reading NSEP: a NSEP that needs to read a resource from the SEP.
       This may include resources that the SEP regularly reports as
       events already, or resources that a SEP did not send before.

   7.  Discovery Service: an optional service that enables discovery of
       SEPs, their resources and their associated Proxies.  For example,
       a Resource Directory ([I-D.ietf-core-resource-directory]).

3.2.  Interfaces

   Below diagram shows the components and the interfaces (Ixx) that need
   to be defined between components to meet the various requirements for
   CoAP sleepy devices.  The arrowheads indicate the direction of taking
   initiative; e.g. the arrow from SEP to Destination NSEP(s) shows that
   the SEP upon an event takes the initiative to send to one or more
   Destination(s).  This "taking initiative" could be implemented either
   via a CoAP request or a CoAP response (e.g. a core-observe response)
   so an arrow does not indicate which component is acting in the role
   of CoAP client or CoAP server.






















Dijk                      Expires May 12, 2014                  [Page 5]


Internet-Draft       CoAP Sleepy Devices - Solutions       November 2013


     +-------------+         +--------------+    I2     +---------+
     | Destination |    I1   | SEP          |---------->| Server  |
     | NSEP(s)     |<--------|              |\          | NSEP    |
     +-------------+         +--------------+ \         +---------+
                                |   |    ^     \___________
                             I6 |   |I7  |I8        I9     |
                                v   v    |                 v
     +-------------+    I3   +--------------+           +-------------+
     | Reading     |-------->| Proxy        |    I9     | Disc. Serv. |
     | NSEP        |         | (NSEP)       |---------->|(OPTIONAL)   |
     +-------------+         +--------------+           +-------------+
                               ^    |     ^                   ^
                   ____________|    |I5   |______________     | I10
                  /    I4           v           I10      \    |
     +-------------+         +--------------+           +-------------+
     | Configuring |         | Destination  |           | Discovering |
     | NSEP        |         | NSEP(s)                  | NSEP        |
     +-------------+         +--------------+           +-------------+


        Figure 1: Architecture Components and Interfaces (numbered)

3.3.  Implementation of Interfaces

   This section gives possible solutions how each interface (Ixx,
   identified in the previous section) could be implemented.  The "Rxx
   items" (R1, R2, etc.) between brackets show which requirements from
   [I-D.dijk-core-sleepy-reqs] are addressed by the interface.

3.3.1.  I1: SEP Reporting to Destinations (R1)

   A SEP can report events to one or more destinations using CoAP POST
   requests, acting as a CoAP client.  For each request either NON or
   CON may be used.  The endpoint(s) to report to can be hardcoded in
   the software and/or determined by the configuration applied through
   I4 (Section 3.3.4).  In addition, a SEP may be programmed to fetch
   such configuration from a server through I2 (Section 3.3.2).  To
   which resource (URI) the POST request is sent, plus the Content-
   Format used and the contents of this content, is determined by the
   implementers and/or SDOs that define application profiles on top of
   CoAP.

3.3.2.  I2: SEP Reading from External Server (R2,R5)

   A SEP can read from an NS server using CoAP (GET) requests, acting as
   a CoAP client.  While waiting for a response, a SEP is in an awake
   state.  Similar to I1, the selection of endpoint(s), URI and content
   is up to implementers and/or SDOs.



Dijk                      Expires May 12, 2014                  [Page 6]


Internet-Draft       CoAP Sleepy Devices - Solutions       November 2013


3.3.3.  I3: Reading Device Reads SEP Resource(s) Via Proxy (R3)

   A Reading Device sends CoAP GET requests to the Proxy (acting as a
   CoAP client) to read SEP resources.  The Proxy serves these requests
   from cache.  If a requested resource is not cached, various behaviors
   could be defined: e.g. return an error, or the Proxy returns a 5.03
   Service Unavailable first, and then starts a process to GET the
   resource directly from the SEP using interface I8.

3.3.4.  I4: Configuring Device Writes SEP Resource(s) Via Proxy
        (R4,R5,R7)

   A Configuring Device sends CoAP PUT/DELETE requests to the Proxy in
   order to write/delete resources on the SEP.  The resources on the
   Proxy that are written to are the resources that the SEP has
   delegated towards the Proxy.

   The Proxy itself then uses I8 to update the SEP with the new
   resource(s).

3.3.5.  I5: Proxy Notifies Destination (R1)

   A Destination can use core-observe to register to resource updates on
   the Proxy.  The Proxy sends core-observe notifications whenever the
   resource is updated.  The resources here are the resources that the
   SEP has delegated to the Proxy.

3.3.6.  I6: SEP Notifies Events to Proxy (R1)

   The SEP sends CoAP requests (acting as a CoAP client) to the Proxy to
   communicate any events i.e.  SEP resource updates.  The format of
   request and response should be partly standardized in CoRE, e.g. as
   in Mirror Server [I-D.vial-core-mirror-server]].

3.3.7.  I7: SEP Checks Proxy For Resource Updates (R4,R5)

   The SEP may send a single CoAP GET request to the Proxy to check if
   any changes to its writeable delegated resources are available.  If
   so, it could use multiple GET requests (one per changed resource) to
   get the new content from the Proxy, or perhaps a single GET to
   retrieve multiple resource values as a single composite
   representation.

   Text TBD; some initial thoughts: a single message to post a sensor
   value (+ heartbeat) and to ask for any updates is more efficient.
   The proxy could use its response code to signal if any updates are
   available.  For example, for a POST, a 2.04 Changed response may
   indicate a resource is changed.  A code 2.00 (which is to be defined)



Dijk                      Expires May 12, 2014                  [Page 7]


Internet-Draft       CoAP Sleepy Devices - Solutions       November 2013


   may indicate success but no change to resource.  Or a small payload
   attached to the response to the POST could indicate which updates to
   resources are available at the Proxy, as was discussed on the CoRE WG
   list around March 29, 2013.

   Alternative: technique that once a Proxy receives a POST from the SEP
   with a sensor value, it first sends a CoAP PUT request to change a
   resource on the SEP, and only when that is successful it provides a
   separate response to to the original POST request done by the SEP.

3.3.8.  I8: Proxy Requests Resources from SEP (R3)

   For I8 to work there needs to be a mechanism defined in I6 or I7, so
   that the Proxy can be notified when a SEP is awake.  Then, a Proxy
   that needs to request resource(s) from a SEP can make the requests
   via interface I8 as soon as the SEP has woken up.

   A solution is that a SEP acts as a regular CoAP server during the
   time it is awake.

3.3.9.  I9: Proxy Registers Resources at Discovery Service (R7)

   This interface is OPTIONAL i.e. only required if the Discovery
   Service is available.  A SEP could communicate its available
   resources described in CoRE Link Format [RFC6690] to a Proxy.  The
   Proxy is then responsible for registering these resources/
   descriptions in a further Discovery Service which may be implemented
   as a Resource Directory [I-D.ietf-core-resource-directory].

   A SEP SHOULD describe its own resources in CoRE Link Format in its
   "/.well-known/core" resource, such that a Proxy is able to read this
   resource description and to do further registration of SEP resources
   in a Discovery Service.

3.3.10.  I10: CoAP Endpoint Discovers SEP(s) (R7)

   There are two ways in which a CoAP endpoint can discover a SEP and
   its resources.  The first way which should be supported in a system,
   requires that a Proxy includes in its "/.well-known/core" Link Format
   description the descriptions of the individual SEPs as detailed in
   [I-D.vial-core-mirror-server].  The CoAP endpoint can then use CoRE
   resource discovery ([I-D.ietf-core-coap]) using either unicast or
   multicast CoAP requests to discover the SEP.

   The second way which is OPTIONALLY supported in a system, is that a
   Proxy registers the SEP into a Discovery Service (such as RD
   [I-D.ietf-core-resource-directory]), and the CoAP endpoint uses the
   specific interface of the Discovery Service to discover a SEP.



Dijk                      Expires May 12, 2014                  [Page 8]


Internet-Draft       CoAP Sleepy Devices - Solutions       November 2013


3.4.  Resources

   This section provides some information on the CoAP resources that
   need to be allocated on the different components in the architecture.

3.4.1.  SEP Resources

   On a SEP, a clear distinction has to be made between types of
   resources.

   o  Read-only resources: resource can be modified by the SEP, but
      SHOULD NOT be modifiable by any external device.  This includes
      static information resource (e.g. manufacturer name, type,
      firmware version, etc.) but also volatile resources (e.g. latest
      sensor value, error log entries, etc.) that the SEP internally
      updates.

   o  Read/Write resources: resource can be modified by an (authorized)
      external device.  This is used for configuration information (e.g.
      sensor thresholds, which Destination(s) to use, event frequency,
      etc.).  Authorized CoAP clients can write such resource at the
      Proxy, which will communicate the updated resource to the SEP next
      time it wakes up and contacts the Proxy.  To avoid write/write
      conflicts, such a resource SHOULD NOT be modified autonomously by
      a SEP.

3.4.2.  Proxy Resources

   TBD

3.4.3.  Destination Resources

   TBD.  One draft proposal is: a single reporting resource for
   receiving events "/event".  This can be changed to anything SDO/
   vendor specific, but above can be a default.

3.4.4.  Other Resources

   TBD


4.  Acknowledgements

   TBD







Dijk                      Expires May 12, 2014                  [Page 9]


Internet-Draft       CoAP Sleepy Devices - Solutions       November 2013


5.  IANA Considerations

   This document includes no request to IANA.


6.  Security Considerations

   TBD: per interface the security needs and solution need to be
   described.  Anywhere CoAP unicast is used, DTLS may apply as a
   transport security solution.  DTLS key update on a sleepy device may
   pose a problem.


7.  References

7.1.  Normative References

   [I-D.ietf-core-coap]
              Shelby, Z., Hartke, K., and C. Bormann, "Constrained
              Application Protocol (CoAP)", draft-ietf-core-coap-18
              (work in progress), June 2013.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC6690]  Shelby, Z., "Constrained RESTful Environments (CoRE) Link
              Format", RFC 6690, August 2012.

7.2.  Informative References

   [I-D.dijk-core-sleepy-reqs]
              Dijk, E., "Sleepy Devices using CoAP - Requirements",
              draft-dijk-core-sleepy-reqs-00 (work in progress),
              June 2013.

   [I-D.ietf-core-block]
              Bormann, C. and Z. Shelby, "Blockwise transfers in CoAP",
              draft-ietf-core-block-14 (work in progress), October 2013.

   [I-D.ietf-core-observe]
              Hartke, K., "Observing Resources in CoAP",
              draft-ietf-core-observe-11 (work in progress),
              October 2013.

   [I-D.ietf-core-resource-directory]
              Shelby, Z., Krco, S., and C. Bormann, "CoRE Resource
              Directory", draft-ietf-core-resource-directory-00 (work in
              progress), June 2013.



Dijk                      Expires May 12, 2014                 [Page 10]


Internet-Draft       CoAP Sleepy Devices - Solutions       November 2013


   [I-D.ietf-lwig-terminology]
              Bormann, C., Ersue, M., and A. Keranen, "Terminology for
              Constrained Node Networks", draft-ietf-lwig-terminology-05
              (work in progress), July 2013.

   [I-D.rahman-core-sleepy-problem-statement]
              Rahman, A., Fossati, T., Loreto, S., and M. Vial, "Sleepy
              Devices in CoAP - Problem Statement",
              draft-rahman-core-sleepy-problem-statement-01 (work in
              progress), October 2012.

   [I-D.vial-core-mirror-server]
              Vial, M., "CoRE Mirror Server",
              draft-vial-core-mirror-server-01 (work in progress),
              April 2013.


Author's Address

   Esko Dijk (editor)
   Philips Research
   High Tech Campus 34
   Eindhoven,   5656 AE
   NL

   Phone: +31 40 2747947
   Email: esko.dijk@philips.com
























Dijk                      Expires May 12, 2014                 [Page 11]