Skip to content

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 17:53
35f0a37

Date: 2026-10-20
Previous release: v0.4.0

Summary

dnp3ctl exposes what go-dnp3 v1.1.0 added for dnp3-interop's contract 1.3 (broadcast, scheduled freezes, device attribute sets, file append, deadbands) and the rest of go-dnp3's API that a command line can use: several controls in one request, the management functions, clearing the restart indication, outstation indications, go-dnp3's log under --debug and the Secure Authentication options of the outstation. New flags and commands; nothing that worked before changes.

Highlights

  • --broadcast no-confirm|confirm|optional on client operate (with --mode direct or direct-no-ack) and client freeze: the request goes to every outstation on the channel at a broadcast address. Nobody answers; each outstation sets IIN1.0 BROADCAST in its next response. Refused with secure authentication: outstations running SAv5 accept a critical broadcast only with an aggressive mode MAC over an earlier challenge of the same connection, which a dnp3ctl command cannot have.
  • client freeze --at TIME [--interval DURATION]: FREEZE_AT_TIME, a freeze at a time to come, repeated at the interval.
  • Device attribute sets: client attributes --set N reads a set other than the standard set 0.
  • client write-attribute (new): writes a device attribute of any set, with --value of --data-type vstr|uint|int|float.
  • client file put --append: adds to the end of a file (OPEN_FILE in APPEND mode).
  • client read --object g34: the deadbands of the analog inputs, which outstations now answer; client write-deadband (new) writes them.
  • Several controls in one request: client operate --index 0,1,4, with --value once or per index for set-points. The result lists a status per control (controls in JSON); a direct operate refused for some controls reports the others as executed, with exit code 7.
  • client manage (new): INITIALIZE_DATA, INITIALIZE_APPL, START_APPL, STOP_APPL and SAVE_CONFIG.
  • client clear-restart (new): clears DEVICE_RESTART (IIN1.7), which the one-shot commands leave set.
  • --debug also shows go-dnp3's own log entries (connections, reconnects, warnings, authentication), next to the frame trace.
  • server start --sa-reply-timeout, --sa-statistics-class, --sa-statistics-threshold: the challenge reply timeout and the security statistic events of the outstation.
  • Simulated outstation: attribute_sets in the model, with writable variations; set 0 accepts writes of the user-assigned attributes the model gives (owner, location, user-id, device-name) and refuses the others; it answers broadcasts, scheduled freezes, reads and writes of deadbands and the management functions (refused_functions in the model refuses some), and reports the indications of the model (local-control, device-trouble, config-corrupt).

Changed

  • The simulated outstation refuses writes of device attributes of set 0 other than the user-assigned ones the model gives; it accepted every write before.
  • Docs name the DSC Systems library "DSC go-dnp3", as dnp3-interop does, and the interop note refers to dnp3-interop v0.4.1 (contract 1.3).

Fixed

  • The linux/armv7 build: a range check of the outstation model compared an int with 4294967295, which does not compile where int has 32 bits; whole numbers that do not fit an int on such platforms are now accepted as well. make check now typechecks for 32-bit targets (make cross).

Upgrade notes

  • No breaking changes to commands, flags or JSON output; the JSON gains broadcast, interval, set, attribute, append, function and value fields where they apply, and client operate gains controls (and error for a partial result).
  • --index of client operate is now a list; a single index works as before.

Quality

  • Every changed line is covered by tests, end to end against the simulated outstation: broadcast controls and freezes, scheduled freezes (also the refusal of a time that has passed), attribute sets read and written (writable and not), set-0 writes, append, deadbands read and written, several controls (all succeeded, partly refused, refused at select), every management function and a refused one, indications and clearing the restart indication, the debug log of both roles.