mynewt-newtmgr.git
2 months agonmp decode: allow registration of custom response handlers master
Nico Lastzka [Mon, 30 May 2022 08:59:37 +0000 (10:59 +0200)] 
nmp decode: allow registration of custom response handlers

4 months agoBump version to 1.11.0-dev
Szymon Janc [Fri, 6 May 2022 09:21:33 +0000 (11:21 +0200)] 
Bump version to 1.11.0-dev

5 months agoPrepare for Mynewt 1.10.0 release mynewt_1_10_0_rc1_tag mynewt_1_10_0_tag
Szymon Janc [Fri, 22 Apr 2022 08:18:06 +0000 (10:18 +0200)] 
Prepare for Mynewt 1.10.0 release

17 months agoApache Mynewt 1.9.0 release
Szymon Janc [Wed, 24 Mar 2021 14:08:52 +0000 (15:08 +0100)] 
Apache Mynewt 1.9.0 release

18 months agoAdd missing license headers
Szymon Janc [Wed, 24 Mar 2021 11:05:34 +0000 (12:05 +0100)] 
Add missing license headers

21 months agoMerge pull request #179 from vrahane/newtmgr_taskstat_format_fix
Vipul Rahane [Fri, 11 Dec 2020 21:07:33 +0000 (13:07 -0800)] 
Merge pull request #179 from vrahane/newtmgr_taskstat_format_fix

taskstat: Add tab character after the task's name

21 months agotaskstat: Add tab character after the task's name 179/head
Vipul Rahane [Fri, 11 Dec 2020 08:49:36 +0000 (00:49 -0800)] 
taskstat: Add tab character after the task's name

- There was a space earlier and if the task name was bigger,
  it owuld cause formatting issues

22 months agoMerge pull request #177 from nkaje/fix_windows_build_error_bll_sesn-cfg
Naveen Kaje [Wed, 28 Oct 2020 15:08:37 +0000 (10:08 -0500)] 
Merge pull request #177 from nkaje/fix_windows_build_error_bll_sesn-cfg

bll_sesn_cfg_windows: Fix build error for windows

22 months agobll_sesn_cfg_windows: Fix build error for windows 177/head
Naveen Kaje [Tue, 27 Oct 2020 15:49:03 +0000 (10:49 -0500)] 
bll_sesn_cfg_windows: Fix build error for windows

Commit 0663961c537af3cfebee51854c515917c5bff804 replaced callbacks
with interfaces (TxFilter and RxFilter). Apply the change for
the Windows specific implementation as well and fix the following
error.

C:\Users\ryan.erickson>go get github.com/apache/mynewt-mcumgr-cli/mcumgr
go\src\mynewt.apache.org\newtmgr\newtmgr\bll\bll_sesn_cfg_windows.go:35:15:
undefined: nmcoap.MsgFilter
go\src\mynewt.apache.org\newtmgr\newtmgr\bll\bll_sesn_cfg_windows.go:36:15:
undefined: nmcoap.MsgFilter

Signed-off-by: Naveen Kaje <naveen.kaje@juul.com>
22 months agoMerge pull request #176 from nkaje/fix_udp_upload
Naveen Kaje [Mon, 26 Oct 2020 20:43:35 +0000 (15:43 -0500)] 
Merge pull request #176 from nkaje/fix_udp_upload

nmxact: Fix image upload failure due to unsupported async method

22 months agonmxact/udp: Fix image upload failure due to unsupported async method 176/head
Naveen Kaje [Mon, 26 Oct 2020 11:58:02 +0000 (06:58 -0500)] 
nmxact/udp: Fix image upload failure due to unsupported async method

This addresses the UDP based image upload failure.

The UDP and naked sessons do not implement TxRxAsync
for optimized transfer as in BLE, however, continue to
support the operation by calling TxRxMgmt.

Failure signature:
~/go/bin/mcumgr --conntype udp --connstring=[192.168.1.1]:1337 image
upload build_f429/smpsvr/zephyr/zephyr.signed.bin
0 / 90644
[-----------------------------------------]
0.00%
Error: ImageUpload unexpected error after 0/90644 bytes

Signed-off-by: Naveen Kaje <naveen.kaje@juul.com>
23 months agoMerge pull request #175 from nkaje/Update_JLOSS_BLE_DLE_Support
Naveen Kaje [Tue, 6 Oct 2020 19:41:58 +0000 (14:41 -0500)] 
Merge pull request #175 from nkaje/Update_JLOSS_BLE_DLE_Support

go.mod: Update JuulLabs-OSS/ble hash

23 months agogo.mod: Update JuulLabs-OSS/ble hash 175/head
Naveen Kaje [Tue, 6 Oct 2020 19:05:22 +0000 (14:05 -0500)] 
go.mod: Update JuulLabs-OSS/ble hash

Use the latest hash that includes Data Length Extension
Feature support for Linux.

Signed-off-by: Naveen Kaje <naveen.kaje@juul.com>
2 years agoUpdate newtmgr_image.rst
Rafa Couto [Mon, 21 Sep 2020 01:50:30 +0000 (03:50 +0200)] 
Update newtmgr_image.rst

Parameter blank separator

2 years agoMerge pull request #172 from rmal30/hotfix/remove-loadint64
Naveen Kaje [Wed, 2 Sep 2020 13:47:55 +0000 (08:47 -0500)] 
Merge pull request #172 from rmal30/hotfix/remove-loadint64

Change MaxRxOff to be a 32-bit integer

2 years agoMerge pull request #173 from nkaje/freeze
Naveen Kaje [Mon, 31 Aug 2020 14:47:09 +0000 (09:47 -0500)] 
Merge pull request #173 from nkaje/freeze

transiever: fix compilation error

2 years agotransiever: fix compilation error 173/head
Naveen Kaje [Mon, 31 Aug 2020 14:33:50 +0000 (09:33 -0500)] 
transiever: fix compilation error

omp.EncodeOmpDgram now takes txFilter, not txFilterCb. Fix this

Signed-off-by: Naveen Kaje <naveen.kaje@juul.com>
2 years agoMerge pull request #168 from ccollins476ad/freeze
Naveen Kaje [Mon, 31 Aug 2020 14:44:54 +0000 (09:44 -0500)] 
Merge pull request #168 from ccollins476ad/freeze

Freeze filter for `image upload` chunk length calculation

2 years agoChange MaxRxOff to be a 32-bit integer 172/head
Rohan Malik [Thu, 27 Aug 2020 05:52:03 +0000 (15:52 +1000)] 
Change MaxRxOff to be a 32-bit integer

2 years agoMerge pull request #170 from nkaje/fix_dfu_ble_error
Naveen Kaje [Wed, 26 Aug 2020 01:16:04 +0000 (20:16 -0500)] 
Merge pull request #170 from nkaje/fix_dfu_ble_error

transceiver: Fix NMP Async Listener

2 years agotransceiver: Fix NMP Async Listener 170/head
Naveen Kaje [Tue, 25 Aug 2020 22:50:15 +0000 (17:50 -0500)] 
transceiver: Fix NMP Async Listener

NMP Async listener should be released in the gofunc.
This fixes the following error seen with DFU.

Error signature:
$sudo ~/go/bin/newtmgr --conntype ble --connstring peer_name='DUT1000' image upload application.bin
 0 B / 99.04 KiB [---------------------------------------------------------]   0.00%
panic: send on closed channel
goroutine 67 [running]:
mynewt.apache.org/newtmgr/nmxact/nmp.(*Listener).AfterTimeout.func1()
/home/naveen/go/src/mynewt.apache.org/newtmgr/nmxact/nmp/dispatch.go:50 +0x64
created by time.goFunc
/usr/local/go/src/time/sleep.go:168 +0x44

Signed-off-by: Naveen Kaje <naveen.kaje@juul.com>
2 years agoMerge pull request #162 from nkaje/optimize_dfu
Naveen Kaje [Tue, 14 Jul 2020 18:42:47 +0000 (13:42 -0500)] 
Merge pull request #162 from nkaje/optimize_dfu

Optimize DFU

2 years agonmxact/xact/image: Freeze filter for chunklen calc 168/head
Christopher Collins [Wed, 8 Jul 2020 18:46:25 +0000 (11:46 -0700)] 
nmxact/xact/image: Freeze filter for chunklen calc

By freezing the filter, the same parameters get used for each subsequent
message encoding.  This ensures the payload size won't change after we
have settled on a chunk size.

2 years agonmcoap: Replace filter callbacks with interfaces
Christopher Collins [Wed, 8 Jul 2020 18:42:34 +0000 (11:42 -0700)] 
nmcoap: Replace filter callbacks with interfaces

Sometimes it is desirable to reuse the same parameters when generating a
sequence of messages (e.g., when calculating the maximum payload size
for an image upload request).  This was not possible with a session
configured with a TxFilter since there is no way to specify which
parameters the filter should use for a given message.

This commit creates a pair of interfaces (TxFilter and RxFilter) to
replaces the old callbacks.  The TxFilter interface allows its
parameters to be "frozen" and "unfrozen".

2 years agoimage: upload command: set noerase to true by default 162/head
Naveen Kaje [Tue, 12 May 2020 12:17:18 +0000 (07:17 -0500)] 
image: upload command: set noerase to true by default

Signed-off-by: Naveen Kaje <naveen.kaje@juul.com>
2 years agoimage: optimize Device Firmware Upgrade (DFU)
Naveen Kaje [Thu, 7 May 2020 12:58:29 +0000 (07:58 -0500)] 
image: optimize Device Firmware Upgrade (DFU)

Optimize the DFU process by queuing multiple chunks of the
image at once. The window of outstanding requsts is slowly
increased until errors are seen.

The process is started with a minimum window size of outstanding
requests. As the successful responses come in the size is increased.

Internal map is maintained to track if the CoAP server (device)
has missed a chunk and repeatedly requests for it in the response.

As several requests are outstanding at the same time, this
optimizes particularly Bluetooth transport.

Serial and Mtech LORA is updated for compliance with the updated
interface, although they use underlying synchronous transmit/receive
functionality.

Signed-off-by: Naveen Kaje <naveen.kaje@juul.com>
2 years agoRemove illegal space
Andrew Stevenson [Sat, 16 May 2020 16:39:12 +0000 (18:39 +0200)] 
Remove illegal space

newtmgr (1.9.0-dev at least) doesn't allow the space between the command and baud.

2 years agoFix for BLE in macOS catalina
Christopher Collins [Sun, 17 May 2020 05:44:30 +0000 (22:44 -0700)] 
Fix for BLE in macOS catalina

Pull in latest `ble` library to fix hang in catalina.

2 years agoUse latest ble library (with cbgo)
Christopher Collins [Tue, 21 Apr 2020 01:05:13 +0000 (18:05 -0700)] 
Use latest ble library (with cbgo)

This is a less buggy implementation of the mojave-support feature.  It
also adds some low level Bluetooth logging for macOS users (when -ldebug
is specified).

2 years agomojave / catalina support
Christopher Collins [Mon, 13 Apr 2020 20:58:35 +0000 (13:58 -0700)] 
mojave / catalina support

This commit switches newtmgr from the official go-ble library to the
runtimeco fork.

The runtimeco fork implements central functionality using the
CoreBluetooth API rather than XPC messages.  This makes it compatible
across all versions of macOS.

The runtimeco fork does not implement any peripheral functionality.
That is why the changes are not being merged upstream.  This is fine for
our use case since newtmgr doesn't need any peripheral functionality.

2 years agoUpdate version to 1.9.0-dev
Szymon Janc [Thu, 9 Apr 2020 12:30:23 +0000 (14:30 +0200)] 
Update version to 1.9.0-dev

2 years agoFixes for 1.8 release
Szymon Janc [Mon, 23 Mar 2020 12:13:38 +0000 (13:13 +0100)] 
Fixes for 1.8 release

Updates dates and removes no longer bundled vendor/ libraries from
LICENSE file.

2 years agoApache Mynewt 1.8.0 release
Szymon Janc [Wed, 18 Mar 2020 13:48:42 +0000 (14:48 +0100)] 
Apache Mynewt 1.8.0 release

2 years agores: Correctly parse payload params
Christopher Collins [Thu, 20 Feb 2020 00:05:56 +0000 (16:05 -0800)] 
res: Correctly parse payload params

In `newtmgr <op> <resource>> k1=v1 k2=v2 ...`, the tool was discarding
all the k=v pairs and encoding an empty map instead.

2 years agores: Use zero payload when no args specified
Christopher Collins [Wed, 19 Feb 2020 16:53:23 +0000 (08:53 -0800)] 
res: Use zero payload when no args specified

This command:

    newtmgr res get /my/res

should send a CoAP GET request with *no* payload.  An optional payload
can be specified with extra arguments after the resource name.  Since
there are no extra arguments, there should be no payload.

Prior to this commit, newtmgr was including an empty map as the payload
in such requests.

The bug was caused by this quirk in Go:
https://forum.golangbridge.org/t/a-nil-a-b-b-nil-with-pointers-and-interface/10593

In short, if `nil` is assigned to a variable of type `interface{}`, the
variable will *not* compare equal to `nil`.  An interface variable
contains two pieces of information: 1) its type, and 2) its value.  The
variable is not equal to `nil` because `nil` is an *untyped* nil value.

The solution is to return the untyped `nil` rather than the nil
interface{}.

2 years agoDelete unneccesary `nmxact` binary file
Christopher Collins [Wed, 29 Jan 2020 15:11:35 +0000 (07:11 -0800)] 
Delete unneccesary `nmxact` binary file

This file must have been checked in by accident.

2 years agores: Allow file to specify payload
Christopher Collins [Fri, 24 Jan 2020 17:47:34 +0000 (09:47 -0800)] 
res: Allow file to specify payload

The `res` (resource) command sends a generic CoAP request.  By default,
the CoAP payload is specified as a series of command line arguments.

