|
1 | 1 | # C++ Port Status |
2 | 2 |
|
3 | | -## Current milestone: Phase 1B |
4 | | - |
5 | | -The C++20 port now includes the deterministic foundation, MMS Data values, IEC 61850 UTC |
6 | | -time, and the complete GOOSE wire codec from BER PDU through Ethernet/VLAN/process-bus |
7 | | -framing. |
8 | | - |
9 | | -| Original C# area | C++ target | Status | |
10 | | -|---|---|---| |
11 | | -| ASN.1 BER primitives | `asn1` | Ported and tested | |
12 | | -| Ethernet, VLAN, process-bus header | `ethernet` | Ported and tested | |
13 | | -| Classic PCAP | `capture` | Ported and tested | |
14 | | -| GOOSE retransmission schedule | `goose/retransmission_schedule` | Ported and tested | |
15 | | -| IEC 61850 UTC time | `mms/utc_time` | Ported and tested | |
16 | | -| MMS Data / AllData | `mms/data_value`, `mms/data_codec` | Ported and tested | |
17 | | -| GOOSE PDU | `goose/pdu`, `goose/pdu_codec` | Ported and tested | |
18 | | -| GOOSE Ethernet frame | `goose/frame`, `goose/frame_codec` | Ported and tested | |
19 | | -| GOOSE runtime publisher/subscriber | Phase 1C | Pending | |
20 | | -| Sampled Values | Phase 1D | Pending | |
21 | | -| SCL and COMTRADE | Phase 2 | Pending | |
22 | | -| TPKT/COTP/ACSE/MMS association | Phase 3 | Pending | |
23 | | -| Reporting, control, and file service | Phase 4 | Pending | |
24 | | -| Simulator, CLI, and native UI | Phase 5 | Pending | |
25 | | - |
26 | | -## Phase 1B validation |
27 | | - |
28 | | -- C++20 GCC 14.2, warnings as errors: passed. |
29 | | -- C++20 Clang 17, warnings as errors: passed. |
30 | | -- Three CTest executables: core, MMS, and GOOSE. |
31 | | -- GOOSE PDU golden vector matches the C# encoder field order and BER representation. |
32 | | -- Complete VLAN-tagged GOOSE Ethernet frame has a byte-for-byte golden vector. |
33 | | -- PDU and frame round trips pass. |
34 | | -- Dataset entry-count mismatch, invalid UTC time, wrong outer tag, and wrong EtherType are rejected. |
35 | | -- No external C++ runtime dependency is required. |
36 | | - |
37 | | -See `MIGRATION_CHECKLIST.md` for the complete roadmap and current checkboxes. |
| 3 | +## Current milestone |
| 4 | + |
| 5 | +**Phase 1C — GOOSE subscriber supervision and publisher runtime is implemented.** |
| 6 | + |
| 7 | +The C++ stack now covers the deterministic path from MMS values through a complete |
| 8 | +GOOSE Ethernet frame and the state machines immediately above that wire codec. |
| 9 | + |
| 10 | +## Delivered modules |
| 11 | + |
| 12 | +| Area | Status | |
| 13 | +|---|---| |
| 14 | +| BER primitives | Complete | |
| 15 | +| Ethernet, VLAN, process-bus header | Complete | |
| 16 | +| Classic PCAP reader/writer | Complete | |
| 17 | +| IEC 61850 UTC time | Complete | |
| 18 | +| MMS Data / AllData codec | Complete | |
| 19 | +| GOOSE PDU codec | Complete | |
| 20 | +| GOOSE Ethernet frame codec | Complete | |
| 21 | +| GOOSE subscriber supervision | Complete | |
| 22 | +| GOOSE publisher session/runtime | Complete, offline frame output only | |
| 23 | +| Sampled Values | Not started | |
| 24 | +| SCL and COMTRADE | Not started | |
| 25 | +| TPKT/COTP/ACSE/MMS association | Not started | |
| 26 | +| Reporting and control | Not started | |
| 27 | +| Simulator and native UI | Not started | |
| 28 | + |
| 29 | +## Phase 1C behavior |
| 30 | + |
| 31 | +Subscriber supervision includes: |
| 32 | + |
| 33 | +- TimeAllowedToLive deadline calculation and one-shot expiry reporting; |
| 34 | +- arrival-gap tracking; |
| 35 | +- duplicate, retransmission, sequence-gap, sequence-regression, state-change, |
| 36 | + state-jump, and state-regression classification; |
| 37 | +- `uint32` counter wraparound; |
| 38 | +- expected stream identity validation; |
| 39 | +- configuration revision change indication; and |
| 40 | +- detection of changed AllData while `stNum` remains unchanged. |
| 41 | + |
| 42 | +Publisher runtime includes: |
| 43 | + |
| 44 | +- initial publication with configured state and sequence counters; |
| 45 | +- state-change publication with `stNum` increment and `sqNum = 0`; |
| 46 | +- retransmissions with `sqNum` increment and wraparound; |
| 47 | +- exponential min-time to max-time scheduling; |
| 48 | +- schedule reset after every state change; and |
| 49 | +- a deterministic `poll(now)` API that avoids sleeping threads and timing-flaky tests. |
| 50 | + |
| 51 | +## Validation |
| 52 | + |
| 53 | +- GNU C++ 14.2, Release, warnings as errors: passed. |
| 54 | +- Clang 17, Release, warnings as errors: passed. |
| 55 | +- Four CTest executables passed under both compilers: |
| 56 | + - core foundation; |
| 57 | + - MMS values; |
| 58 | + - GOOSE wire codec; and |
| 59 | + - GOOSE subscriber/publisher runtime. |
| 60 | +- Windows MSVC verification is performed by GitHub Actions for every stacked PR. |
38 | 61 |
|
39 | 62 | ## Safety boundary |
40 | 63 |
|
41 | | -This milestone provides offline codecs only. It does not start a raw-Ethernet publisher, |
42 | | -subscribe to a network interface, perform MMS writes, or execute IED control. |
| 64 | +No network adapter is opened by Phase 1C. The publisher runtime only returns encoded |
| 65 | +Ethernet-frame bytes. Npcap transmission, background network threads, active GOOSE |
| 66 | +publishing, MMS writes, and IED controls remain disabled until PCAP equivalence and |
| 67 | +isolated-lab interoperability are completed. |
0 commit comments