Repository navigation
Conversation
Verified against the current repository MMS clients with full, embedded, security, reporting/control, and live loopback regression coverage.
f000772
into
agent/complete-server-consolidation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a31112b855
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const auto report = mms::MmsStaticReportConnection::poll( | ||
| runtime, urcbs, monotonic_ms(), {}, report_frame, report_workspace); |
There was a problem hiding this comment.
Supply a timestamp when OptFlds requests one
When a client writes OptFlds with the report-time-stamp bit (0x20), which the writable URCB object currently accepts, every GI or integrity poll passes an empty report_time here. MmsInformationReportSpanCodec::validate_report requires exactly six bytes when that bit is selected, so encoding returns report_encode_failed, the emission plan remains pending, and the server never sends the report. Supply a six-byte BinaryTime value or reject the timestamp option.
Useful? React with 👍 / 👎.
| case MmsStaticUrcbAttribute::sequence_number: | ||
| return kUnsigned32Type; |
There was a problem hiding this comment.
Advertise SqNum as an 8-bit unsigned value
For a GVAA request on a URCB SqNum object, this branch advertises Unsigned(32), even though the runtime stores, increments, and wraps the sequence number as std::uint8_t and the URCB attribute is INT8U. Exact-model clients therefore receive an incorrect schema and may reject the RCB; introduce an unsigned-8 type specification here and align the root SqNum declaration in build_lln0_type().
Useful? React with 👍 / 👎.
Goal
Port the proven server-side interoperability behavior from
masarray/ARIEC61850onto the current static MMS server lineage, using the old IED simulator/server as a behavioral oracle rather than inventing a new engineering-client profile.The old simulator is known from project history to have been browsable by external vendor external IEC 61850 client. This PR does not claim current live external IEC 61850 client acceptance until a new controlled live trial is captured.
Tranche 1 — IEC 61850 discovery hierarchy
The old simulator advertises Logical Nodes as domain-scoped MMS NamedVariables and exposes FC/DO/DA beneath each LN through its hierarchical TypeSpecification. The current static table also keeps flattened leaf aliases for exact Read/Write lookup, but those aliases must not be advertised as extra top-level NamedVariables when the corresponding LN root exists.
Implemented behavior:
GetNameList(NamedVariable)advertises root Logical Nodes such asLLN0,LPHD1, andGGIO1when root objects exist;GGIO1$ST$Ind1$stValremain available to exact Read/Write lookup but are hidden from the top-level directory;Compatibility hooks
Evidence boundary
This PR is software/runtime work only at this stage. No IEC 61850 conformance, physical IED interoperability, or current external IEC 61850 client PASS is claimed until live terminal + PCAP evidence is captured.