All additive and backward-compatible with v1.0 — existing configs and consumers are unaffected by default. Six milestones (M14–M19), most inspired by reviewing nullsana and comm/net/sanamon, the prior art discovered after v1.0 shipped. Full details in the Changelog.
New config keys
replaycap=N(M14) — per-unit override of themode=replayrecord ceiling (1–256, default still 4), for captures bigger than 4 records on machines with the memory to spare.wire=ethernet|slip|cslip|ppp(M15) — a unit can now pretend to be a point-to-point serial wire: 4-byte IP-style addressing, per-wire MTU/BPS defaults, no broadcast/multicast/raw. Exercise a stack's SLIP/PPP code paths with zero hardware.bps=N(M15) — the link speedS2_DEVICEQUERYreports (previously hardcoded 10000000). Reported only, never a throttle.mintu=N(M15) — minimum write size; shorter writes failS2ERR_BAD_ARGUMENT. Catches stacks that forget minimum-frame padding.addr=02:11:22:33:44:55(M16) — pin a unit's factory station address from config, for reproducible fixtures and mimicking a specific real topology.errors=N(M16) — 1-in-N writes fail visibly (S2ERR_TX_FAILURE+S2EVENT_TX|S2EVENT_ERROR) — the loud counterpart to the silent-loss knobs, for exercising a stack's error-handling/retry paths.loss=N(M16) — 1-in-N silent packet loss, for rates finer thandroppct's 1% floor (loss=1000≈ 0.1%).delay=N/deviation=N(M17) — simulated link latency with optional symmetric jitter, in VBlank ticks; runs last in the fault-injection pipeline.CMD_FLUSH/S2_OFFLINE/last-close still deliver anything waiting immediately.
Core delivery semantics (M18)
- Multi-open fan-out: open a unit more than once (a stack plus a passive monitor, the sanamon-style pattern) and every open with a matching typed
CMD_READnow gets its own independent copy of each packet, not just whichever opened first. - Real
S2_PacketFilterdispatch: previously accepted but never invoked; now genuinely called per candidate before the copy hook, so a caller can reject packets without paying for the copy. SANA2OPF_MINE(exclusive access) is now enforced.
Companion tools become general-purpose SANA-II utilities (M19)
DEVICE=on all four tools (SanaInfo/SanaDump/SanaSend/SanaConform) — point them at any real SANA-II driver, not justloopback.device.SanaConformis arguably most useful probing an unknown real driver.CONFIG(opt-in) — issueS2_CONFIGINTERFACEwith the driver's own factory address, for drivers with no stack running to configure them.ONLINEdefault flipped onSanaDump/SanaSend/SanaConform— forcing a unit online is now opt-in, the safer default once a tool can target a live driver a stack is managing.SanaConformnow probesS2_PacketFilterdispatch — whether a driver actually invokes a negotiated filter hook, not just accepts the tag.SanaDump DUMP/LEN— live sanamon-style console packet view (type, length, flags, addresses, hex) alongside the existing.pcapoutput.
Other changes
- Docs now credit nullsana and vlink as prior art (retracting v1.0's "no null/dummy SANA-II device has ever existed" claim) — sana2loop still differentiates on being open source, KS1.3-capable, and on pcap replay/record, fault injection, and conformance tooling.
- On-target testing upgraded to Copperline 0.14.0; CI converted to the shared
sidick/amiga-workflowstoolchain. - Every milestone validated on-target against bundled AROS and real Kickstart 1.3 and 3.1 ROMs before merge.
What's Changed
- chore: Configure Renovate by @renovate[bot] in #21
- chore(deps): update actions/download-artifact action to v8 by @renovate[bot] in #22
New Contributors
Full Changelog: v1.0...v1.1