This commit allows newt to read the payload from a file instead.  There
are three new command line options:

  -B, --binfile string    Name of file containing bytes to encode as a
                            byte string for the CoAP message body
  -J, --jsonfile string   Name of file containing JSON for the CoAP
                            message body
  -R, --rawfile string    Name of file containing the raw CoAP message
                            body

2 years agoAdd missing license header
Szymon Janc [Wed, 15 Jan 2020 15:19:28 +0000 (16:19 +0100)] 
Add missing license header

2 years agolog show: Specify `-a` to get entire log
Christopher Collins [Thu, 28 Nov 2019 00:08:17 +0000 (16:08 -0800)] 
log show: Specify `-a` to get entire log

Normally, the `newtmgr log show` command only receives one packet's
worth of log entries.

This commit adds a `-a` option to this command.  When this option is
specified, newtmgr continues requesting more data until it reaches the
end of the log.

This is slightly better than using a script to read an entire log
because newtmgr will reuse the established BLE connection for its
subsequent requests, making the process faster.

2 years agoUpdate module dependencies (`go get -u`)
Fabio Utzig [Fri, 22 Nov 2019 11:31:11 +0000 (08:31 -0300)] 
Update module dependencies (`go get -u`)

Also fix import of ProgressBar due to v2 API changes

Signed-off-by: Fabio Utzig <utzig@apache.org>
2 years agores: Add `--int` option to parse numbers as ints
Christopher Collins [Mon, 11 Nov 2019 17:37:15 +0000 (09:37 -0800)] 
res: Add `--int` option to parse numbers as ints

JSON only supports a single numeric type: "number".  When the `res -j`
command parses a payload, the JSON unmarshal function parses all numbers
as instances of float64.  This makes the resulting CBOR payload
incorrect when the user just wants to use integers.

This commit adds an option to the res command: `--int`.  When specified,
all numbers in the payload are converted to integers when the conversion
does not result in a change in value.  For example, `1.0` is converted
to an integer, but `1.5` is not.

2 years agores: When `-j` is specified, allow all value types
Christopher Collins [Mon, 11 Nov 2019 17:36:02 +0000 (09:36 -0800)] 
res: When `-j` is specified, allow all value types

Prior to this commit, `res -j` would only accept a
`map[string]interface{}` as the payload.  Now, it accepts an
`interface{}`.  This allows the payload to consist of a number, a
string, or an array (or an object, as before).

2 years agonmxact: Don't skip seq numbers in `image upload`
Christopher Collins [Fri, 18 Oct 2019 22:55:45 +0000 (15:55 -0700)] 
nmxact: Don't skip seq numbers in `image upload`

nmxact generates several image upload requests for each one that it
actually sends.  It does this to determine the ideal chunk size.

Each of these requests was consuming a sequence number.  As a result,
the sequence number would increase by three for each request that was
actually transmitted.

This commit changes the image upload command such that the sequence
number is only increased when a request is actually sent.

2 years agonmxact: Remove "Serialized OMP" debug log message
Christopher Collins [Fri, 18 Oct 2019 22:53:13 +0000 (15:53 -0700)] 
nmxact: Remove "Serialized OMP" debug log message

This message got logged immediately before the request got transmitted.
The result was two nearly identical large log messages (both contain the
full payload of the request).

In addition, the image upload command actually serializes several
requests for each one it sends.  It does this to determine the ideal
chunk size to use for the next request.  The result is even more noise
in the logs

2 years agoomp: Don't dereference nil pointer
Christopher Collins [Tue, 1 Oct 2019 17:53:29 +0000 (10:53 -0700)] 
omp: Don't dereference nil pointer

3 years agores: Interpret all 2xx codes as success
Christopher Collins [Tue, 3 Sep 2019 20:01:22 +0000 (13:01 -0700)] 
res: Interpret all 2xx codes as success

Prior to this commit, only 2.05 (Content) was considered success.  All
other 2xx codes (e.g., Created, Valid, etc.) were treated as failures.

3 years agoAdd basic multi-image support
Fabio Utzig [Fri, 23 Aug 2019 14:47:57 +0000 (11:47 -0300)] 
Add basic multi-image support

This makes `image list` and `image upload` compatible with MCUBoot's
serial_boot when working in a multi-image setting.

The image state CBOR packet and image upload were both update to carry
an extra field called "image" whose number indicates which image set is
being handled. If absent, image 0 is used for compatibility.

The upload command got and extra parameter `-n` (or `--image`) to set
which image is being sent, eg, `newtmgr image -n1 upload <fw.img>`.

The image list command now prints "image=X slot=Y", eg:

```
Images:
 image=0 slot=0
    version: 1.7.0.0
    bootable: false
    flags:
    hash: Unavailable
 image=0 slot=1
    version: 1.4.0.0
    bootable: false
    flags:
    hash: Unavailable
 image=1 slot=0
    version: 1.8.0.0
    bootable: false
    flags:
    hash: Unavailable
Split status: N/A (0)
```

3 years agores: Don't include payload if none specified
Christopher Collins [Fri, 30 Aug 2019 21:18:27 +0000 (14:18 -0700)] 
res: Don't include payload if none specified

If the user issues a `res` command with no payload (e.g., `res get
/my/resource`), the outgoing command should not have a payload.

Instead, newtmgr was encoding an empty map as the payload.

3 years agoREADME: Indicate that GO111MODULE must be set
Christopher Collins [Wed, 21 Aug 2019 17:13:08 +0000 (10:13 -0700)] 
README: Indicate that GO111MODULE must be set

Now that newtmgr uses modules instead of a vendor directory, module
support needs to be enabled to build newtmgr.

This setting is only necessary for older versions of go.  In newer
versions, the setting is enabled by default (outside of the GOPATH).
Maybe we can revert this change once modules become fully mainstream.

3 years agoMakefile: Update for compatibility with Go modules
Christopher Collins [Mon, 19 Aug 2019 19:42:40 +0000 (12:42 -0700)] 
Makefile: Update for compatibility with Go modules

This fixes #140.

3 years agonmxact: Create a listener for each OMP response
Christopher Collins [Fri, 9 Aug 2019 18:27:05 +0000 (11:27 -0700)] 
nmxact: Create a listener for each OMP response

Prior to this change, nmxact created a single CoAP listener to handle
all incoming OMP responses.  This listener would parse the embedded NMP
message, then dispatch to the appropriate NMP listener based on the NMP
sequence number.

There is a problem with this approach.  If the server rejects an
outgoing OMP request with a CoAP error (e.g., the omp resource
requires a more secure connection), then the error does not get passed
up to the caller.  The error response does not contain an embedded NMP
response, so there is no way to match it with the appropriate listener.
The result is that nmxact drops the CoAP error, and the OMP operation
eventually times out.

This commit makes the following changes:
    * Every outgoing OMP request contains a single-byte token consisting
      of the NMP sequence number.
    * A new CoAP listener and NMP listener are created for each expected
      OMP response.
    * Both NMP errors and CoAP errors are communicated to the caller.

With this change, when an OMP elicits a CoAP error, newtmgr displays the
error and terminates.

3 years agoRemove commented out code
Christopher Collins [Fri, 9 Aug 2019 18:05:26 +0000 (11:05 -0700)] 
Remove commented out code

3 years agoRename OIC --> CoAP
Christopher Collins [Fri, 9 Aug 2019 18:03:55 +0000 (11:03 -0700)] 
Rename OIC --> CoAP

There were some straggling identifiers with "OIC" in their names.
Newtmgr doesn't use OIC; it uses CoAP.

Rename these identifiers to use "CoAP" rather than "OIC".

3 years agoMerge pull request #139 from ccollins476ad/imghash
Vipul Rahane [Sat, 10 Aug 2019 00:36:58 +0000 (17:36 -0700)] 
Merge pull request #139 from ccollins476ad/imghash

Include imghash in log show output

3 years agoInclude imghash in log show output 139/head
Christopher Collins [Thu, 8 Aug 2019 00:11:54 +0000 (17:11 -0700)] 
Include imghash in log show output

The Mynewt log entry header optionally includes an "imghash" field.
This field contains a truncated hash of the build that was running when
the entry was logged.  If an entry contains this hash, the Mynewt device
includes it in a `log show` response.

This commit changes newtmgr to print the image hash when it sees it in a
`log show` response.

3 years agoDepend on ishell.v2 (was: ishell.v1)
Christopher Collins [Thu, 8 Aug 2019 17:26:51 +0000 (10:26 -0700)] 
Depend on ishell.v2 (was: ishell.v1)

