vms-30e: DECnet Phase IV engine rung-1 — userspace AF_PACKET datalink + HELLO tx/rx + adjacency drive (Option B, Rule-1-hidden) - #997
Merged
Conversation
… + HELLO tx/rx + adjacency drive (Option B, Rule-1-hidden)
Operator ruling 2026-08-31 (rd vms-a1c): the DECnet engine is Option B — a
userspace NSP/routing engine over AF_PACKET SOCK_RAW, forking the proven
src/vmsscs/scsd.c raw-Ethernet datalink, NOT an in-kernel AF_DECnet
forward-port. Rung 1 (rd vms-449d) lands the engine that MOVES FRAMES using the
three landed engine-agnostic codecs.
New: src/vmsdecnet/engine/
- dnet_engine.{c,h}: the socketless engine core (pure logic over frame buffers
+ an injected clock, same discipline as the codecs). Binds the HELLO codec +
the adjacency state machine into a live routing endnode: builds the full
on-wire endnode-HELLO frame, drives the T3 emission cadence and the listen
timer, consumes received frames, and owns the VMS-faithful presentation
surface (executor / circuit / SHOW ADJACENT NODES). Touches NO socket.
- decnetd.c (DECNETD.EXE): the daemon — the DECnet analogue of SCSD.EXE and the
ONLY place the raw datalink (scs_datalink_{open,send,recv}, the generic
raw-L2 abstraction written engine-agnostic for exactly this second consumer)
is touched. Fail-honest if the netdev can't be opened (INV-6). A --self-test
proves tx/rx/adjacency with no CAP_NET_RAW (DECnet analogue of scsd
--dlm-selftest); --show-executor reports identity without a socket.
Rule 1 — the AF_PACKET socket and the Linux interface name are HIDDEN behind
the DECnet routing surface an NCP user sees (executor node area.node + State =
on, a circuit over the datalink device, SHOW ADJACENT NODES), exactly as scsd
hides its SCA socket behind SCS. INV-0: identification is OVMX-branded, never
"DECnet for OpenVMS".
Proven three ways:
- ORACLE BYTE-EXACT: the engine's endnode-HELLO for node 1.1 is byte-identical
to the vms-3be VAX capture (register §4.6 specimen #1), incl the rtr-0.0
neighbour field encoded as aa:00:04:00:00:00 (tests/vmsdecnet/test_dnet_engine.c).
- REAL SEND/RECV: two engine instances drive DOWN→INITIALIZING→UP→DOWN over a
real socketpair(2) and via DECNETD.EXE --self-test.
- LIVE AF_PACKET on-wire: two DECNETD.EXE endnodes over a veth pair in an
isolated netns exchanged 60-byte HELLOs on the T3 cadence and each listed the
other in SHOW ADJACENT NODES (frames_dropped=0).
Clean-room (Rule 8): wire form from public DNA Phase IV + the vms-3be lab
capture + OVMX's own scsd datalink pattern. No VSI/HPE source.
Decision recorded in docs/decnet-provenance-register.md §6.0. Deferred to
children of vms-30e: NSP logical-link connection service (rd vms-c23) and the
live-VAX oracle adjacency bracket (rd vms-aac0, the §4.4 done-bar).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V2jrHU9fdTTfKhB5HBQNQH
baron-3dl
added a commit
that referenced
this pull request
Aug 31, 2026
…del fix Feature patch over V0.6-8. Bumps the identity SSOT in step (vms-8328 gate): OVMX_PRODUCT_VERSION V0.6-8 -> V0.6-9 and os-release VERSION_ID 0.6-8 -> 0.6-9. Adds the V0.6-9 RELEASE_NOTES entry. Ships four increments already merged to main (GCC-self-host + networking; NO cluster-participation claim): - DECnet Phase IV engine rung-1 (#997, vms-30e): userspace DECNETD.EXE, Option B, AF_PACKET hidden behind a VMS surface, oracle-byte-exact + live on-wire. - VMS condition-handling CHF rung-1 (#996, vms-2e72): real SYS$SETEXV + frame- chain 4-stage dispatch replacing the emulation. - RMS workload over genuine ODS-2 (#999, vms-1b5): versioning ;1/;2, dir enum with real File IDs, fail-honest RMS$_FNF. Port CRTL->RMS binding = vms-47e. - alpha cc1 -O0 "miscompile" was the VMS data model, not a bug (#995, vms-4b5). Also excises a latent overclaim in the V0.5-7 shipped-release note (release-eng domain): "two OVMX nodes form a VMScluster against each other" was the hand- launched SCS probe pair (initiator+joiner), NOT two booted nodes auto-joining (vms-110b) — corrected to say so, keeping the real handshake credit. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V2jrHU9fdTTfKhB5HBQNQH
baron-3dl
added a commit
that referenced
this pull request
Aug 31, 2026
…del fix (#1001) Feature patch over V0.6-8. Bumps the identity SSOT in step (vms-8328 gate): OVMX_PRODUCT_VERSION V0.6-8 -> V0.6-9 and os-release VERSION_ID 0.6-8 -> 0.6-9. Adds the V0.6-9 RELEASE_NOTES entry. Ships four increments already merged to main (GCC-self-host + networking; NO cluster-participation claim): - DECnet Phase IV engine rung-1 (#997, vms-30e): userspace DECNETD.EXE, Option B, AF_PACKET hidden behind a VMS surface, oracle-byte-exact + live on-wire. - VMS condition-handling CHF rung-1 (#996, vms-2e72): real SYS$SETEXV + frame- chain 4-stage dispatch replacing the emulation. - RMS workload over genuine ODS-2 (#999, vms-1b5): versioning ;1/;2, dir enum with real File IDs, fail-honest RMS$_FNF. Port CRTL->RMS binding = vms-47e. - alpha cc1 -O0 "miscompile" was the VMS data model, not a bug (#995, vms-4b5). Also excises a latent overclaim in the V0.5-7 shipped-release note (release-eng domain): "two OVMX nodes form a VMScluster against each other" was the hand- launched SCS probe pair (initiator+joiner), NOT two booted nodes auto-joining (vms-110b) — corrected to say so, keeping the real handshake credit. Claude-Session: https://claude.ai/code/session_01V2jrHU9fdTTfKhB5HBQNQH Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
DECnet Phase IV engine — rung 1 (rd vms-449d, epic vms-30e)
Operator ruling 2026-08-31 (rd vms-a1c): Option B — a userspace NSP/routing engine over
AF_PACKET SOCK_RAW, forking the provensrc/vmsscs/scsd.craw-Ethernet datalink, not an in-kernelAF_DECnetforward-port. This PR lands the engine that moves frames using the three already-landed engine-agnostic codecs (HELLO #964, NSPvms-6986, adjacencyvms-b15).What's here (
src/vmsdecnet/engine/)dnet_engine.{c,h}— the socketless engine core: pure logic over frame buffers + an injected clock (same discipline as the codecs). Builds the full on-wire endnode-HELLO frame, drives the T3 emission cadence + the adjacency listen timer, consumes received frames, and owns the VMS-faithful presentation surface. Touches no socket.decnetd.c(DECNETD.EXE) — the daemon, the DECnet analogue ofSCSD.EXE: the only place the raw datalink (scs_datalink_{open,send,recv}) is touched. Fail-honest if the netdev can't open (INV-6).--self-testproves tx/rx/adjacency with noCAP_NET_RAW;--show-executorreports identity with no socket.Rule 1 — the socket is HIDDEN behind a VMS surface
The
AF_PACKETsocket and the Linux interface name are never exposed. The OVMX side sees the DECnet routing surface an NCP user sees — executor node (area.node+ name +State = on), a circuit over the datalink device, and SHOW ADJACENT NODES — exactly asscsdhides its SCA socket behind SCS. INV-0: identification is OVMX-branded, never "DECnet for OpenVMS".Proven three ways
rtr 0.0neighbour field encoded asaa:00:04:00:00:00and AREA=0 (tests/vmsdecnet/test_dnet_engine.c, Rule-8).DOWN→INITIALIZING→UP→DOWNover a realsocketpair(2), and viaDECNETD.EXE --self-test.AF_PACKETon-wire — twoDECNETD.EXEendnodes over avethpair in an isolated netns exchanged 60-byte HELLOs on the T3 cadence and each listed the other in SHOW ADJACENT NODES (frames_dropped=0).ctest -R 'vmsdecnet|vmsscs'→ 31/31 pass (incl. the newvmsdecnet_engine_unit); engine + daemon warnings-clean under-Wall -Wextra -Werror.Decision recorded
docs/decnet-provenance-register.md§6.0 — the §4.5 go/no-go verdict (Option B), rationale (scsd precedent / no live in-kernel stack to ride / Rule-1-hidden), and the rung-1 landing.vms-a1cnoted ruled.Deferred (children of vms-30e)
SHOW ADJACENT NODESlists the OVMX node — the §4.4 done-bar).Clean-room (Rule 8): wire form from public DNA Phase IV + the vms-3be lab capture + OVMX's own scsd datalink pattern. No VSI/HPE source.
🤖 Generated with Claude Code