Repository navigation
Releases
v1.6.1
Date: 2026-11-12
Previous release: v1.6.0
Fixed
iec61850-interop-libiec61850resolves--remoteonce at start-up and gives libiec61850'sRSessionthe IPv4 address. libiec61850'sUdpSocket_sendTorunsgetaddrinfoon the address for every SPDU, so with a container name the R-SV publisher made one DNS query per sample. On the arm64 runner that held it at 12,163 and 13,054 of the expected 16,000 samples in 4 s, against an 80 % floor (sv.msvcb01.udp, libiec61850 → dscsystems). The subscriber received every sample; only the publisher's rate was short. The contract and the checks are unchanged.
Changed
scripts/lib.shrun_client_pair: a client that writes nothing has its exit code, its stderr and the server's last log lines written to the log. A client run that Docker itself cannot start (exit 125) is retried like a failed association. A main CI run of this release's fix failed once withlibiec61850-ied-reporter -> iec61850-rust-ied-server: no JSON Lines output, 0.7 s after the previous check finished, with stderr discarded; it did not reproduce in 40 local runs. The next occurrence shows its cause.
Adapter images
| Image | Digest |
|---|---|
ghcr.io/otfabric/iec61850-interop-libiec61850:v1.6.1 |
sha256:dbace896592c139991ec07c9975830e170499ccabb5fc172ec2f92f992f73714 |
ghcr.io/otfabric/iec61850-interop-iec61850bean:v1.6.1 |
sha256:2b7c328c77155027447253fc04e9b854ae21349793185084fa6cf3824964db90 |
ghcr.io/otfabric/iec61850-interop-dscsystems:v1.6.1 (GPL-3.0) |
sha256:be96477983b4105e6709af8a731a274f05e74e5d465dee1e5f3aec753688f73e |
ghcr.io/otfabric/iec61850-interop-iec61850-rust:v1.6.1 |
sha256:19a0cc7099e6c044b2823e4747bd4c7f75fbe1a5f0e91779cb418517df9c99c5 |
ghcr.io/otfabric/iec61850-interop-cbsigma:v1.6.1 |
sha256:99f7dad5ea19bf6c69d9c5931bcc017bbe5b98ec8b18147083d06f964af2cd4a |
Pinning in consumer repositories
LIBIEC61850_IMAGE=ghcr.io/otfabric/iec61850-interop-libiec61850@sha256:dbace896592c139991ec07c9975830e170499ccabb5fc172ec2f92f992f73714
IEC61850BEAN_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850bean@sha256:2b7c328c77155027447253fc04e9b854ae21349793185084fa6cf3824964db90
DSCSYSTEMS_IMAGE=ghcr.io/otfabric/iec61850-interop-dscsystems@sha256:be96477983b4105e6709af8a731a274f05e74e5d465dee1e5f3aec753688f73e
IEC61850RUST_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850-rust@sha256:19a0cc7099e6c044b2823e4747bd4c7f75fbe1a5f0e91779cb418517df9c99c5
CBSIGMA_IMAGE=ghcr.io/otfabric/iec61850-interop-cbsigma@sha256:99f7dad5ea19bf6c69d9c5931bcc017bbe5b98ec8b18147083d06f964af2cd4aSee manifest.json for full provenance (libiec61850 commit SHA, iec61850bean version, dscsystems/go-iec61850 and iec61850-rust commit SHAs, cB-Sigma iec61850 and iec61850-sim tags, fixture revisions).
v1.6.0
Date: 2026-11-12
Previous release: v1.5.0
Added
iec61850-interop-libiec61850implements contract 1.4--transport udp(R-GOOSE and R-SV) with libiec61850's ownRSession: the image builds the pinned libiec61850 with Mbed TLS v3.6.0 (2ca6c28, Apache-2.0 OR GPL-2.0-or-later) inthird_party/mbedtls, which compiles R-GOOSE, R-SV and the HMAC.--capabilitiescarries"transports":["ethernet","udp"];udpTransport.libiec61850is true. The transport isadapters/libiec61850/src/rudp.c; docs/routable.md lists what libiec61850 does and does not do.scripts/interop.shruns the udp checks between libiec61850 and dscsystems in both directions (GOOSE and SV pass). libiec61850 → libiec61850 is a known failure, asserted: itsRSessionwrites each APDU length two octets too long and refuses its own SPDUs as malformed (waiverlibiec61850-rsession-apdu-length).fixtures/capabilities.json: five known limitations of libiec61850'sRSession(APDU length, no version 1 sender, no HMAC-SHA256-80, the HMAC-SHA256-256 length octet, no replay window).
Changed
- The libiec61850 image links Mbed TLS, which also makes TLS available to its MMS code; no adapter configures it.
versions.yamlrecords the Mbed TLS pin under libiec61850.
Adapter images
| Image | Digest |
|---|---|
ghcr.io/otfabric/iec61850-interop-libiec61850:v1.6.0 |
sha256:62962e108b853c973722edd30da95b6e8beea685f117d0e7411423cff8bdc635 |
ghcr.io/otfabric/iec61850-interop-iec61850bean:v1.6.0 |
sha256:b1c1880637f53086707bfd59dc087d7ab40a7c2288da7a3210291d6d1066d8d3 |
ghcr.io/otfabric/iec61850-interop-dscsystems:v1.6.0 (GPL-3.0) |
sha256:3459f512165931544fa0139cb1519aade645e1636d4cf62ce0b28f5c44d3801a |
ghcr.io/otfabric/iec61850-interop-iec61850-rust:v1.6.0 |
sha256:a55f3f2ee8107519f0d3b1976869b5ffe74f3c9382f14459b2d0895a5c3cb8c7 |
ghcr.io/otfabric/iec61850-interop-cbsigma:v1.6.0 |
sha256:5cdbd552eb729fd79d6ffcddb986498061e7b769ccab4a9e46233dfaba24cde2 |
Pinning in consumer repositories
LIBIEC61850_IMAGE=ghcr.io/otfabric/iec61850-interop-libiec61850@sha256:62962e108b853c973722edd30da95b6e8beea685f117d0e7411423cff8bdc635
IEC61850BEAN_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850bean@sha256:b1c1880637f53086707bfd59dc087d7ab40a7c2288da7a3210291d6d1066d8d3
DSCSYSTEMS_IMAGE=ghcr.io/otfabric/iec61850-interop-dscsystems@sha256:3459f512165931544fa0139cb1519aade645e1636d4cf62ce0b28f5c44d3801a
IEC61850RUST_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850-rust@sha256:a55f3f2ee8107519f0d3b1976869b5ffe74f3c9382f14459b2d0895a5c3cb8c7
CBSIGMA_IMAGE=ghcr.io/otfabric/iec61850-interop-cbsigma@sha256:5cdbd552eb729fd79d6ffcddb986498061e7b769ccab4a9e46233dfaba24cde2See manifest.json for full provenance (libiec61850 commit SHA, iec61850bean version, dscsystems/go-iec61850 and iec61850-rust commit SHAs, cB-Sigma iec61850 and iec61850-sim tags, fixture revisions).
v1.5.0
Date: 2026-11-11
Previous release: v1.4.0
Added
- Contract 1.4 (minor):
--transport udpon the GOOSE and SV publishers and subscribers, R-GOOSE and R-SV: the APDUs in the session protocol of IEC TR 61850-90-5 over UDP, signed with HMAC-SHA256-80, -128 or -256 under the key of--key-idand--key(--mac,--session-version 1|2). Publishers send to--remote; subscribers receive on--listen(:102) or a multicast--group, refuse unsecured SPDUs unless--allow-unsecured, and report each refused SPDU as a newrejectevent with areason(unknown-key,authentication,unsecured,replay,malformed). Agooseevent received over UDP carriesfrom, the sender's address.--capabilitiesof an image that has it carries"transports":["ethernet","udp"]. Default--transport ethernet: nothing changes for a harness that does not ask for it. docs/routable.md. iec61850-interop-dscsystemsimplements it with dscsystems/go-iec61850'srsession(v0.6.6, already pinned):adapters/dscsystems/internal/rudp, unit-tested on the loopback. The other images do not (fixtures/capabilities.jsonudpTransport, a new column in the capability matrix).scripts/goose-crosscheck.shandscripts/sv-crosscheck.shwithTRANSPORT=udp: signed SPDUs to the subscriber's container, after a rogue publisher with the same key ID and other key material whose SPDUs must all be refused.scripts/interop.shruns both between every pair of adapters with the udp transport (today dscsystems with itself; independent pairs come with a second stack).
Adapter images
| Image | Digest |
|---|---|
ghcr.io/otfabric/iec61850-interop-libiec61850:v1.5.0 |
sha256:601374067bd387a654d2e483f4dcba7511e20393d3a82b4e53670520e2cfca42 |
ghcr.io/otfabric/iec61850-interop-iec61850bean:v1.5.0 |
sha256:4008c73b3edf68ac025607c8041d02317887d4c4e5260445f3ee23f24b6c5279 |
ghcr.io/otfabric/iec61850-interop-dscsystems:v1.5.0 (GPL-3.0) |
sha256:eea55bc78ab59490f555f63786a2cb44f93d2d337d7b3537843ba6d74fa6e811 |
ghcr.io/otfabric/iec61850-interop-iec61850-rust:v1.5.0 |
sha256:6a276e126b96f9782d5073c6d44c43cb1e2713c80468eeb1ad6054802fb15c1a |
ghcr.io/otfabric/iec61850-interop-cbsigma:v1.5.0 |
sha256:7baf32ba5fed96840f925f3d75cfbda2380133c01a803502fa5bfddccd8a5201 |
Pinning in consumer repositories
LIBIEC61850_IMAGE=ghcr.io/otfabric/iec61850-interop-libiec61850@sha256:601374067bd387a654d2e483f4dcba7511e20393d3a82b4e53670520e2cfca42
IEC61850BEAN_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850bean@sha256:4008c73b3edf68ac025607c8041d02317887d4c4e5260445f3ee23f24b6c5279
DSCSYSTEMS_IMAGE=ghcr.io/otfabric/iec61850-interop-dscsystems@sha256:eea55bc78ab59490f555f63786a2cb44f93d2d337d7b3537843ba6d74fa6e811
IEC61850RUST_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850-rust@sha256:6a276e126b96f9782d5073c6d44c43cb1e2713c80468eeb1ad6054802fb15c1a
CBSIGMA_IMAGE=ghcr.io/otfabric/iec61850-interop-cbsigma@sha256:7baf32ba5fed96840f925f3d75cfbda2380133c01a803502fa5bfddccd8a5201See manifest.json for full provenance (libiec61850 commit SHA, iec61850bean version, dscsystems/go-iec61850 and iec61850-rust commit SHAs, cB-Sigma iec61850 and iec61850-sim tags, fixture revisions).
v1.4.0
Date: 2026-11-06
Previous release: v1.3.0
Added
-
Adapter
cbsigma, imageghcr.io/otfabric/iec61850-interop-cbsigma: a fifth independent reference, in Go, on cB-Sigma/iec61850v0.1.0(MMS client, the IEC 61850 client services, GOOSE) and cB-Sigma/iec61850-simv0.1.0(the simulated IED), both Apache-2.0 and pinned by tag (cB-Sigma publishes no releases). Commands:cbsigma-ied-server(the fixture IED built by the simulator's own SCL loader frominterop.icd: logical nodes, data sets, report control blocks and the three controls with their ctlModel, thenvalues.json),cbsigma-ied-client,cbsigma-ied-controller(direct, SBO and SBOw through the library'sOperate, which runs the whole sequence of the control model),cbsigma-ied-reporter,cbsigma-goose-publisherandcbsigma-goose-subscriber(frames encoded and decoded by the library). No MMS or SV commands: the simulator is an IED, not a generic MMS server, and SV is out of this adapter's scope; they answerunsupported. The ICCP / TASE.2 simulator is not used. -
adapters/cbsigma/go.modholds the pins (andgolang.org/x/netraised to v0.62.0 past the advisories of v0.58.0); the Dockerfile fails when itsIEC61850_VERSION/IEC61850_SIM_VERSIONdiffer from go.mod, andscripts/check-versions.pywhen versions.yaml, the Dockerfile, go.mod and the NOTICE disagree. The image carries the licence and notice of every linked module under/licenses. -
CI builds and smoke-tests the image, runs its MMS and IED commands against libiec61850 in both directions and GOOSE between it and every other publisher and subscriber, and vets, lints, tests (
-race) and govulnchecks the adapter. The Release workflow builds and publishes it for linux/amd64 and linux/arm64;manifest.jsongainscbsigma(iec61850,iec61850-sim,independent: true) and its image digest. The Upstream workflow compares both tags with the latest ones (scripts/latest-upstream.py cbsigma,scripts/build-candidate.sh cbsigma "iec61850@<tag> iec61850-sim@<tag>"). -
fixtures/capabilities.json: the cbsigma commands and upstreams, four known limitations found with it (below), iec61850-rust's report control blocks'DatSetwithout the logical device (LLN0$dsInterop), which dscsystems' new interop suite against this harness found, and its refusal of GetBRCBValues as one Read of the whole BRCB. -
The cbsigma adapter module declares
go 1.26.10, as the dscsystems one, so CI vets and scans it with a standard library that has the fixes govulncheck asks for. -
Contract 1.3 (minor):
*-ied-reporter --trigger dchg|gi. Withgithe reporter writes the URCB'sGI(operationtrigger-gi) instead ofGGIO1.SPS1.stVal[ST]and gets the general interrogation report of both members ofdsInterop, from every server, including those that refuse ST writes as IEC 61850-7-2 says.--capabilitiesof an image whose reporter takes it carries"reporterTriggers":["dchg","gi"]; all five reference images do. -
Report and control evidence:
scripts/smoke.shandscripts/interop.shcheck the GI report of every reporter that takes--trigger gi(both members included, reasonsgi, values[false, 1]) and that a controller's operate succeeds andstValfollows. Before, a reporter's or controller's output was only checked to be JSON, so a pair passed without a report or a control. Pairs that fail for a registered limitation have to fail that way (waiversiec61850-rust-urcb-implicit-reservation,iec61850bean-report-data-references) and fail the run once they pass.
Fixed
- The reporters and controllers of libiec61850, iec61850bean, dscsystems and iec61850-rust addressed
InteropLD/LLN0.RP.urcb01andInteropLD/GGIO1.<DO>as given: they found the URCB and the controls only on a server that names its logical device by the bare instance (OT Fabric's own image), and failed with object-does-not-exist against every reference server, which names itInteropIEDInteropLDand the URCB instanceurcb0101. They now take the logical device from the server directory and the URCB or its first instance from the logical node directory, as the IED clients already did (contract 1.3). The line targets carry the logical device found. - iec61850-rust's reporter named a member included for several reasons "unknown"; it now gives the first in the contract's order.
libiec61850-ied-controllerandiec61850-rust-ied-controllerread--ctlvalwithatoi, so the contract's--ctlval trueoperated false; it takestrue|false|1|0(anything else is an argument error, exit 1).
Changed
- dscsystems/go-iec61850 moves from commit
6bf3f37(v0.6.5-1) to its releasev0.6.6(4833767). It types Enum attributes as an 8-bit Integer, so the iec61850bean client now readsLLN0.Mod.ctlModel[CF]from the dscsystems IED server, and that known limitation is removed. It also refuses a control write to an object without a control structure, and names logical devices byldNameon request (not used here). The Dockerfile pins the version asDSCSYSTEMS_VERSION(the tag, or the pseudo-version of an untagged commit) next toDSCSYSTEMS_SHA, and checks that the module proxy resolves one to the other;scripts/build-candidate.sh dscsystemssets both. - The Own stack (go-iec61850) workflow takes the reference adapters from
make print-published-adaptersof the harness release it tests against, so OT Fabric's own image is tested against cbsigma once this release is the latest.
Known limitations
cbsigma-ied-serverrefuses writes of ST and MX (object-access-denied), as IEC 61850-7-2 makes them read-only, so a reporter cannot make the data change it waits for; reports from the simulator's own changes are tested in the adapter's unit tests.- The simulator describes Enum attributes as Integer(32), so the iec61850bean client cannot map
LLN0.Mod.ctlModel[CF]. - iec61850bean's server reads a data set only with
specificationWithResultTRUE, which cB-Sigma's client leaves at its default (FALSE). - iec61850-rust accepts only an 11-bit
parameterCBBin MMS Initiate; cB-Sigma sends the 18 bits of ISO 9506:2003, so the two cannot associate in either direction. - Found by the new report checks: iec61850-rust's server enables a URCB only after the client wrote
Resv(no implicit reservation; registered since v1.0 for the libiec61850 client, now seen with every client but dscsystems'), and iec61850bean's server announces data references in OptFlds without sending them.
Adapter images
| Image | Digest |
|---|---|
ghcr.io/otfabric/iec61850-interop-libiec61850:v1.4.0 |
sha256:5f865e1917f246763e992701c688a58d157d641ca91674e51bbc342ef945adad |
ghcr.io/otfabric/iec61850-interop-iec61850bean:v1.4.0 |
sha256:df9b48b5f903ec55f7bcb7baabe651ae204c685702d77979e89165fad00c6416 |
ghcr.io/otfabric/iec61850-interop-dscsystems:v1.4.0 (GPL-3.0) |
sha256:bba8bc1653b4c5bb51c4b8766f0bd99d77dd3523574ed2630b09695212618f2e |
ghcr.io/otfabric/iec61850-interop-iec61850-rust:v1.4.0 |
sha256:c961c039384b0ea968e786a259e1f7a3a4781f2b544ff50d794bd965e991314c |
ghcr.io/otfabric/iec61850-interop-cbsigma:v1.4.0 |
sha256:bf0597703e7d1495ab3aa144d481bc92a0a4aef87a2bfafcbd75f7c1fbb4aa16 |
Pinning in consumer repositories
LIBIEC61850_IMAGE=ghcr.io/otfabric/iec61850-interop-libiec61850@sha256:5f865e1917f246763e992701c688a58d157d641ca91674e51bbc342ef945adad
IEC61850BEAN_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850bean@sha256:df9b48b5f903ec55f7bcb7baabe651ae204c685702d77979e89165fad00c6416
DSCSYSTEMS_IMAGE=ghcr.io/otfabric/iec61850-interop-dscsystems@sha256:bba8bc1653b4c5bb51c4b8766f0bd99d77dd3523574ed2630b09695212618f2e
IEC61850RUST_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850-rust@sha256:c961c039384b0ea968e786a259e1f7a3a4781f2b544ff50d794bd965e991314c
CBSIGMA_IMAGE=ghcr.io/otfabric/iec61850-interop-cbsigma@sha256:bf0597703e7d1495ab3aa144d481bc92a0a4aef87a2bfafcbd75f7c1fbb4aa16See manifest.json for full provenance (libiec61850 commit SHA, iec61850bean version, dscsystems/go-iec61850 and iec61850-rust commit SHAs, cB-Sigma iec61850 and iec61850-sim tags, fixture revisions).
v1.3.0
Date: 2026-11-06
Previous release: v1.2.0
Added
own/go-iec61850/: OT Fabric's own stack (go-iec61850 and the go-mms it is built on) behind the same contract, as adapterotfabricwith the commandsotfabric-mms-server,otfabric-mms-client,otfabric-ied-*,otfabric-goose-*andotfabric-sv-*. The manual workflow Own stack (go-iec61850) builds it from the latest go-iec61850 and go-mms releases, tests it against the reference images of the latest harness release and publishesghcr.io/otfabric/iec61850-interop-otfabric:<go-iec61850 version>and:latest. It is not an independent implementation, and it is not in this release or itsmanifest.json(ADR-0012); results against it are at most "Tested".- Contract 1.2 (minor):
--versionand--capabilitiesmay carryupstream(name,version,revision,license,independentEngine). The reference images do not, and are recorded as independent;results.jsontakesindependentfrom what an image says of itself. scripts/smoke.sh <adapter>(the contract smoke test of one image, driven by its--capabilities) andscripts/interop.sh <adapters…>(MMS and IED clients and servers of every adapter against the first in both directions, GOOSE and Sampled Values between every publisher and subscriber),make smoke,make interop,make lint,make print-adapters,ADAPTERS. Any image can stand in for an adapter withADAPTER_IMAGE_<adapter>.
Changed
- The layout follows the other harnesses:
docs/contract.mdisdocs/CONTAINER_CONTRACT.md,COVERAGE.mdisdocs/CAPABILITIES.md,docker-compose.ymliscompose.yaml;scripts/smoke-test.shis split intoscripts/lib.sh,scripts/smoke.shandscripts/interop.sh. Each stack's clients now also run against its own server, and the hub's reporter and controller against every other stack's server. The rootgo.mod(no packages) is gone. The image names, commands and contract are unchanged. - CI runs shellcheck and the REQUIREMENTS.md R1 check (no reference to a library under test outside
own/).
Adapter images
| Image | Digest |
|---|---|
ghcr.io/otfabric/iec61850-interop-libiec61850:v1.3.0 |
sha256:36256bf2fff44d46bf9df3f77bd3f41527f7c40bbc776b4f103db27086f8e1d8 |
ghcr.io/otfabric/iec61850-interop-iec61850bean:v1.3.0 |
sha256:7c9d84d098b4e985d5213335493092e419dd1fe221fa56fda28e778aeb16241c |
ghcr.io/otfabric/iec61850-interop-dscsystems:v1.3.0 (GPL-3.0) |
sha256:e98845163756609d789711e03a85f06f27518ff5022ec3bfa89669f9af5f2dbe |
ghcr.io/otfabric/iec61850-interop-iec61850-rust:v1.3.0 |
sha256:b3aacbdf75734729c0b8ca37cb704f97b6359d97368113d15488a0fef7ad8b39 |
Pinning in consumer repositories
LIBIEC61850_IMAGE=ghcr.io/otfabric/iec61850-interop-libiec61850@sha256:36256bf2fff44d46bf9df3f77bd3f41527f7c40bbc776b4f103db27086f8e1d8
IEC61850BEAN_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850bean@sha256:7c9d84d098b4e985d5213335493092e419dd1fe221fa56fda28e778aeb16241c
DSCSYSTEMS_IMAGE=ghcr.io/otfabric/iec61850-interop-dscsystems@sha256:e98845163756609d789711e03a85f06f27518ff5022ec3bfa89669f9af5f2dbe
IEC61850RUST_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850-rust@sha256:b3aacbdf75734729c0b8ca37cb704f97b6359d97368113d15488a0fef7ad8b39See manifest.json for full provenance (libiec61850 commit SHA, iec61850bean version, dscsystems/go-iec61850 and iec61850-rust commit SHAs, fixture revisions).
v1.2.0
Date: 2026-11-04
Previous release: v1.1.1
Added
*-ied-client --local-tsel HEX --remote-tsel HEX: the calling and called COTP T-selectors (1 to 4 octets in hex) for libiec61850, iec61850bean and iec61850-rust. Without them each stack sends its own defaults, now documented in docs/contract.md (libiec61850 and iec61850-rust0001/0001, iec61850bean0000/0001). Consumers use this to run independent clients with the selectors IEDs and engineering tools use (01,0001,00000001) against a server that accepts any selector or requires one. Motivated by otfabric/go-iec61850#28, where an IED refused a client that sent none. Contract 1.1 (a minor addition: new flags, old behaviour by default).- dscsystems:
dscsystems/go-iec61850cannot set the selectors, so its clients answer the flags withunsupported(exit 4), recorded as a known limitation.
Adapter images
| Image | Digest |
|---|---|
ghcr.io/otfabric/iec61850-interop-libiec61850:v1.2.0 |
sha256:0cf188313b2d7dc6c1a6233909c7ac147c3c27f212d1b233a158ec33f938e28e |
ghcr.io/otfabric/iec61850-interop-iec61850bean:v1.2.0 |
sha256:33a4c4ab362ea5cdae5c26da7b5662e975164c6d030e3f1898c08a69017d8f14 |
ghcr.io/otfabric/iec61850-interop-dscsystems:v1.2.0 (GPL-3.0) |
sha256:9de6f6005c988a0e22955af6e4a20216df4c65febab224c15eea9ea08c985102 |
ghcr.io/otfabric/iec61850-interop-iec61850-rust:v1.2.0 |
sha256:a5e9a178127a7a6fb9ceda1095c74a4cfad91ecff181f15018e1dc024e3a8c59 |
Pinning in consumer repositories
LIBIEC61850_IMAGE=ghcr.io/otfabric/iec61850-interop-libiec61850@sha256:0cf188313b2d7dc6c1a6233909c7ac147c3c27f212d1b233a158ec33f938e28e
IEC61850BEAN_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850bean@sha256:33a4c4ab362ea5cdae5c26da7b5662e975164c6d030e3f1898c08a69017d8f14
DSCSYSTEMS_IMAGE=ghcr.io/otfabric/iec61850-interop-dscsystems@sha256:9de6f6005c988a0e22955af6e4a20216df4c65febab224c15eea9ea08c985102
IEC61850RUST_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850-rust@sha256:a5e9a178127a7a6fb9ceda1095c74a4cfad91ecff181f15018e1dc024e3a8c59See manifest.json for full provenance (libiec61850 commit SHA, iec61850bean version, dscsystems/go-iec61850 and iec61850-rust commit SHAs, fixture revisions).
v1.1.1
Date: 2026-11-01
Previous release: v1.1.0
Changed
- The
Releaseworkflow can be run by hand from the Actions tab with a patch, minor or major bump. The adapters, the container contract and the fixtures do not change.
Adapter images
| Image | Digest |
|---|---|
ghcr.io/otfabric/iec61850-interop-libiec61850:v1.1.1 |
sha256:be48749244ff3a019e0a61062134ed0fa69225b93e86fe50dde085ac2ee9b356 |
ghcr.io/otfabric/iec61850-interop-iec61850bean:v1.1.1 |
sha256:e8d3327eb783d10ebe9e34773368470d4f0ddda3abe8492bf787874e6e08e898 |
ghcr.io/otfabric/iec61850-interop-dscsystems:v1.1.1 (GPL-3.0) |
sha256:ea4b19da85ffcfb3fadd9ecd65cec3f5688763cdf950f0d16e5b239eb3b825f9 |
ghcr.io/otfabric/iec61850-interop-iec61850-rust:v1.1.1 |
sha256:859fd8eced8cf57d97682b994994f85e125294341f302f307058575cf663e720 |
Pinning in consumer repositories
LIBIEC61850_IMAGE=ghcr.io/otfabric/iec61850-interop-libiec61850@sha256:be48749244ff3a019e0a61062134ed0fa69225b93e86fe50dde085ac2ee9b356
IEC61850BEAN_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850bean@sha256:e8d3327eb783d10ebe9e34773368470d4f0ddda3abe8492bf787874e6e08e898
DSCSYSTEMS_IMAGE=ghcr.io/otfabric/iec61850-interop-dscsystems@sha256:ea4b19da85ffcfb3fadd9ecd65cec3f5688763cdf950f0d16e5b239eb3b825f9
IEC61850RUST_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850-rust@sha256:859fd8eced8cf57d97682b994994f85e125294341f302f307058575cf663e720See manifest.json for full provenance (libiec61850 commit SHA, iec61850bean version, dscsystems/go-iec61850 and iec61850-rust commit SHAs, fixture revisions).
v1.1.0
Date: 2026-10-31
Previous release: v1.0.1
Fixed
- dscsystems adapter:
mmsjson.ToValueturned a non-string octet-string into an empty value;DataAccessErrorandErrNotDeletedmatch when wrapped; Go floor 1.26.10.
Adapter images
| Image | Digest |
|---|---|
ghcr.io/otfabric/iec61850-interop-libiec61850:v1.1.0 |
sha256:0eea1e074fb72838987524f3c91c3be6bf9de5443fdde45086bccfaf81feef26 |
ghcr.io/otfabric/iec61850-interop-iec61850bean:v1.1.0 |
sha256:f757a79f2ec155b74b02951c8590e98671ffb46df2d2a966e1808337027603fa |
ghcr.io/otfabric/iec61850-interop-dscsystems:v1.1.0 (GPL-3.0) |
sha256:fdec082bf05cb6f98611a67d59786ca266790e3887bf4c51f5b3d61cc8e3af92 |
ghcr.io/otfabric/iec61850-interop-iec61850-rust:v1.1.0 |
sha256:35290939925173a707788247809a5578e01ffca0536e2b9eeb51cd05fb4f81a3 |
Pinning in consumer repositories
LIBIEC61850_IMAGE=ghcr.io/otfabric/iec61850-interop-libiec61850@sha256:0eea1e074fb72838987524f3c91c3be6bf9de5443fdde45086bccfaf81feef26
IEC61850BEAN_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850bean@sha256:f757a79f2ec155b74b02951c8590e98671ffb46df2d2a966e1808337027603fa
DSCSYSTEMS_IMAGE=ghcr.io/otfabric/iec61850-interop-dscsystems@sha256:fdec082bf05cb6f98611a67d59786ca266790e3887bf4c51f5b3d61cc8e3af92
IEC61850RUST_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850-rust@sha256:35290939925173a707788247809a5578e01ffca0536e2b9eeb51cd05fb4f81a3See manifest.json for full provenance (libiec61850 commit SHA, iec61850bean version, dscsystems/go-iec61850 and iec61850-rust commit SHAs, fixture revisions).
v1.0.1
Date: 2026-10-28
Summary
Provenance fix. The release's manifest.json reported the adapter's own
Maven version (1.0.0) in its iec61850bean field; it now reports the
iec61850bean library version the image is built with (1.9.0). Images,
commands, events and fixtures are unchanged from v1.0.0.
Changes
Fixed
manifest.jsoniec61850beanis read from thecom.beanit:iec61850beandependency ofadapters/iec61850bean/pom.xml, not from the first<version>in the file.make ciprints the same version in its provenance block (it printed the POMmodelVersion,4.0.0).
Adapter images
| Image | Digest |
|---|---|
ghcr.io/otfabric/iec61850-interop-libiec61850:v1.0.1 |
sha256:c90b97fb41905983ad8e3db258aee03621348c53cbc50ac9d44dafb72df601e4 |
ghcr.io/otfabric/iec61850-interop-iec61850bean:v1.0.1 |
sha256:5545f059848ac19178fa934a5018c815978081af002ca7db6479d4bfd527e864 |
ghcr.io/otfabric/iec61850-interop-dscsystems:v1.0.1 (GPL-3.0) |
sha256:9c9a48eb3608c75e45a359b7c4614eb1cd7c3da9197dfbc18710b87647d7cf67 |
ghcr.io/otfabric/iec61850-interop-iec61850-rust:v1.0.1 |
sha256:77dc11a2580f784dcdb9f06f3420c0fe7cfa264e73bc881d6f2fe26bb79f6795 |
Pinning in consumer repositories
LIBIEC61850_IMAGE=ghcr.io/otfabric/iec61850-interop-libiec61850@sha256:c90b97fb41905983ad8e3db258aee03621348c53cbc50ac9d44dafb72df601e4
IEC61850BEAN_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850bean@sha256:5545f059848ac19178fa934a5018c815978081af002ca7db6479d4bfd527e864
DSCSYSTEMS_IMAGE=ghcr.io/otfabric/iec61850-interop-dscsystems@sha256:9c9a48eb3608c75e45a359b7c4614eb1cd7c3da9197dfbc18710b87647d7cf67
IEC61850RUST_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850-rust@sha256:77dc11a2580f784dcdb9f06f3420c0fe7cfa264e73bc881d6f2fe26bb79f6795See manifest.json for full provenance (libiec61850 commit SHA, iec61850bean version, dscsystems/go-iec61850 and iec61850-rust commit SHAs, fixture revisions).
v1.0.0
Date: 2026-10-28
Summary
The repository is renamed from mms-interop to iec61850-interop, since it
covers MMS, IEC 61850 IED services, GOOSE and Sampled Values, and the
adapter contract becomes stable. The adapters, commands, fixtures and event
shapes are those of v0.4.1; what changes is where they are published and the
promise that comes with them.
Breaking changes
- Images move to new names. Pull
ghcr.io/otfabric/iec61850-interop-<stack>
instead ofghcr.io/otfabric/mms-interop-<stack>:ghcr.io/otfabric/iec61850-interop-libiec61850ghcr.io/otfabric/iec61850-interop-iec61850beanghcr.io/otfabric/iec61850-interop-dscsystems(GPL-3.0)ghcr.io/otfabric/iec61850-interop-iec61850-rust
- Local builds are tagged
iec61850-interop-<stack>:local; the Compose
project and the GOOSE/SV bridge network areiec61850-interopand
iec61850-interop-goose. - The Go module paths are
github.com/otfabric/iec61850-interopand
github.com/otfabric/iec61850-interop/adapters/dscsystems; the Rust crate is
iec61850-interop-iec61850-rust. - A fixture without
identity.modelnow identifies asiec61850-interop
(wasmms-interop).fixtures/mms/interop.jsonsets the model, so the
published images answer as before.
Unchanged, so consumers only swap the image references: the command names
(libiec61850-ied-server, ...), their flags and output, the consumer
environment variables (LIBIEC61850_IMAGE, IEC61850BEAN_IMAGE,
DSCSYSTEMS_IMAGE, IEC61850RUST_IMAGE), and the fixture revisions
mms-v2, iec61850-v3, goose-v1, sv-v1.
Compatibility promise
From v1.0.0 the repository follows semantic versioning. The image names,
command names and flags, event and operation shapes, exit codes, fixture
revisions, and the schemas of capabilities.json and manifest.json change
incompatibly only in a new major version. Minor versions add (commands,
optional fields, event types, fixture revisions next to the old ones); patch
versions fix adapters to match the contract and update known limitations.
Consumers ignore fields and events they do not know. The full statement is
in docs/contract.md.
Changes
Added
docs/contract.md: the shared adapter contract (ready, version and
capabilities events, fixed-sequence client output, exit codes) and the
stability promise;docs/goose.mdanddocs/sv.mdrefer to it.- A stack × capability matrix in
README.mdandCOVERAGE.md, generated
fromfixtures/capabilities.jsonbyscripts/gen-coverage.sh;
--checkmode runs in CI and inmake validate-fixtures. manifest.jsongainsrepositoryandsvFixture.org.opencontainers.image.sourceanddescriptionlabels on the
libiec61850 and iec61850bean images (the other two had them), pointing at
https://github.com/otfabric/iec61850-interop.
Changed
- README rewritten around the four stacks and four profiles: capability
matrix, image names and digest pinning, quick starts for MMS, IED, GOOSE
and SV, L2 networking on Linux and macOS, licensing per image, consumer
repositories. capabilities.jsonadapterVersionis1.0.0.
Adapter images
| Image | Digest |
|---|---|
ghcr.io/otfabric/iec61850-interop-libiec61850:v1.0.0 |
sha256:b2a448fed4356f8e51ac1a535aa9e7dfd8b514ccbc255c035baef96d694e9066 |
ghcr.io/otfabric/iec61850-interop-iec61850bean:v1.0.0 |
sha256:d48c0684d65be03229d9fd65d20f7117cbc6b613ff73112a5402aee65f950ae8 |
ghcr.io/otfabric/iec61850-interop-dscsystems:v1.0.0 (GPL-3.0) |
sha256:851423aa967c19578b3fe82870546b93a3c0a3f7df38b287812b2a4d75334f37 |
ghcr.io/otfabric/iec61850-interop-iec61850-rust:v1.0.0 |
sha256:5c9cc78c8be9d955c3d6b50b0f464da9653dcf58ad3a2a1e9578d46f89d753fc |
Pinning in consumer repositories
LIBIEC61850_IMAGE=ghcr.io/otfabric/iec61850-interop-libiec61850@sha256:b2a448fed4356f8e51ac1a535aa9e7dfd8b514ccbc255c035baef96d694e9066
IEC61850BEAN_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850bean@sha256:d48c0684d65be03229d9fd65d20f7117cbc6b613ff73112a5402aee65f950ae8
DSCSYSTEMS_IMAGE=ghcr.io/otfabric/iec61850-interop-dscsystems@sha256:851423aa967c19578b3fe82870546b93a3c0a3f7df38b287812b2a4d75334f37
IEC61850RUST_IMAGE=ghcr.io/otfabric/iec61850-interop-iec61850-rust@sha256:5c9cc78c8be9d955c3d6b50b0f464da9653dcf58ad3a2a1e9578d46f89d753fcSee manifest.json for full provenance (libiec61850 commit SHA, iec61850bean version, dscsystems/go-iec61850 and iec61850-rust commit SHAs, fixture revisions).