Repository navigation
v0.5.0
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|optionalonclient operate(with--mode directordirect-no-ack) andclient 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 Nreads a set other than the standard set 0. client write-attribute(new): writes a device attribute of any set, with--valueof--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--valueonce or per index for set-points. The result lists a status per control (controlsin 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.--debugalso 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_setsin 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_functionsin the model refuses some), and reports theindicationsof 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
intwith 4294967295, which does not compile whereinthas 32 bits; whole numbers that do not fit aninton such platforms are now accepted as well.make checknow 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,functionandvaluefields where they apply, andclient operategainscontrols(anderrorfor a partial result). --indexofclient operateis 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.