fixes [issue 8 in mcumgr-cli.](https://github.com/apache/mynewt-mcumgr-cli/issues/8)

3 years agoUpdate version string
Szymon Janc [Sun, 4 Aug 2019 20:02:31 +0000 (22:02 +0200)] 
Update version string

3 years agoUpdate tarm/serial
Fabio Utzig [Thu, 1 Aug 2019 12:06:43 +0000 (09:06 -0300)] 
Update tarm/serial

This brings in the latest version of tarm/serial, specifically to add
this fix: https://github.com/tarm/serial/pull/64/files

This should fix the serial flush on ARM, which was also reported here:
https://github.com/apache/mynewt-mcumgr-cli/issues/1

apache/mynewt-mcumgr-cli needs to be updated after this is merged.

3 years agonmxact: treat 0-length and nil tokens as equal
Christopher Collins [Mon, 29 Jul 2019 19:13:53 +0000 (12:13 -0700)] 
nmxact: treat 0-length and nil tokens as equal

3 years agonmxact: Don't require serial session to "unlisten"
Christopher Collins [Mon, 29 Jul 2019 17:51:49 +0000 (10:51 -0700)] 
nmxact: Don't require serial session to "unlisten"

There is a max of one active session per serial transport.  This
limitation is necessary because there is no demuxing protocol.  Whatever
data is received over serial is just forwarded to the active session.

Before this commit, nmxact required the active sesion to unregister
itself before any session could be registered again, even if the two
sessions are the same.

This commit relaxes this restriction.  Now, it is OK to register the
same session multiple times without unregistering in between.

This change is necessary due to the recent change to the session API.
Now, listening and transmitting are separate operations, so it is not
trivial to arrange for a session to be unregistered after use.  In
practice, there is never more than one serial session anyway.

3 years agonmxact: API change for CoAP operations
Christopher Collins [Wed, 24 Jul 2019 00:32:36 +0000 (17:32 -0700)] 
nmxact: API change for CoAP operations

This commit changes the CoAP functions in the `sesn` interface.  In
particular, it replaces the old API with three low-level functions:

    // Creates a listener for incoming CoAP messages matching the
    // specified criteria.
    ListenCoap(mc nmcoap.MsgCriteria) (*nmcoap.Listener, error)

    // Cancels the CoAP listener with the specified criteria.
    StopListenCoap(mc nmcoap.MsgCriteria)

    // Transmits a CoAP message.
    TxCoap(m coap.Message) error

Helper functions that combine these operations in useful ways are
implemented in `sesn/sesn_util.go`.

Prior to this change, `sesn` contained only two CoAP functions:

    TxCoapOnce(m coap.Message,
        opt TxOptions) (coap.COAPCode, []byte, error)

    TxCoapObserve(m coap.Message, opt TxOptions, NotifCb GetNotifyCb,
        stopsignal chan int) (coap.COAPCode, []byte, []byte, error)

Both of these functions performed transmit followed by a blocking
receive.  There were two issues with these functions:

1. Lots of duplicated logic in each `sesn` implementation.
2. Some forms of application layer security are not possible.

Re: 2- for example, say secure notifications are implemented as follows:

    Notification is encrypted and wrapped in a second, unencrypted, CoAP
    notification.  The outer message always specifies the same resource
    and has an indeterminate token.

To receive these notifications, the application needs to set up a
permanent listener for the secure resource.  This listener needs to be
created independently; it should not be paired with a transmit
operation.  To make this possible, the "listen" operation needs to be a
standalone function.

More generally, an interface with low level functions leads to less code
duplication and a better design.

3 years agoRemove security requirements from CoAP commands
Christopher Collins [Tue, 23 Jul 2019 23:32:12 +0000 (16:32 -0700)] 
Remove security requirements from CoAP commands

This commit removes a feature that has been unused for years.

Initially, the idea was that each CoAP resource would be defined with
one of the following security levels:

    * public (no security)
    * unauthenticated (encryption)
    * secure (encryption and authentication)

A session (connection) would be secured in a transport-specific way, but
the main transport under consideration was Bluetooth.  In Bluetooth,
characteristics are assigned security levels resembling the three above.
To implement this defunct security mechanism in CoAP-over-Bluetooth, we
would need three different characteristics, one corresponding to each
security level.  When sending a CoAP request, the newtmgr client would
choose the correct characteristic based on the secure state of the
connection.

This security policy has not been supported in Mynewt for a few years.
The code implementing it is unused and unmaintained, so I am removing it
now.

3 years agores: `-j` option to specify payload as JSON
Christopher Collins [Thu, 30 May 2019 00:23:10 +0000 (17:23 -0700)] 
res: `-j` option to specify payload as JSON

Before this commit, the `res` command accepted a payload in the form of
`k=v` pairs, e.g.,

    newtmgr res put /my/res a=start dur=1

This commit adds a new option to the `res` command: `-j`.  When this
option is specified, the CoAP message body is expressed as a JSON
string, e.g.,

    newtmgr res -j put /my/res '{"a":"start","dur":1}'

This allows for more complex payloads, and it removes ambiguity about
what data types are used.

3 years agoAdd new command: `shell exec`
Christopher Collins [Wed, 15 May 2019 00:42:21 +0000 (17:42 -0700)] 
Add new command: `shell exec`

This command executes the specified CLI command on the target device.
The response contains the CLI output that would have been sent to the
console.

Example usage:

    newtmgr --conntype oic_ble --connstring peer_name=mydev shell exec stat ble_gattc

3 years agoUpdate go/codec requirement to v1.1.7
Fabio Utzig [Tue, 23 Jul 2019 15:10:46 +0000 (12:10 -0300)] 
Update go/codec requirement to v1.1.7

Update here and on newt to the same version; should fix build
conflicts in tooling that requires both packages, like it happens
for mcumgr-cli.

3 years agoMerge pull request #129 from sjanc/rat
Szymon Janc [Tue, 16 Jul 2019 10:27:54 +0000 (12:27 +0200)] 
Merge pull request #129 from sjanc/rat

vendor removal and rat update

3 years agoRemove not needed files 129/head
Szymon Janc [Mon, 15 Jul 2019 15:32:25 +0000 (17:32 +0200)] 
Remove not needed files

3 years agoUpdate rat excludes
Szymon Janc [Mon, 15 Jul 2019 14:23:15 +0000 (16:23 +0200)] 
Update rat excludes

3 years agoRemove no longer used vendor code
Szymon Janc [Mon, 15 Jul 2019 14:15:48 +0000 (16:15 +0200)] 
Remove no longer used vendor code

3 years agoMerge pull request #124 from ccollins476ad/sirupsen
ccollins476ad [Fri, 21 Jun 2019 21:43:45 +0000 (14:43 -0700)] 
Merge pull request #124 from ccollins476ad/sirupsen

Switch to Go modules

3 years agoMerge pull request #125 from sjanc/fix
Szymon Janc [Tue, 21 May 2019 07:05:14 +0000 (09:05 +0200)] 
Merge pull request #125 from sjanc/fix

Update version string

3 years agoUpdate version string 125/head
Szymon Janc [Tue, 21 May 2019 07:01:20 +0000 (09:01 +0200)] 
Update version string

1.6 was released and so version on master should be bumped.

3 years agoSwitch to Go modules 124/head
Christopher Collins [Wed, 15 May 2019 20:39:59 +0000 (13:39 -0700)] 
Switch to Go modules

3 years agoRevendor
Christopher Collins [Wed, 15 May 2019 20:05:07 +0000 (13:05 -0700)] 
Revendor

3 years agoUse lowercase "sirupsen" import
Christopher Collins [Wed, 15 May 2019 20:01:52 +0000 (13:01 -0700)] 
Use lowercase "sirupsen" import

3 years agoMerge pull request #122 from ccollins476ad/request-too-big
ccollins476ad [Thu, 9 May 2019 00:40:41 +0000 (17:40 -0700)] 
Merge pull request #122 from ccollins476ad/request-too-big

image: Multiple rounds of chunklen reduction

3 years agoimage: Multiple rounds of chunklen reduction 122/head
Christopher Collins [Thu, 9 May 2019 00:32:23 +0000 (17:32 -0700)] 
image: Multiple rounds of chunklen reduction

Prior to this commit, newtmgr determined how many bytes of image data to
include in an upload request as follows:

1. Choose a large number to start (512).
2. Encode the upload request into CoAP (+ optional security).
3. Compare the size of request to the transport's MTU. If the request is
too large, subtract the difference from the chunk length.

This commit changes the above procedure such that it runs in a loop.
After reducing the chunk length, a new request is encoded and its length
is compared to the MTU.  The loop executes until the encoded request
fits within the MTU.

3 years agoMerge pull request #121 from ccollins476ad/empty-put
ccollins476ad [Wed, 10 Apr 2019 20:48:27 +0000 (13:48 -0700)] 
Merge pull request #121 from ccollins476ad/empty-put

Allow empty PUT and POST requests

3 years agoAllow empty PUT and POST requests 121/head
Christopher Collins [Wed, 10 Apr 2019 19:20:16 +0000 (12:20 -0700)] 
Allow empty PUT and POST requests

The CoAP spec does not require PUT and POST requests to contain a body.
If the user doesn't specify any key-value pairs, send an empty request.

3 years agoApply gofmt
Christopher Collins [Wed, 10 Apr 2019 19:20:11 +0000 (12:20 -0700)] 
Apply gofmt

3 years agoMerge pull request #119 from ccollins476ad/ompres
ccollins476ad [Thu, 4 Apr 2019 03:47:15 +0000 (20:47 -0700)] 
Merge pull request #119 from ccollins476ad/ompres

Allow alternate omgr resource

3 years agoMerge pull request #120 from ccollins476ad/image-upgrade
Vipul Rahane [Thu, 4 Apr 2019 01:49:01 +0000 (18:49 -0700)] 
Merge pull request #120 from ccollins476ad/image-upgrade

Allow upgrade-only requests

3 years agoAllow upgrade-only requests 120/head
Christopher Collins [Tue, 2 Apr 2019 21:24:46 +0000 (14:24 -0700)] 
Allow upgrade-only requests

This commit adds an additional boolean field to the "image upload"
request: `upgrade`.  If this field is true, the firmware will only
accept an upload attempt if the new image's version number is greater
than that of the currently running image (using a semver-compatible
comparision).

If the `upgrade` field is false or missing, no version check is
performed.

The firmware only processes the `upgrade` field on the first image
chunk.  It is harmless, but pointless, for a client to specify `upgrade`
in any subsequent chunks.

3 years agoAllow alternate omgr resource 119/head
Christopher Collins [Tue, 2 Apr 2019 21:24:32 +0000 (14:24 -0700)] 
Allow alternate omgr resource

This commit adds the `--ompres` (OMP resource) command line switch.  If
specified, newtmgr sends its OMP request to the specified resource
instead of `/omgr`.

3 years agoMerge pull request #118 from sjanc/windows
Szymon Janc [Fri, 29 Mar 2019 10:17:57 +0000 (11:17 +0100)] 
Merge pull request #118 from sjanc/windows

Fix build on Windows

3 years agoFix build on Windows 118/head
Szymon Janc [Fri, 29 Mar 2019 09:48:50 +0000 (10:48 +0100)] 
Fix build on Windows

3 years agoMerge pull request #117 from sjanc/rat
Szymon Janc [Tue, 26 Mar 2019 21:47:10 +0000 (22:47 +0100)] 
Merge pull request #117 from sjanc/rat

Add missing license header

3 years agoAdd missing license header 117/head
Szymon Janc [Tue, 26 Mar 2019 20:44:17 +0000 (21:44 +0100)] 
Add missing license header

3 years agoMerge pull request #116 from ccollins476ad/nmserial-open
ccollins476ad [Fri, 22 Mar 2019 19:43:44 +0000 (12:43 -0700)] 
Merge pull request #116 from ccollins476ad/nmserial-open

nmserial: Don't attempt to open serial port twice

3 years agonmserial: Don't attempt to open serial port twice 116/head
Christopher Collins [Fri, 22 Mar 2019 19:23:06 +0000 (12:23 -0700)] 
nmserial: Don't attempt to open serial port twice

If the port is already open, a second attempt is now a no-op.

3 years agoMerge pull request #115 from mkiiskila/datetime_now
mkiiskila [Fri, 22 Mar 2019 10:46:38 +0000 (12:46 +0200)] 
Merge pull request #115 from mkiiskila/datetime_now

datetime; allow use of keyword 'now' to set it to current system time.

3 years agodatetime; allow use of keyword 'now' to set it to current system time. 115/head
Marko Kiiskila [Fri, 22 Mar 2019 10:04:17 +0000 (12:04 +0200)] 
datetime; allow use of keyword 'now' to set it to current system time.

3 years agoMerge pull request #102 from mkiiskila/cli_filters
ccollins476ad [Thu, 21 Mar 2019 23:30:14 +0000 (16:30 -0700)] 
Merge pull request #102 from mkiiskila/cli_filters

newtmgr; add SetFilters() function to allow setting tx/rx filters for

3 years agoMerge pull request #114 from ccollins476ad/close-serial
ccollins476ad [Thu, 21 Mar 2019 23:25:36 +0000 (16:25 -0700)] 
Merge pull request #114 from ccollins476ad/close-serial

nmserial: Clear `closing` flag on close success

3 years agonmserial: Clear `closing` flag on close success 114/head
Christopher Collins [Thu, 21 Mar 2019 23:23:28 +0000 (16:23 -0700)] 
nmserial: Clear `closing` flag on close success

3 years agoUpdate README.md
aditihilbert [Fri, 25 Jan 2019 21:02:21 +0000 (13:02 -0800)] 
Update README.md

3 years agoMerge pull request #110 from ccollins476ad/bin-logs
ccollins476ad [Tue, 13 Nov 2018 17:24:42 +0000 (09:24 -0800)] 
Merge pull request #110 from ccollins476ad/bin-logs

log: Display CBOR/binary log entries as text

3 years agolog: Display CBOR/binary log entries as text 110/head
Christopher Collins [Fri, 2 Nov 2018 23:02:00 +0000 (16:02 -0700)] 
log: Display CBOR/binary log entries as text

3 years agoMerge pull request #108 from sjanc/rat
Szymon Janc [Thu, 18 Oct 2018 17:53:39 +0000 (19:53 +0200)] 
Merge pull request #108 from sjanc/rat

Update rat excludes

3 years agoUpdate rat excludes 108/head
Szymon Janc [Thu, 18 Oct 2018 00:46:48 +0000 (02:46 +0200)] 
Update rat excludes