Skip to content

[epic][packaging] Satellite build environment — substrate in an image, not a second build #233

Description

@danieljoppi

Sub-epic of #192. How satellite work gets a build environment, decided in ADR-0015.

The decision this implements

Split the image, not the build. A satellite substrate (ns3-leo, Hypatia, Silva's ns3-satellite) is a third-party ns-3 module that must be present in the ns-3 tree — an image concern. But nothing in the AntHocNet module is satellite-specific: core/ is one algorithm, the ns-3 adapter is one Ipv4RoutingProtocol, the #203 multi-interface fix made the data path correct for any topology rather than adding a satellite mode, and isl-grid (#214) is an example rather than a build variant. The only real difference between the regimes is which ns-3 modules are enabled, which is one existing configure line naming both sets.

So: one binary, one configure line, scenario differences in examples and flags. Two builds would drift, and a satellite result would stop being comparable to a MANET one — quietly, with both builds still working. See the ADR for the full argument and the rejected alternatives.

Why this is not blocked on #193 — it unblocks it

Publishing a satellite base image now would bake in a substrate choice #193 has not made. But inverted, this is the missing piece: the decisive question in #197/#198/#200can a third-party Ipv4RoutingProtocol be installed on this substrate's nodes, or is its forwarding hard-wired?can only be answered by a build, and no container runtime is available in the agent environment. A parameterised, unpublished image target is that build.

Hence two phases, in order.

Children

Phase Ticket What
1 (child below) Parameterised sat target in docker/Dockerfile.ns3 + a manually-dispatched workflow that builds ns-3 + a candidate substrate and attempts to install AntHocNet on it. Unpublished. This is the spike harness for #197/#198/#200
2 (child below) Promote the winner to a published ns3-sat / anthocnet-ns3-sat GHCR image following the existing three-tier tag pattern, once #193 concludes

Constraints

  • Satellite CI runs on one ns-3 version, in the manner of the existing validation-anchor and determinism gates (3.42 only) — not the full 3.363.48 matrix. The matrix is already the long pole (the 3.36 leg alone is ~8 min) and the substrates support narrower ranges anyway.
  • No substrate is vendored into this repository. The repo deliberately does not vendor a simulator (AGENTS.md), and a substrate is part of the simulator installation — vendoring would also drag a third party's licence and release cadence into ours.
  • The default images do not change. Adding a substrate to them would either constrain the matrix to the substrate's narrower ns-3 support or break the legs outside it, and would make every MANET build pay for a module it never loads.
  • Any behavioural claim from a satellite image still goes through the benchmark-results skill for the noise verdict; an image is a build environment, not a result.

Done when

A satellite substrate can be built and exercised reproducibly from a documented command, docker/README.md describes the resulting image dimension, and the substrate spikes have the environment they need to return a verdict. Phase 2 additionally requires #193 to have chosen.

Related

#192 (parent track), #193 (substrate selection — phase 2 waits on it, phase 1 serves it), #197 / #198 / #200 (the spikes phase 1 unblocks), #195 (own module — a different branch of the track, and the ADR further weakens it), #214 (isl-grid — satellite-shaped scenario needing no special build), ADR-0015, ADR-0002 (the invariant this protects), docker/README.md, .github/workflows/images.yml.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions