Skip to content

Feature/iec104 - #3

Open
its-ayush wants to merge 20 commits into
developfrom
feature/iec104
Open

Feature/iec104#3
its-ayush wants to merge 20 commits into
developfrom
feature/iec104

Conversation

@its-ayush

@its-ayush its-ayush commented May 4, 2026

Copy link
Copy Markdown
Collaborator

What does this PR do?

Closes #

Type of change

  • Bug fix
  • New feature
  • Refactor (no behaviour change)
  • Documentation
  • CI / build / packaging

Testing

Checklist

  • pytest tests/unit/ passes locally
  • ruff check src/ passes (or pre-commit hooks ran clean)
  • mypy src/ passes for protoskipper.core.* (GUI layer may have ignore_errors = true)
  • New public functions/classes have docstrings
  • CHANGELOG.md updated under [Unreleased]
  • DCO sign-off: every commit has Signed-off-by: Name <email> (or git commit -s)

Screenshots (if GUI change)

its-ayush added 20 commits May 4, 2026 01:26
…AP timeline

P4.B.8  master: browse_files() + download_file() (F_FR/SR/SG/LS/AF)
P4.B.9  master: auto-reconnect on disconnect (5 new tests)
P4.C.5  slave: add_file() + _handle_file_service (call_dir/select/call_section)
P4.D.4  fuzzer: TLS mutation engine (5 new tests)
P4.D.5  GUI: Iec104FuzzerDialog wired into Tools -> IEC 104 menu
P4.E.3  PCAP viewer: Timeline/k-w analysis tab (QPainter + QScrollArea)

asdu.py: F_FR/SR/SC/LS/AF/SG/DR codec (encode + decode); F_SG_NA_1 uses
         variable-length element (sentinel -1) to stay within 249-byte ASDU
         limit; MAX_SEGMENT_PAYLOAD corrected to 238 bytes.

16 file-transfer tests + 5 reconnect tests + 5 TLS-fuzzer tests added.
526 unit tests passing, ruff clean.
…ructure

- examples/scenarios/bus_load_test.py: IEC 104 bus-load test scenario
  (P5.B.1) with latency percentiles, PPS stats, and formatted report
- tests/unit/test_scenario_bus_load.py: 13 unit tests for the scenario
  (539 unit tests total)
- gui/dialogs/update_checker.py: in-app Check for Updates dialog (P6.D.1)
  polls GitHub releases API in QThread, shows semver comparison, never
  auto-installs; linked under Help -> Check for Updates...
- Makefile: top-level build targets (appimage/deb/rpm/dmg/installer/wheel)
- packaging/linux/build_appimage.sh: PyInstaller + appimagetool (P6.A.1)
- packaging/linux/build_deb.sh + build_rpm.sh: fpm-based packages (P6.A.2)
- packaging/macos/build_dmg.sh: PyInstaller + create-dmg + codesign
  + notarytool (P6.B.1); entitlements.plist + README
- packaging/windows/protoskipper.iss: Inno Setup 6 script (P6.C.1)
- packaging/windows/build_installer.ps1: PowerShell build driver w/ signing
- packaging/REPRODUCIBILITY.md: documents SOURCE_DATE_EPOCH approach (P6.E)
- .github/workflows/release.yml: updated Windows job to use Inno Setup
- Change _BT_CUSTOM from 0x00000BAD to 0x40000001: bit 30 set per
  RFC 9443 §3.1 (do not copy when filtering), ProtoSkipper-private
  type so standard tools skip it silently until a dissector is given
- Update module docstring to explain the type choice
- Add 3 explicit AC tests to test_pcapng.py:
    test_custom_block_type_is_0x40000001 (hardcoded value, not constant)
    test_custom_block_carries_protocol_id (UTF-8 pid in raw bytes)
    test_custom_block_carries_payload (raw payload in file bytes)
  18 tests total, all passing; 543 unit tests total
Comprehensive design doc mirroring the IEC 61850 and IEC 104 plans:

- Benchmarks against VTS, Cimetrics, Chipkin CAS, YABE, Wireshark
- 6 personas + 6 primary journeys (discover, read, override, trend,
  schedule, replay) with time budgets
- Full feature catalog: must-haves (F1-F16), differentiators (D1-D14),
  stretch (S1-S7); complete service + object catalogues per ASHRAE
  135-2020 incl. BACnet/SC Annex YY
- Per-feature UX specs for all 17 panels (New Connection client/sim,
  probe, object browser, watchlist, trends, alarms, schedule editor,
  files, routing/BBMD/FD, replay, bench, conformance, fuzzer, diff,
  vendor profiles, scripting)
- Setup file format (bacnet-setup.json) + canonical points list schema
  (EDE-2/EDE-3/AT/CSV/JSON)
- Implementation breakdown P7.A-P7.I with AC + tests for each task,
  superseding the 3-task stub currently in EXECUTION_PLAN.md
- Cross-cutting test strategy: edge cases, perf targets, 24h soak
- Open questions: bacpypes3 maturity, BACnet/SC PKI UX, MS/TP timing
  on USB-RS485, BBMD on Windows (Npcap), BTL copyright
- Plugin skeleton: bacnet.ip registered via entry-point
- EDE-2/EDE-3/AT/CSV/JSON points-list parser (points.py)
- Vendor profile YAML library: 13 vendors (JCI, Honeywell, Trane,
  Siemens, ABB, Schneider, Distech, Reliable, KMC, Delta, ALC, Tridium, generic)
- BACnet/IP client session backed by bacpypes3 (async->sync bridge)
- Discovery: Who-Is/I-Am broadcast, RPM enumeration
- RP/RPM reads, WP writes with priority-array awareness
- COV subscriptions (SubscribeCOV) + unsubscribe/close lifecycle
- Device simulator scaffold (P7.F)
- Unit tests: 63 passing (parser, vendor profiles, plugin discovery, address format)
- ruff clean, mypy clean (10 source files)
… dialogs

- NewConnectionDialog: detect bacnet.ip protocol, default port 47808,
  add Device ID spinbox (0-4194302, 0=auto), build address as
  host:port[/dev=N] format, parse /dev=N in set_address()
- ProbeNetworkDialog: add bacnet.ip target hint, display device_id/
  vendor_id/max_apdu from I-Am discovery metadata
- Update BACNET_PLAN.md: mark P7.I.4 in-progress with status note
…e-mgmt

- P7.B.9: get_event_information() (paginated), acknowledge_alarm()
  (safety-gated) — GetEventInformation/AcknowledgeAlarm APDUs
- P7.B.10: read_trend_log() via app.read_range() on logBuffer;
  supports by-position, by-sequence-number, by-time range specs
- P7.B.11: read_schedule() (RPM of 10 schedule props),
  write_schedule_default() (WP, safety-gated)
- P7.B.12: read_file() (AtomicReadFile stream-access, chunked loop),
  write_file() (AtomicWriteFile, safety-gated, audit-recorded)
- P7.B.13: time_sync() / UTC variant (unconfirmed),
  reinitialize_device() / device_communication_control() (safety-gated)
- _log_record_to_dict() helper for BACnetLogRecord → plain dict
- 45 new unit tests (651 total), lint clean, mypy clean
- BACNET_PLAN.md: mark P7.B.9-P7.B.13 as 🔶 partial
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant