Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
e6da5e3
fix(nat): join spawned threads in concurrent allocations test
daniel-noland May 9, 2026
c618b82
refactor(nat): share concurrent_allocations; add PCT shuttle test
daniel-noland May 9, 2026
5bf847c
fix(net): broadcast triggers InvalidSourceAddr just like multicast
daniel-noland May 9, 2026
d384c9a
feat(net): derive rkyv on PciEbdf and PciEbdfError
daniel-noland May 9, 2026
a6d17ba
fix(net): align PciEbdf bolero generator with the parser
daniel-noland May 9, 2026
b60358c
refactor(args,config,k8s-intf): use net::pci::PciEbdf
daniel-noland May 9, 2026
63167c1
chore: gate shuttle and loom deps for cfg(not(miri))
daniel-noland May 9, 2026
a78c455
feat(quiescent): add _strict_provenance feature using the Mutex impl
daniel-noland May 9, 2026
ac0d615
test: ignore os-bound tests under miri
daniel-noland May 9, 2026
a43dd38
test: scale down iteration counts under miri
daniel-noland May 9, 2026
8f435d1
build(nix): add nightly toolchain toggle with miri component
daniel-noland May 9, 2026
55a15e7
build(just): add miri.just runner and miri exclusion metadata
daniel-noland May 9, 2026
0e17cf3
ci: add miri job (powerpc64)
daniel-noland May 9, 2026
2de7b4b
test(nat): assert port-forward expiry against a pre-call snapshot
daniel-noland May 9, 2026
28a8b31
fix(pci): reject device/function values exceeding wire limits
daniel-noland May 9, 2026
0969973
build(just): scale miri parallelism with seed count
daniel-noland May 9, 2026
425d52a
test(flow-entry): pin flow_table_timeout to tokio's virtual clock
daniel-noland May 9, 2026
0e58c43
fix(net): invalid requirement in test_port_util_methods
daniel-noland May 9, 2026
8665e15
fix(net): invalid requirement in test_ip_util_methods
daniel-noland May 9, 2026
50fa8c7
test(flow-entry): pin nf_lookup related-flows test to virtual clock
daniel-noland May 9, 2026
8cd782f
ci: run miri early
daniel-noland May 9, 2026
46bd393
docs(testing): document just miri::test recipe and policy
daniel-noland May 9, 2026
732ca87
ci: promote miri failures to blockers
daniel-noland May 9, 2026
1f8b8ed
fix(nix): pass cross pkgs to crane so derivations use the cross stdenv
daniel-noland May 10, 2026
6d60c38
fix(nix): compare buildPlatform when computing is-cross-compile
daniel-noland May 10, 2026
376b4b3
fix(nix): use pkgsBuildBuild for dev-shell tooling under cross pkgs
daniel-noland May 10, 2026
8598480
fix(nix): pass wrapped cross-clang to libcap CC under cross stdenv
daniel-noland May 10, 2026
efc38df
fix(nix): pin libcap BUILD_CC to a build-host clang for cross-arch
daniel-noland May 10, 2026
2fb9d92
fix(nix): patch in <string.h> for dplane-rpc cpmock.c (musl)
daniel-noland May 10, 2026
8f6de17
fix(nix): rewrite __in6_u to POSIX s6_addr in dplane-plugin (musl)
daniel-noland May 10, 2026
16b34f9
refactor(workspace): split metadata.package per-package, add wasm flag
daniel-noland May 10, 2026
6ee45fc
feat(nix): filter package-list by metadata.package.wasm for wasm builds
daniel-noland May 10, 2026
955c88b
ci: add must-build matrix and a build-each just recipe
daniel-noland May 10, 2026
baa2a16
fix(nix): gate libgcc on glibc but keep libc bundled for busybox
daniel-noland May 10, 2026
efc495d
fix(nix): use glibc.libgcc path in debug-tools container contents
daniel-noland May 10, 2026
59aae45
fix(nix): thread libc to FRR overlay and pick libatomic path by libc
daniel-noland May 10, 2026
5d2426a
fix(nix): drop libgccjit buildInput on musl FRR and fix autoconf syntax
daniel-noland May 10, 2026
5068d83
chore(nix): drop unused protobufc dep from dplane-plugin
daniel-noland May 10, 2026
5c3fc9b
fix(nix): pin dev-shell cargo target to the sysroot triple
daniel-noland May 10, 2026
f8f119d
fix(nix): enable system-llvm-libunwind for non-glibc Rust targets
daniel-noland May 10, 2026
6f4a739
feat(nix): add aarch64 generic platform
daniel-noland May 11, 2026
3e59892
feat(nix): add workspace check derivation and just recipes
daniel-noland May 11, 2026
1bd1444
feat(wasm): add wasmtime to dev-shell and a cargo wasm32 runner
daniel-noland May 11, 2026
d0e6eee
ci: split must-build into wasm and cross
daniel-noland May 11, 2026
ce09e80
chore: clean up Cargo.toml features
daniel-noland May 11, 2026
e728a99
fix(just): set --platform when importing cross-built dataplane.tar
daniel-noland May 11, 2026
13ee3e4
fix(nix): use build-host nukeReferences in FRR overlay for cross builds
daniel-noland May 11, 2026
ed6fcdb
ci: require miri and wasm for cross
daniel-noland May 11, 2026
5636f2b
chore(nix): rename wasm32-wasip1 libc tag from "unknown" to "none"
daniel-noland May 11, 2026
06bea51
fix(nix): force +crt-static on musl frr-agent to bake in libgcc_eh
daniel-noland May 11, 2026
bd030ac
Maybe fix asan?
daniel-noland May 12, 2026
c1f6ac0
maybe
daniel-noland May 12, 2026
46ede98
boop
daniel-noland May 12, 2026
44360aa
maybe
daniel-noland May 12, 2026
968867f
temp
daniel-noland May 12, 2026
a39cc2b
boop
daniel-noland May 12, 2026
2fe5ad7
Revert "boop"
daniel-noland May 12, 2026
b0a0ef9
boop again
daniel-noland May 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,11 @@ CARGO_LLVM_COV_BUILD_DIR = { value = "target/llvm-cov/target", relative = true,
[build]
rustflags = ["--cfg=tokio_unstable"]

[target.wasm32-wasip1]
# Trailing `--` separates wasmtime's CLI from the module + module args
# that cargo appends, so e.g. `--nocapture` from libtest reaches the
# wasm module instead of being parsed as a wasmtime option.
runner = "wasmtime run --dir . --"

[alias]
nt = "nextest"
3 changes: 3 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -143,3 +143,6 @@ test-group = 'vm'

[test-groups]
vm = { max-threads = 1 }

[profile.miri]
slow-timeout = { period = "500s" }
204 changes: 195 additions & 9 deletions .github/workflows/dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ jobs:
instrument=${{ matrix.build.instrument }}
features=${{ matrix.features }}
oci_repo=ghcr.io
jobs=${{ matrix.build.jobs || 8 }}
strategy:
fail-fast: false
matrix:
Expand Down Expand Up @@ -271,7 +272,7 @@ jobs:
runs-on: "lab"
needs:
- check_changes
- check
# - check
permissions: *check-perms
env: *check-env
strategy:
Expand All @@ -280,9 +281,10 @@ jobs:
matrix:
build:
- name: "address"
profile: "debug"
profile: "fuzz"
sanitize: "address"
instrument: "none"
jobs: 1
- name: "thread"
profile: "fuzz"
sanitize: "thread"
Expand Down Expand Up @@ -325,6 +327,180 @@ jobs:
recipe: "test-each"
- *tmate

miri:
if: >-
${{
needs.check_changes.outputs.devfiles == 'true'
|| startsWith(github.event.ref, 'refs/tags/v')
|| github.event_name == 'workflow_dispatch'
}}
name: "check/miri/${{ matrix.cpu }}"
runs-on: "lab"
needs:
- check_changes
permissions:
checks: "write"
pull-requests: "read"
contents: "read"
packages: "read"
id-token: "write"
env:
USER: "runner"
strategy:
fail-fast: false
max-parallel: 1
matrix:
include:
- cpu: "powerpc64" # ideal for testing concurrency due to very weak memory model (and is big endian)
# Disabled to save time in CI. Enable if you are debugging memory issues and wish to bisect
# why something might pass on one CPU model but fail on another.
# Otherwise there is little benefit to enabling these CPUs in spite of their objectively more important
# support story. They just don't really stress test endianness or memory model issues, and they don't
# meaningfully improve borrow check violation detection either.
# - cpu: "aarch64"
# - cpu: "x86_64"
# - cpu: "s390x" # this is miri's big endian CPU of choice, but it has a stronger memory model than powerpc64
steps:
- *checkout
- *nix-setup
- name: "all packages"
uses: *just
env:
JUST_VARS: >-
miri::cpu=${{ matrix.cpu }}
with:
recipe: "miri::test"
# quiescent is especially sensitive to concurrency violations and memory model issues so we run it
# again with and without strict provenance enabled and on many different random schedules
# The permissive provenance build runs with real arc-swap and could therefore catch issues which the strict can't.
# We run under extra schedules to make that effect stand out as much as possible (shuttle/loom can't test with the
# arc-swap in place either, so this is the closest we can get to fixing that coverage gap)
- name: "quiescent/permissive"
uses: *just
env:
JUST_VARS: >-
miri::seeds=8
miri::cpu=${{ matrix.cpu }}
miri::provenance=permissive
with:
recipe: "miri::test"
recipe_args: "--package=dataplane-quiescent"
- name: "quiescent/strict"
uses: *just
env:
JUST_VARS: >-
miri::cpu=${{ matrix.cpu }}
miri::provenance=strict
with:
recipe: "miri::test"
recipe_args: "--package=dataplane-quiescent --features=_strict_provenance"
- *tmate

wasm:
if: >-
${{
needs.check_changes.outputs.devfiles == 'true'
|| startsWith(github.event.ref, 'refs/tags/v')
|| github.event_name == 'workflow_dispatch'
}}
name: "${{ matrix.platform }}/${{ matrix.libc }}/${{ matrix.profile }}"
runs-on: "lab"
needs:
- check_changes
permissions:
checks: "write"
pull-requests: "read"
contents: "read"
packages: "read"
id-token: "write"
env:
USER: "runner"
strategy:
fail-fast: false
max-parallel: 1
matrix:
include:
- platform: "wasm32-wasip1"
profile: "release"
libc: "none"
recipe:
name: "check"
args: ""
steps:
- *checkout
- *nix-setup
- name: "${{ matrix.platform }}/${{ matrix.libc }}/${{ matrix.profile }}"
uses: *just
env:
JUST_VARS: >-
platform=${{ matrix.platform }}
profile=${{ matrix.profile }}
libc=${{ matrix.libc }}
with:
recipe: "${{ matrix.recipe.name }}"
recipe_args: "${{ matrix.recipe.args }}"
- *tmate

cross:
if: >-
${{
github.event_name == 'pull_request'
&& (
contains(github.event.pull_request.labels.*.name, 'ci:+cross')
)
|| (github.event_name == 'push' || github.event_name == 'merge_group')
}}
name: "${{ matrix.recipe.name }}/${{ matrix.recipe.args }}/${{ matrix.platform }}/${{ matrix.libc }}"
runs-on: "lab"
# Cross is advisory: leg failures show red on the job badge but the
# workflow run as a whole still passes. `needs.cross.result` reports
# `success` to dependents regardless of outcome, so don't gate on it.
continue-on-error: true
needs:
- check_changes
- check
- miri
- wasm
permissions:
checks: "write"
pull-requests: "read"
contents: "read"
packages: "read"
id-token: "write"
env:
USER: "runner"
strategy:
fail-fast: false
max-parallel: 1
matrix:
platform:
- "aarch64"
- "bluefield3"
libc:
- "gnu"
- "musl"
profile:
- "debug"
recipe:
- name: "build-container"
args: "dataplane"
- name: "build-container"
args: "frr.dataplane"
steps:
- *checkout
- *nix-setup
- name: "${{ matrix.platform }}/${{ matrix.libc }}/${{ matrix.profile }}/${{ matrix.recipe.args }}"
uses: *just
env:
JUST_VARS: >-
platform=${{ matrix.platform }}
profile=${{ matrix.profile }}
libc=${{ matrix.libc }}
with:
recipe: "${{ matrix.recipe.name }}"
recipe_args: "${{ matrix.recipe.args }}"
- *tmate

features:
if: >-
${{
Expand All @@ -343,21 +519,18 @@ jobs:
fail-fast: false
max-parallel: 1
matrix:
build:
- *release-build
features:
- "shuttle"
- "loom"
include:
# The `loom` feature flips `concurrency::sync` to loom's
# primitives workspace-wide, which breaks crates that rely on
# `Weak`, `Arc::downgrade`, etc. (those aren't in
# `loom::sync`). Scope the loom build to only the quiescent
# package so workspace feature unification doesn't poison
# unrelated crates.
- features: "loom"
- build: *release-build
features: "loom"
test_package: "quiescent"
- features: "shuttle"
- build: *release-build
features: "shuttle"
test_package: ""
steps:
- *checkout
Expand Down Expand Up @@ -463,6 +636,9 @@ jobs:
- build
- vlab
- test_each
- miri
- wasm
- cross
# Run always so this job can aggregate results even when one of its
# dependencies failed or was skipped.
#
Expand Down Expand Up @@ -491,11 +667,21 @@ jobs:
run: |
echo '::error:: Some sanitize job(s) failed'
exit 1
- name: "Flag any miri matrix failures"
if: ${{ needs.miri.result != 'success' && needs.miri.result != 'skipped' }}
run: |
echo '::error:: Some miri job(s) failed'
exit 1
- name: "Flag any build matrix failures"
if: ${{ needs.build.result != 'success' && needs.build.result != 'skipped' }}
run: |
echo '::error:: Some build job(s) failed'
exit 1
- name: "Flag any wasm failures"
if: ${{ needs.wasm.result != 'success' && needs.wasm.result != 'skipped' }}
run: |
echo '::error:: Some wasm job(s) failed'
exit 1
- name: "Flag any vlab matrix failures"
if: ${{ needs.vlab.result != 'success' && needs.vlab.result != 'skipped' }}
run: |
Expand Down
3 changes: 0 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading