Feature/iec104 - #3
Open
its-ayush wants to merge 20 commits into
Open
Conversation
…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
…re/network available
…erseded by docs/internal/)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Closes #
Type of change
Testing
Checklist
pytest tests/unit/passes locallyruff check src/passes (or pre-commit hooks ran clean)mypy src/passes forprotoskipper.core.*(GUI layer may haveignore_errors = true)CHANGELOG.mdupdated under[Unreleased]Signed-off-by: Name <email>(orgit commit -s)Screenshots (if GUI change)