Skip to content

vms-30e: DECnet Phase IV engine rung-1 — userspace AF_PACKET datalink + HELLO tx/rx + adjacency drive (Option B, Rule-1-hidden) - #997

Merged
baron-3dl merged 1 commit into
mainfrom
work/vms-decnet-engine-b-rung1
Aug 31, 2026
Merged

baron-3dl merged 1 commit into
mainfrom
work/vms-decnet-engine-b-rung1

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

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 proven src/vmsscs/scsd.c raw-Ethernet datalink, not an in-kernel AF_DECnet forward-port. This PR lands the engine that moves frames using the three already-landed engine-agnostic codecs (HELLO #964, NSP vms-6986, adjacency vms-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 of SCSD.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-test proves tx/rx/adjacency with no CAP_NET_RAW; --show-executor reports identity with no socket.

Rule 1 — the socket is HIDDEN behind a VMS surface

The AF_PACKET socket 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 as scsd hides its SCA socket behind SCS. INV-0: identification is OVMX-branded, never "DECnet for OpenVMS".

Proven three ways

  1. 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 authenticity: INV-1 system-identity SSOT + logical-driven login banners (vms-e652) #1), including the rtr 0.0 neighbour field encoded as aa:00:04:00:00:00 and AREA=0 (tests/vmsdecnet/test_dnet_engine.c, Rule-8).
  2. Real send/recv — two engine instances drive DOWN→INITIALIZING→UP→DOWN over a real socketpair(2), and via DECNETD.EXE --self-test.
  3. 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).

ctest -R 'vmsdecnet|vmsscs' → 31/31 pass (incl. the new vmsdecnet_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-a1c noted ruled.

Deferred (children of vms-30e)

  • rd vms-c23 — NSP logical-link connection service (Connect Initiate/Confirm, data/ack, disconnect) over the live datalink.
  • rd vms-aac0 — live-VAX oracle adjacency bracket (a lab VAX SHOW ADJACENT NODES lists 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

… + 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
baron-3dl merged commit 3086186 into main Aug 31, 2026
122 checks passed
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>
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