Hello all,

I encountered some issues while using the newtmgr protocol (NMP) over
OIC.  In this email, I will call this protocol stack (NMP over OIC) OMP.
The issues, as I see them, are:

1. Parts of NMP header missing from OMP responses.  This causes problems
when multiplexing OMP among many target devices.

2. Parts of the NMP header are scattered in a few different places.
This works, but it makes it difficult to debug packet traces.

3. NMP errors get lost in translation.  Instead of an NMP message with
an error code, the OMP server sends back a generic "Bad Request" OIC
message.

I have addressed these issues in the following proposal:
https://issues.apache.org/jira/browse/MYNEWT-647

If you're like me, you might not bother reading something unless it is
reproduced in the email body :).  The contents of the aforementioned jira
ticket are below.

Comments welcome.

Thanks,
Chris

----------

***** Current Scheme

*** Requests

The NMP op is indicated by the OIC op:
NMP read <=> OIC get
NMP write <=> OIC put

The NMP group and ID are indicated as CoAP URI Query options:

    gr=<group>
    id=<id>

The remaining NMP header fields, seq and flags, are not present.

The NMP payload is the entire CoAP request body. This is identical to the body
of a plain NMP request.

*** Responses

The NMP header is not present. The NMP op is indicated in the payload (see
below), but other header fields cannot be inferred.

Payload consists of a single CBOR key-value pair. For read responses, the key
is "r"; for write responses, the key is "w". The value is a second CBOR map
containing the actual NMP response fields.

Errors encountered during processing of NMP requests are reported via OIC error
responses (bad request, internal server error).

***** Proposed Scheme

*** Requests

    * The OIC op is always the same: put.

    * No URI Query CoAP options.

    * The NMP header is included in the payload as a key-value pair (key="_h").
      This pair is in the root map of the request and is a sibling of the other
      request fields. The value of this pair is the big-endian eight-byte NMP
      header with a length field of 0.

*** Responses

    * As with requests, the NMP header is included in the payload as a
      key-value pair (key="_h").

    * No "r" or "w" field. The response fields are inserted into the root map
      as a sibling of the "_h" pair.

    * Errors encountered during processing of NMP requests are reported
      identically to other NMP responses (embedded NMP response).

*** Notes

    * Keys that start with an underscore are reserved to the OIC manager
      protocol (e.g., "_h"). NMP requests and responses must not name any of
      their fields with a leading underscore.

Reply via email to