Skip to content

vms-534: DLM cross-node harness H1 — two real-executive nodes exchange 0x6007 HELLO over a socket netdev - #842

Merged
baron-3dl merged 3 commits into
mainfrom
work/vms-534
Aug 28, 2026
Merged

baron-3dl merged 3 commits into
mainfrom
work/vms-534

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

DLM cross-node harness — rung H1 (vms-534)

Builds on H0 (#840): two OVMX QEMU nodes, each with a real /dev/vms, joined on one shared L2 by a QEMU socket (mcast) netdev — no host bridge, no privilege (CI-runnable) — where each node's SCSD.EXE --connect --iface eth0 emits its own 0x6007 LAVC/SCA HELLO (dest AB-00-04-01-01-01) and receives the peer's. Transport/HELLO only; DLM grants are later rungs (H3/H4), the executive stub and grant logic are untouched.

Make-or-break finding (de-risked first, as instructed)

A QEMU socket,mcast netdev DOES faithfully flood the 0x6007 group multicast between two guests with no host bridge and no privilege. Proven in isolation by sca_l2probe (a tiny static raw-L2 send/recv+pcap tool) before any harness was built. sockpair (listen/connect) was also verified as a robust fallback — still a socket netdev, still CI-runnable; no pivot to tap+bridge was needed.

pcap evidence (tcpdump reading node A's reconstructed capture — node B's real SCSD HELLO):

52:54:00:00:00:0b > ab:00:04:01:01:01, ethertype SCA (0x6007), length 134
  0x0010:  ... 4f56 4d58 42   ...OVMXB

H1 verdict (full harness, run under KVM)

verdict inputs: A_HELLOSENT=1  B_HELLOSENT=1
                A_received_B_HELLO=1 (src=52:54:00:00:00:0b)
                B_received_A_HELLO=1 (src=52:54:00:00:00:0a)
  DLM HARNESS H1 PASSED

Distinct identity per node (SCSNODE=OVMXA/OVMXB, SCSSYSTEMID=1601/1602, distinct HW MACs — the MAC is how each node tells the peer's HELLO from its own looped-back beacon).

What's here

  • tests/qemu/sca_l2probe.c — static raw-L2 probe (netdev de-risk + pcap capturer)
  • tests/qemu/Dockerfile.dlm-harness-h1 + init_dlm_h1.sh + run_dlm_harness_h1.sh — the full two-node harness
  • tests/qemu/Dockerfile.dlm-harness-h1-derisk + init_dlm_h1_derisk.sh + run_dlm_h1_derisk.sh — the isolated netdev proof (reproducible investigation tooling)
  • CI job dlm-harness-h1 under the existing dlm_harness path filter (passes /dev/kvm through when present, TCG fallback; uploads pcap + node logs)

Node logs collected over ttyS1; per-node pcap reconstructed from a base64 ttyS2 dump. Rule 9 runtime-target gate: PASS. Clean-room Rule 8 respected — the HELLO fidelity is scs_hello.c; sca_l2probe sends only a marker frame to exercise transport.

🤖 Generated with Claude Code

baron-3dl and others added 3 commits August 28, 2026 14:23
…-guest socket-netdev runner)

De-risk the make-or-break H1 unknown before building the full harness: does a
QEMU socket netdev flood the 0x6007 group multicast (AB-00-04-01-01-01) between
two guests with no host bridge and no privilege? sca_l2probe is a tiny static
raw-L2 send/recv+pcap probe; the runner boots two minimal guests wired only by
-netdev socket (mcast default, sockpair fallback).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Two real-executive OVMX QEMU nodes (each vms.ko -> /dev/vms), wired on one L2 by
a QEMU socket mcast netdev (no bridge, no privilege), each running SCSD --connect
--iface eth0. Verdict: BOTH nodes emit SCSD-I-HELLOSENT AND each logs the peer's
inbound 0x6007 HELLO (SCSD-I-FRAME src=peer MAC). sca_l2probe captures the pcap.
Also fixes the de-risk runner's subshell-wait bug (launch guests as real children).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds the dlm-harness-h1 job (two real-executive QEMU nodes exchange 0x6007
HELLOs over a socket mcast netdev; passes /dev/kvm through when the runner has
it, TCG fallback otherwise) and extends the dlm_harness path filter to the H1
harness + sca_l2probe + the SYSGEN generator. Uploads the pcap + node logs as
a build artifact.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@baron-3dl
baron-3dl merged commit e62127e into main Aug 28, 2026
103 checks passed
baron-3dl added a commit that referenced this pull request Aug 28, 2026
…ce parity, SHOW USERS de-fab (#858)

Bumps OVMX_PRODUCT_VERSION and os-release V0.5-7 -> V0.5-8. 14 commits since V0.5-7.

Distributed Lock Manager — the cross-node ladder tops out at a real GRANT:
  - #849 vms-e8f1/vms-17c  DLM rung-2 (H4): the first REAL cross-node $ENQ GRANT
                           — node B holds a lock on A's behalf for A's CSID,
                           $ENQ returns SS$_NORMAL over live SCS (no longer
                           INV-6 "grants nothing"). The distributed lock
                           manager now actually locks across nodes.
  - #845 vms-209          DLM harness H3 — a cross-node $ENQ reaches node B's
                           real executive
  - #843 vms-4bd0         DLM harness H2 — two real-executive QEMU nodes
                           complete the full VMS$VAXcluster join
  - #842 vms-534          DLM harness H1 — two real-executive nodes exchange
                           the 0x6007 HELLO over a socket netdev
  - #840 vms-4b6          DLM harness rung H0 — SCSD.EXE composes with a real
                           executive
  - #841 docs             Alpha cross-node DLM wire oracle — observed SCS
                           transport + documented GRANT semantics (Rule 8)

Alpha co-release parity — authenticated login + the shared SHOW battery:
  - #852 vms-f2c          Alpha DCL/SHOW acceptance parity — the same shared
                           11-command battery x86_64 runs, now on
                           qemu-system-alpha
  - #847                  vms.ko guards BG fork-inherit tracepoints behind
                           CONFIG_TRACEPOINTS (Alpha P0 modpost fix)

Authenticity (INV-6 de-fabrication):
  - #839 vms-6a1          SHOW USERS fails honestly when the executive is
                           absent — no more per-process fabricated user list

Boot console fidelity:
  - #850 vms-dec          kill boot-console newline spam (the operator's echoed
                           RETURNs) + a type-during-boot regression gate

Networking (layered-product promotion):
  - #851 vms-67f          TCP/IP Services promoted to a first-class layered
                           product — build plan + roadmap (1.0 blocker)

Docs / ledger:
  - #745                  Alpha C-RTL archive DECIDED — Option A (operator
                           ruling 2026-08-23)
  - #709 vms-da0          OpenVMS GCC port × OVMX faithful-surface gap analysis
  - #838                  reconcile the release block for the V0.5-7 tag
                           (INV-LEDGER)

QA'd under KVM boot-to-login on the workshop host with the full SHOW
acceptance battery VMS-faithful; boot console clean (no newline flood) and
SHOW USERS honest. Release notes are generated at tag time by
tools/gen_release_notes.py (INV-LEDGER single-ledger); the roadmap narrative
block + public site are the conductor's reconcile (INV-0/INV-LEDGER).

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