Skip to content

hummingbird: run hummbwtester demo inside SCIERA - #79

Merged
juagargi merged 28 commits into
hummingbird-endhostfrom
hummingbird-sciera
Oct 21, 2026
Merged

juagargi merged 28 commits into
hummingbird-endhostfrom
hummingbird-sciera

Conversation

@juagargi

@juagargi juagargi commented Sep 18, 2026 •

Copy link
Copy Markdown
Owner

Runs the hummbwtester Hummingbird vs. best-effort experiment on real SCIERA hosts over SSH,
alongside the existing Docker mode,
and fixes the Hummingbird bugs these new topologies exposed (over RNP, UFES, and UFMS).

The experiment JSON setup file configures the whole of the experiment.
We provide two examples, one for the local docker setup, another one for SCIERA.

hummbwtester

  • One CLI and config for both modes: experiment.py {setup,run,teardown} --config FILE
    (deployment.kind: docker | ssh), plus a read-only setup --dry-run.
  • SSH setup: deploys the tester binary, a marketplace service (assets limited to
    hummingbird.marketplace.interfaces), the client JWT, per-flow PRIO/flower/TBF qdiscs, the static
    info Note entry, Prometheus on a host (fed through SSH relays), and a local Grafana. It never
    restarts SCION services; it prints manual steps instead.
  • SSH run: reports tester exits, stops on Ctrl-C, server exit, or all clients done, cleans up,
    and kills stray testers.
  • Client: -sequence path filter (same syntax as scion showpaths --sequence); retries with a
    refresh when no path matches.
  • Dashboard groups border-router series by (as, br). SCIERA config: hummbwtester-sciera.json.

Hummingbird fixes/changes

  • Router: a path that starts or ends inside a segment (non-core source or destination on the same
    segment) keeps the untraversed interface in its hop field. The flyover now uses 0 on that side.
    Unit and braccept cases added.
  • Router: less logging, plus a metric for Hummingbird MAC failures.
  • pkg/snet/path: reservation setup applies the same rule (dataplaneToBaseHops,
    SetHopAndFlyover).

Other

  • Underlay: fix panic when ReadBatch returns -1.
  • marketplace/tools/get_jwt.py (used by setup); small end2end cleanup.

Testing / braccept

Python unit tests, go test, and bazel test on the affected packages; router acceptance
(braccept) passes.
Setup deployed and verified on SCIERA;
a full Hummingbird test run passes as well.

Co-authored-by: Claude Opus 5.5 noreply@anthropic.com


This change is Reviewable

@juagargi
juagargi marked this pull request as ready for review October 21, 2026 10:30
Add explicit SSH inventory, deployment, session lifecycle, and metric tunnels.
Support dedicated-link TBF shaping with safe cleanup.
Fetch marketplace JWTs through the configured URL without exposing secrets.
We can't use veth with an IPv6 link local interface.
Instead use a selective qdisc and TBF.
Use one experiment definition json file.
Three actions: setup, run, and teardown.
Under error conditions, ReadBatch returns
whatever recvmmsg returned, which happens to be -1.
When in ssh mode, allow the marketplace to be declared
on any ssh host. If so, the token is extracted from there,
using an ssh tunnel.
The teardown step does NOT remove it.
Also, in ssh mode the "host" parameter is required.
Simplify/unify ssh setup.
Rewrite ssh setup section in README.
If the marketplace binary is different,
copy a new one.
Copy a systemd unit file as well.
Restart the service if marketplace is not reachable,
or newly copied.
If service is to be restarted, repopulate DB with the
save values that the docker mode uses.

Teardown stops the service, does not remove DB or binary.
Grafana connects to Prometheus using an ssh relay too.
Allow just plain text when setting with tc.
Reduce the verbosity of the setup step in ssh mode.
It aggregates now using {AS,BR-name}.
The experiment JSON file now accepts hummingbird.marketplace.interfaces with
a AS-based dictionary of interfaces that are declared to be hummingbird assets
to be sold.
If not present in the JSON file, all interfaces are considered Hummingbird.
Also report if any leftover process is found on both
setup and run steps.
Use the same --sequence flag that scion showpaths uses.
Fix cases where the source and destination ASes
are part of the same segment.
Because the PCB didn't contain 0 as ingress of the
src AS, or 0 as the egress of the dst AS,
and the flyover was acquired with 0 as ingress of the src,
and 0 as egress of the dst,
modify the ingress/egress interface used to validate
the flyover MAC.
Regardless of the contents of the dataplane hop fields,
the first and last flyovers must always contain ingress
(and respectively egress) set to zero.
The fix is necessary to allow assigning reservations to
e.g. a down-segment where src and dst are part of the
segment, but non core (segment cut).
When after e.g. docker network prune, it is
necessary to recreate the container.
@juagargi
juagargi merged commit d1e717e into hummingbird-endhost Oct 21, 2026
2 of 3 checks passed
@juagargi
juagargi deleted the hummingbird-sciera branch October 21, 2026 13:43
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