01KFJF2A44639VT9M32SKC9DF9: test

BasicConfig {
    output_rules: [],
    rust_toolchain: Some(
        Bool(
            true,
        ),
    ),
    target: Some(
        "helios-2.0",
    ),
    access_repos: [
        "oxidecomputer/p4",
    ],
    publish: [],
    skip_clone: false,
}

Buildomat Job: 01KFJF2SM9QAYBZCKMWF768F9P

Tags:

Output:

SEQ GLOBAL TIME DETAILS
12026-01-22T09:03:31.272Zjob assigned to worker 01KFJF2STVTCSW6C482D5EMDE4 [factory gimlet-EVT22200007-propolis, EVT22200007/55350] (queued for 26 s)
 
22026-01-22T09:03:40.041Zstarting task 0: "setup"
32026-01-22T09:03:40.066Z++ uname -s
42026-01-22T09:03:40.066Z+ kern=SunOS
52026-01-22T09:03:40.066Z+ build_user=build
62026-01-22T09:03:40.066Z+ build_uid=12345
72026-01-22T09:03:40.066Z+ work_dir=/work
82026-01-22T09:03:40.066Z+ input_dir=/input
92026-01-22T09:03:40.066Z+ [[ 0 == 12345 ]]
102026-01-22T09:03:40.066Z+ case "$kern" in
112026-01-22T09:03:40.066Z+ groupadd -g 12345 build
122026-01-22T09:03:40.066Z+ useradd -u 12345 -g build -d /home/build -s /bin/bash -c build -P 'Primary Administrator' build
132026-01-22T09:03:42.072Z+ zfs create -o mountpoint=/work rpool/work
142026-01-22T09:03:42.109Z++ awk '$2 == "/home" { print $3 }' /etc/mnttab
152026-01-22T09:03:42.134Z+ home_fs=zfs
162026-01-22T09:03:42.134Z+ [[ zfs == autofs ]]
172026-01-22T09:03:42.134Z+ mkdir -p /home/build
182026-01-22T09:03:42.134Z+ chown build:build /home/build /work
192026-01-22T09:03:44.118Z+ chmod 0700 /home/build /work
202026-01-22T09:03:44.143Zprocess exited: duration 4081 ms, exit code 0
 
212026-01-22T09:03:44.192Zstarting task 1: "rust-toolchain"
222026-01-22T09:03:44.217Z+ printf ' * rust toolchain channel = "%s"\n' 1.90.0
232026-01-22T09:03:44.217Z+ printf ' * rust toolchain profile = "%s"\n' default
242026-01-22T09:03:44.217Z+ export RUSTUP_INIT_SKIP_PATH_CHECK=true
252026-01-22T09:03:44.217Z * rust toolchain channel = "1.90.0"
262026-01-22T09:03:44.217Z * rust toolchain profile = "default"
272026-01-22T09:03:44.218Z+ RUSTUP_INIT_SKIP_PATH_CHECK=true
282026-01-22T09:03:44.218Z+ curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs
292026-01-22T09:03:44.218Z+ /bin/bash -s - -y --no-modify-path --default-toolchain 1.90.0 --profile default
302026-01-22T09:03:44.339Zinfo: downloading installer
312026-01-22T09:03:45.128Zwarn: It looks like you have an existing installation of Rust at:
322026-01-22T09:03:45.128Zwarn: /opt/ooce/bin
332026-01-22T09:03:45.129Zwarn: It is recommended that rustup be the primary Rust installation.
342026-01-22T09:03:45.129Zwarn: Otherwise you may have confusion unless you are careful with your PATH.
352026-01-22T09:03:45.129Zwarn: If you are sure that you want both rustup and your already installed Rust
362026-01-22T09:03:45.129Zwarn: then please reply `y' or `yes' or set RUSTUP_INIT_SKIP_PATH_CHECK to yes
372026-01-22T09:03:45.129Zwarn: or pass `-y' to ignore all ignorable checks.
382026-01-22T09:03:45.129Zerror: cannot install while Rust is installed
392026-01-22T09:03:45.129Zwarn: continuing (because the -y flag is set and the error is ignorable)
402026-01-22T09:03:45.154Zinfo: profile set to 'default'
412026-01-22T09:03:45.154Zinfo: default host triple is x86_64-unknown-illumos
422026-01-22T09:03:45.154Zinfo: syncing channel updates for '1.90.0-x86_64-unknown-illumos'
432026-01-22T09:03:45.278Zinfo: latest update on 2025-09-18, rust version 1.90.0 (1159e78c4 2025-09-14)
442026-01-22T09:03:45.278Zinfo: downloading component 'cargo'
452026-01-22T09:03:45.518Zinfo: downloading component 'clippy'
462026-01-22T09:03:45.601Zinfo: downloading component 'rust-docs'
472026-01-22T09:03:46.108Zinfo: downloading component 'rust-std'
482026-01-22T09:03:46.389Zinfo: downloading component 'rustc'
492026-01-22T09:03:47.995Zinfo: downloading component 'rustfmt'
502026-01-22T09:03:48.070Zinfo: installing component 'cargo'
512026-01-22T09:03:49.340Zinfo: installing component 'clippy'
522026-01-22T09:03:49.839Zinfo: installing component 'rust-docs'
532026-01-22T09:03:53.101Zinfo: installing component 'rust-std'
542026-01-22T09:03:55.360Zinfo: installing component 'rustc'
552026-01-22T09:04:04.167Zinfo: installing component 'rustfmt'
562026-01-22T09:04:04.576Zinfo: default toolchain set to '1.90.0-x86_64-unknown-illumos'
572026-01-22T09:04:04.576Z
582026-01-22T09:04:04.753Z 1.90.0-x86_64-unknown-illumos installed - rustc 1.90.0 (1159e78c4 2025-09-14)
592026-01-22T09:04:04.753Z
602026-01-22T09:04:04.753Z
612026-01-22T09:04:04.753ZRust is installed now. Great!
622026-01-22T09:04:04.754Z
632026-01-22T09:04:04.754ZTo get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH
642026-01-22T09:04:04.754Zenvironment variable. This has not been done automatically.
652026-01-22T09:04:04.754Z
662026-01-22T09:04:04.754ZTo configure your current shell, you need to source
672026-01-22T09:04:04.754Zthe corresponding env file under $HOME/.cargo.
682026-01-22T09:04:04.754Z
692026-01-22T09:04:04.754ZThis is usually done by running one of the following (note the leading DOT):
702026-01-22T09:04:04.754Z. "$HOME/.cargo/env" # For sh/bash/zsh/ash/dash/pdksh
712026-01-22T09:04:04.754Zsource "$HOME/.cargo/env.fish" # For fish
722026-01-22T09:04:04.754Zsource $"($nu.home-path)/.cargo/env.nu" # For nushell
732026-01-22T09:04:04.869Z+ rustup --version
742026-01-22T09:04:04.895Zrustup 1.28.2 (e4f3ad6f8 2025-04-28)
752026-01-22T09:04:04.895Zinfo: This is the version for the rustup toolchain manager, not the rustc compiler.
762026-01-22T09:04:05.025Zinfo: The currently active `rustc` version is `rustc 1.90.0 (1159e78c4 2025-09-14)`
772026-01-22T09:04:05.074Z+ cargo --version
782026-01-22T09:04:05.164Zcargo 1.90.0 (840b83a10 2025-07-30)
792026-01-22T09:04:05.188Z+ rustc --version
802026-01-22T09:04:05.305Zrustc 1.90.0 (1159e78c4 2025-09-14)
812026-01-22T09:04:05.329Zprocess exited: duration 21118 ms, exit code 0
 
822026-01-22T09:04:05.378Zstarting task 2: "authentication"
832026-01-22T09:04:05.440Zprocess exited: duration 62 ms, exit code 0
 
842026-01-22T09:04:05.493Zstarting task 3: "clone repository"
852026-01-22T09:04:05.518Z+ mkdir -p /work/oxidecomputer/dendrite
862026-01-22T09:04:05.518Z+ git clone https://github.com/oxidecomputer/dendrite /work/oxidecomputer/dendrite
872026-01-22T09:04:05.542ZCloning into '/work/oxidecomputer/dendrite'...
882026-01-22T09:04:06.641Z+ cd /work/oxidecomputer/dendrite
892026-01-22T09:04:06.641Z+ git fetch origin e86efac6e5f86bb57abf9923452540f891ec09a1
902026-01-22T09:04:06.988ZFrom https://github.com/oxidecomputer/dendrite
912026-01-22T09:04:06.988Z * branch e86efac6e5f86bb57abf9923452540f891ec09a1 -> FETCH_HEAD
922026-01-22T09:04:07.013Z+ [[ -n zl/multicast-prevent-vlan-translation-via-match-key-enforcement ]]
932026-01-22T09:04:07.013Z++ git branch --show-current
942026-01-22T09:04:07.013Z+ current=main
952026-01-22T09:04:07.013Z+ [[ main != zl/multicast-prevent-vlan-translation-via-match-key-enforcement ]]
962026-01-22T09:04:07.013Z+ git branch -f zl/multicast-prevent-vlan-translation-via-match-key-enforcement e86efac6e5f86bb57abf9923452540f891ec09a1
972026-01-22T09:04:07.038Z+ git checkout -f zl/multicast-prevent-vlan-translation-via-match-key-enforcement
982026-01-22T09:04:07.072ZSwitched to branch 'zl/multicast-prevent-vlan-translation-via-match-key-enforcement'
992026-01-22T09:04:07.096Z+ git reset --hard e86efac6e5f86bb57abf9923452540f891ec09a1
1002026-01-22T09:04:07.125ZHEAD is now at e86efac [jj-spr] initial version
1012026-01-22T09:04:07.149Zprocess exited: duration 1637 ms, exit code 0
 
1022026-01-22T09:04:07.199Zstarting task 4: "build"
1032026-01-22T09:04:07.223Z+ source .github/buildomat/common.sh
1042026-01-22T09:04:07.223Z++ TOFINO_STAGES=20
1052026-01-22T09:04:07.223Z++ SDE_COMMIT=e61fe02c3c1c384b2e212c90177fcea76a31fd4e
1062026-01-22T09:04:07.223Z++ SDE_PKG_SHA256=8a87a9b0bed3c5440a173a7a41361bdeb5e7a848882da6b4aa48c8fb0043f3bd
1072026-01-22T09:04:07.223Z++ SDE_DEB_SHA256=a292e2dd5311647c4852bb41f2532dd1fdf30325b6d04cccb7e85b873e521d5f
1082026-01-22T09:04:07.223Z+++ uname -s
1092026-01-22T09:04:07.223Z++ '[' SunOS == SunOS ']'
1102026-01-22T09:04:07.223Z++ SERIES=illumos
1112026-01-22T09:04:07.223Z+++ uname -s
1122026-01-22T09:04:07.223Z++ '[' SunOS == SunOS ']'
1132026-01-22T09:04:07.223Z++ SDE_DIR=https://buildomat.eng.oxide.computer/public/file/oxidecomputer/tofino-sde/illumos/e61fe02c3c1c384b2e212c90177fcea76a31fd4e
1142026-01-22T09:04:07.223Z++ rustup show active-toolchain
1152026-01-22T09:04:07.321Z1.90.0-x86_64-unknown-illumos (overridden by '/work/oxidecomputer/dendrite/rust-toolchain.toml')
1162026-01-22T09:04:07.345Z+ source .github/buildomat/illumos.sh
1172026-01-22T09:04:07.345Z++ banner 'sde setup'
1182026-01-22T09:04:07.345Z
1192026-01-22T09:04:07.345Z #### ##### ###### #### ###### ##### # # #####
1202026-01-22T09:04:07.345Z # # # # # # # # # # #
1212026-01-22T09:04:07.345Z #### # # ##### #### ##### # # # # #
1222026-01-22T09:04:07.345Z # # # # # # # # # #####
1232026-01-22T09:04:07.345Z # # # # # # # # # # # #
1242026-01-22T09:04:07.345Z #### ##### ###### #### ###### # #### #
1252026-01-22T09:04:07.345Z
1262026-01-22T09:04:07.345Z++ export PKG=tofino_sde.p5p
1272026-01-22T09:04:07.345Z++ PKG=tofino_sde.p5p
1282026-01-22T09:04:07.345Z++ curl -OL https://buildomat.eng.oxide.computer/public/file/oxidecomputer/tofino-sde/illumos/e61fe02c3c1c384b2e212c90177fcea76a31fd4e/tofino_sde.p5p
1292026-01-22T09:04:07.345Z % Total % Received % Xferd Average Speed Time Time Time Current
1302026-01-22T09:04:07.345Z Dload Upload Total Spent Left Speed
1312026-01-22T09:04:11.075Z 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 75.0M 0 20284 0 0 81220 0 0:16:08 --:--:-- 0:16:08 81136 26 75.0M 26 20.0M 0 0 16.3M 0 0:00:04 0:00:01 0:00:03 16.3M 56 75.0M 56 42.6M 0 0 18.9M 0 0:00:03 0:00:02 0:00:01 18.9M 84 75.0M 84 63.5M 0 0 19.6M 0 0:00:03 0:00:03 --:--:-- 19.6M 100 75.0M 100 75.0M 0 0 20.1M 0 0:00:03 0:00:03 --:--:-- 20.1M
1322026-01-22T09:04:11.099Z+++ digest -a sha256 tofino_sde.p5p
1332026-01-22T09:04:11.155Z++ SDE_CALC=8a87a9b0bed3c5440a173a7a41361bdeb5e7a848882da6b4aa48c8fb0043f3bd
1342026-01-22T09:04:11.155Z++ '[' 8a87a9b0bed3c5440a173a7a41361bdeb5e7a848882da6b4aa48c8fb0043f3bd '!=' 8a87a9b0bed3c5440a173a7a41361bdeb5e7a848882da6b4aa48c8fb0043f3bd ']'
1352026-01-22T09:04:11.180Z++ pfexec pkg install -g tofino_sde.p5p tofino_sde
1362026-01-22T09:04:32.375Z Startup: Refreshing catalog 'helios-dev' ... Done
1372026-01-22T09:04:46.527Z Startup: Caching catalogs ... Done
1382026-01-22T09:04:46.751Z Startup: Refreshing catalog 'oxide' ... Done
1392026-01-22T09:05:21.318ZPlanning: Solver setup ... Done
1402026-01-22T09:05:21.560ZPlanning: Running solver ... Done
1412026-01-22T09:05:21.720ZPlanning: Finding local manifests ... Done
1422026-01-22T09:05:21.745ZPlanning: Fetching manifests: 1/1 100% complete
1432026-01-22T09:05:21.745ZPlanning: Fetching manifests: 1/1 100% complete
1442026-01-22T09:05:21.769ZPlanning: Package planning ... Done
1452026-01-22T09:05:21.794ZPlanning: Merging actions ... Done
1462026-01-22T09:05:22.020ZPlanning: Checking for conflicting actions ... Done
1472026-01-22T09:05:22.045ZPlanning: Consolidating action changes ... Done
1482026-01-22T09:05:22.844ZPlanning: Evaluating mediators ... Done
1492026-01-22T09:05:22.868ZPlanning: Planning completed in 36.09 seconds
1502026-01-22T09:05:22.869Z Packages to install: 1
1512026-01-22T09:05:22.869Z Create boot environment: No
1522026-01-22T09:05:22.869ZCreate backup boot environment: No
1532026-01-22T09:05:22.937Z
1542026-01-22T09:05:22.937ZDownload: 0/242 items 0.0/74.3MB 0% complete
1552026-01-22T09:05:23.245ZDownload: Completed 74.32 MB in 0.31 seconds (241M/s)
1562026-01-22T09:05:23.395Z Actions: 1/293 actions (Installing new actions)
1572026-01-22T09:05:25.272Z Actions: Completed 293 actions in 1.88 seconds.
1582026-01-22T09:05:25.297Z Done
1592026-01-22T09:05:25.352Z Done
1602026-01-22T09:05:27.008Z Done
1612026-01-22T09:05:32.883Z Done
1622026-01-22T09:05:33.000Z Done
1632026-01-22T09:05:33.024Z Done
1642026-01-22T09:05:33.092Z Done
1652026-01-22T09:05:33.784Z++ export SDE=/opt/oxide/tofino_sde
1662026-01-22T09:05:33.784Z++ SDE=/opt/oxide/tofino_sde
1672026-01-22T09:05:33.784Z++ export LD_LIBRARY_PATH=/opt/oxide/tofino_sde/lib:
1682026-01-22T09:05:33.784Z++ LD_LIBRARY_PATH=/opt/oxide/tofino_sde/lib:
1692026-01-22T09:05:33.785Z++ banner packages
1702026-01-22T09:05:33.809Z
1712026-01-22T09:05:33.809Z ##### ## #### # # ## #### ###### ####
1722026-01-22T09:05:33.809Z # # # # # # # # # # # # # #
1732026-01-22T09:05:33.809Z # # # # # #### # # # ##### ####
1742026-01-22T09:05:33.809Z ##### ###### # # # ###### # ### # #
1752026-01-22T09:05:33.809Z # # # # # # # # # # # # # #
1762026-01-22T09:05:33.809Z # # # #### # # # # #### ###### ####
1772026-01-22T09:05:33.809Z
1782026-01-22T09:05:33.809Z++ pfexec pkg install clang-15 pcap
1792026-01-22T09:05:34.781Z Startup: Refreshing catalog 'helios-dev' ... Done
1802026-01-22T09:05:34.805Z Startup: Refreshing catalog 'oxide' ... Done
1812026-01-22T09:06:03.152ZPlanning: Solver setup ... Done
1822026-01-22T09:06:03.362ZPlanning: Running solver ... Done
1832026-01-22T09:06:03.519ZPlanning: Finding local manifests ... Done
1842026-01-22T09:06:03.544ZPlanning: Fetching manifests: 0/2 0% complete
1852026-01-22T09:06:04.154ZPlanning: Fetching manifests: 2/2 100% complete
1862026-01-22T09:06:04.223ZPlanning: Package planning ... Done
1872026-01-22T09:06:04.290ZPlanning: Merging actions ... Done
1882026-01-22T09:06:04.549ZPlanning: Checking for conflicting actions ... Done
1892026-01-22T09:06:04.573ZPlanning: Consolidating action changes ... Done
1902026-01-22T09:06:04.918ZPlanning: Evaluating mediators ... Done
1912026-01-22T09:06:04.942ZPlanning: Planning completed in 30.15 seconds
1922026-01-22T09:06:04.967Z Packages to install: 2
1932026-01-22T09:06:04.967Z Mediators to change: 2
1942026-01-22T09:06:04.967Z Services to change: 1
1952026-01-22T09:06:04.967Z Create boot environment: No
1962026-01-22T09:06:04.967ZCreate backup boot environment: No
1972026-01-22T09:06:05.005Z
1982026-01-22T09:06:05.005ZDownload: 0/3076 items 0.0/211.3MB 0% complete
1992026-01-22T09:06:10.018ZDownload: 981/3076 items 72.9/211.3MB 34% complete (14.8M/s)
2002026-01-22T09:06:15.026ZDownload: 1176/3076 items 113.9/211.3MB 53% complete (11.6M/s)
2012026-01-22T09:06:20.026ZDownload: 2909/3076 items 125.6/211.3MB 59% complete (5.2M/s)
2022026-01-22T09:06:25.034ZDownload: 3074/3076 items 209.8/211.3MB 99% complete (9.7M/s)
2032026-01-22T09:06:25.645ZDownload: Completed 211.31 MB in 20.64 seconds (10.2M/s)
2042026-01-22T09:06:25.819Z Actions: 1/3418 actions (Installing new actions)
2052026-01-22T09:06:30.826Z Actions: 3179/3418 actions (Installing new actions)
2062026-01-22T09:06:31.416Z Actions: Completed 3418 actions in 5.60 seconds.
2072026-01-22T09:06:32.388Z Done
2082026-01-22T09:06:32.388Z Done
2092026-01-22T09:06:33.695Z Done
2102026-01-22T09:06:39.019Z Done
2112026-01-22T09:06:39.151Z Done
2122026-01-22T09:06:39.175Z Done
2132026-01-22T09:06:39.310Z Done
2142026-01-22T09:06:39.487Z++ pfexec pkg set-mediator -V 15 clang llvm
2152026-01-22T09:06:39.887ZPlanning: Evaluating mediator changes ... Done
2162026-01-22T09:06:40.112ZPlanning: Checking for conflicting actions ... Done
2172026-01-22T09:06:40.135ZPlanning: Consolidating action changes ... Done
2182026-01-22T09:06:40.455ZPlanning: Evaluating mediators ... Done
2192026-01-22T09:06:40.479ZPlanning: Planning completed in 0.57 seconds
2202026-01-22T09:06:40.502Z Mediators to change: 2
2212026-01-22T09:06:40.502Z Create boot environment: No
2222026-01-22T09:06:40.502ZCreate backup boot environment: No
2232026-01-22T09:06:40.553Z Done
2242026-01-22T09:06:40.553Z Done
2252026-01-22T09:06:41.505Z Done
2262026-01-22T09:06:46.274Z Done
2272026-01-22T09:06:46.381Z Done
2282026-01-22T09:06:46.405Z Done
2292026-01-22T09:06:46.440Z Done
2302026-01-22T09:06:46.544Z++ cargo --version
2312026-01-22T09:06:46.625Zcargo 1.90.0 (840b83a10 2025-07-30)
2322026-01-22T09:06:46.649Z++ rustc --version
2332026-01-22T09:06:46.732Zrustc 1.90.0 (1159e78c4 2025-09-14)
2342026-01-22T09:06:46.755Z+ banner copyrights
2352026-01-22T09:06:46.755Z
2362026-01-22T09:06:46.755Z #### #### ##### # # ##### # #### # # ##### ####
2372026-01-22T09:06:46.756Z # # # # # # # # # # # # # # # # #
2382026-01-22T09:06:46.756Z # # # # # # # # # # ###### # ####
2392026-01-22T09:06:46.756Z # # # ##### # ##### # # ### # # # #
2402026-01-22T09:06:46.756Z # # # # # # # # # # # # # # # #
2412026-01-22T09:06:46.756Z #### #### # # # # # #### # # # ####
2422026-01-22T09:06:46.756Z
2432026-01-22T09:06:46.756Z+ ./tools/check_copyrights.sh
2442026-01-22T09:06:46.780Zaal/src/lib.rs: Copyright with wrong year
2452026-01-22T09:06:46.804Zaal/src/match_action.rs: Copyright with wrong year
2462026-01-22T09:06:46.829Zaal_macros/src/lib.rs: Copyright with wrong year
2472026-01-22T09:06:46.862Zasic/src/chaos/mod.rs: Copyright with wrong year
2482026-01-22T09:06:46.886Zasic/src/chaos/table.rs: Copyright with wrong year
2492026-01-22T09:06:46.917Zasic/src/lib.rs: Copyright with wrong year
2502026-01-22T09:06:46.940Zasic/src/softnpu/mgmt.rs: Copyright with wrong year
2512026-01-22T09:06:46.964Zasic/src/softnpu/mod.rs: Copyright with wrong year
2522026-01-22T09:06:46.988Zasic/src/tofino_asic/bf_wrapper.rs: Copyright with wrong year
2532026-01-22T09:06:47.013Zasic/src/tofino_asic/link_fsm.rs: Copyright with wrong year
2542026-01-22T09:06:47.037Zasic/src/tofino_asic/mcast.rs: Copyright with wrong year
2552026-01-22T09:06:47.060Zasic/src/tofino_asic/mod.rs: Copyright with wrong year
2562026-01-22T09:06:47.085Zasic/src/tofino_asic/ports.rs: Copyright with wrong year
2572026-01-22T09:06:47.085Zasic/src/tofino_asic/qsfp.rs: Copyright with wrong year
2582026-01-22T09:06:47.119Zasic/src/tofino_asic/serdes.rs: Copyright with wrong year
2592026-01-22T09:06:47.152Zasic/src/tofino_asic/table.rs: Copyright with wrong year
2602026-01-22T09:06:47.176Zasic/src/tofino_common/mod.rs: Copyright with wrong year
2612026-01-22T09:06:47.222Zasic/src/tofino_stub/mcast.rs: Copyright with wrong year
2622026-01-22T09:06:47.246Zasic/src/tofino_stub/mod.rs: Copyright with wrong year
2632026-01-22T09:06:47.270Zasic/src/tofino_stub/ports.rs: Copyright with wrong year
2642026-01-22T09:06:47.382Zcommon/src/logging.rs: Copyright with wrong year
2652026-01-22T09:06:47.546Zdpd-client/tests/chaos_tests/harness.rs: Copyright with wrong year
2662026-01-22T09:06:47.580Zdpd-client/tests/chaos_tests/port_settings.rs: Copyright with wrong year
2672026-01-22T09:06:47.652Zdpd-client/tests/integration_tests/counters.rs: Copyright with wrong year
2682026-01-22T09:06:47.675Zdpd-client/tests/integration_tests/geneve.rs: Copyright with wrong year
2692026-01-22T09:06:47.699Zdpd-client/tests/integration_tests/icmp_ipv4.rs: Copyright with wrong year
2702026-01-22T09:06:47.722Zdpd-client/tests/integration_tests/loopback.rs: Copyright with wrong year
2712026-01-22T09:06:47.784Zdpd-client/tests/integration_tests/port_api.rs: Copyright with wrong year
2722026-01-22T09:06:47.817Zdpd-client/tests/integration_tests/route_ipv6.rs: Copyright with wrong year
2732026-01-22T09:06:48.048Zdpd-types/src/transceivers.rs: Copyright with wrong year
2742026-01-22T09:06:48.072Zdpd-types/src/views.rs: Copyright with wrong year
2752026-01-22T09:06:48.095Zdpd/build.rs: Copyright with wrong year
2762026-01-22T09:06:48.222Zdpd/p4/port_bitmap_check.p4: Copyright with wrong year
2772026-01-22T09:06:48.298Zdpd/src/arp.rs: Copyright with wrong year
2782026-01-22T09:06:48.397Zdpd/src/freemap.rs: Copyright with wrong year
2792026-01-22T09:06:48.421Zdpd/src/link.rs: Copyright with wrong year
2802026-01-22T09:06:48.444Zdpd/src/loopback.rs: Copyright with wrong year
2812026-01-22T09:06:48.554Zdpd/src/oxstats.rs: Copyright with wrong year
2822026-01-22T09:06:48.593Zdpd/src/port_settings.rs: Copyright with wrong year
2832026-01-22T09:06:48.660Zdpd/src/switch_identifiers.rs: Copyright with wrong year
2842026-01-22T09:06:48.684Zdpd/src/switch_port.rs: Copyright with wrong year
2852026-01-22T09:06:48.908Zdpd/src/table/port_ip.rs: Copyright with wrong year
2862026-01-22T09:06:48.980Zdpd/src/table/route_ipv6.rs: Copyright with wrong year
2872026-01-22T09:06:49.004Zdpd/src/transceivers/mod.rs: Copyright with wrong year
2882026-01-22T09:06:49.034Zdpd/src/transceivers/tofino_impl.rs: Copyright with wrong year
2892026-01-22T09:06:49.164Zpacket/src/icmp.rs: Copyright with wrong year
2902026-01-22T09:06:49.218Zpacket/src/lib.rs: Copyright with wrong year
2912026-01-22T09:06:49.242Zpacket/src/lldp.rs: Copyright with wrong year
2922026-01-22T09:06:49.265Zpacket/src/pbuf.rs: Copyright with wrong year
2932026-01-22T09:06:49.288Zpacket/src/tcp.rs: Copyright with wrong year
2942026-01-22T09:06:49.337Zpcap/src/lib.rs: Copyright with wrong year
2952026-01-22T09:06:49.361Zswadm/src/addr.rs: Copyright with wrong year
2962026-01-22T09:06:49.385Zswadm/src/arp.rs: Copyright with wrong year
2972026-01-22T09:06:49.409Zswadm/src/compliance.rs: Copyright with wrong year
2982026-01-22T09:06:49.501Zswadm/src/switchport.rs: Copyright with wrong year
2992026-01-22T09:06:49.525Zswadm/src/table.rs: Copyright with wrong year
3002026-01-22T09:06:49.549Zswadm/tests/counters.rs: Copyright with wrong year
3012026-01-22T09:06:49.573Zswadm/tests/port-link.rs: Copyright with wrong year
3022026-01-22T09:06:49.597Ztfportd/build.rs: Copyright with wrong year
3032026-01-22T09:06:49.624Ztfportd/src/arp.rs: Copyright with wrong year
3042026-01-22T09:06:49.648Ztfportd/src/config.rs: Copyright with wrong year
3052026-01-22T09:06:49.680Ztfportd/src/main.rs: Copyright with wrong year
3062026-01-22T09:06:49.704Ztfportd/src/ndp.rs: Copyright with wrong year
3072026-01-22T09:06:49.740Ztfportd/src/oxstats.rs: Copyright with wrong year
3082026-01-22T09:06:49.782Ztfportd/src/packet_queue.rs: Copyright with wrong year
3092026-01-22T09:06:49.806Ztfportd/src/ports.rs: Copyright with wrong year
3102026-01-22T09:06:49.835Ztfportd/src/simport.rs: Copyright with wrong year
3112026-01-22T09:06:49.859Ztfportd/src/techport.rs: Copyright with wrong year
3122026-01-22T09:06:49.882Ztfportd/src/tfport.rs: Copyright with wrong year
3132026-01-22T09:06:49.906Ztfportd/src/vlans.rs: Copyright with wrong year
3142026-01-22T09:06:50.067Zuplinkd/src/main.rs: Copyright with wrong year
3152026-01-22T09:06:50.091Zxtask/src/codegen.rs: Copyright with wrong year
3162026-01-22T09:06:50.118Zxtask/src/illumos.rs: Copyright with wrong year
3172026-01-22T09:06:50.149Zxtask/src/main.rs: Copyright with wrong year
3182026-01-22T09:06:50.173Z+ banner clippy
3192026-01-22T09:06:50.173Z
3202026-01-22T09:06:50.173Z #### # # ##### ##### # #
3212026-01-22T09:06:50.173Z # # # # # # # # # #
3222026-01-22T09:06:50.173Z # # # # # # # #
3232026-01-22T09:06:50.173Z # # # ##### ##### #
3242026-01-22T09:06:50.173Z # # # # # # #
3252026-01-22T09:06:50.173Z #### ###### # # # #
3262026-01-22T09:06:50.173Z
3272026-01-22T09:06:50.173Z+ for feat in tofino_stub tofino_asic softnpu chaos
3282026-01-22T09:06:50.173Z+ cargo clippy --features tofino_stub -- --deny warnings
3292026-01-22T09:06:50.560Z Updating git repository `https://github.com/oxidecomputer/omicron`
3302026-01-22T09:07:05.323Z Updating crates.io index
3312026-01-22T09:07:05.346Z Updating git repository `https://github.com/illumos/smf-rs`
3322026-01-22T09:07:05.738Z Updating git repository `https://github.com/oxidecomputer/propolis`
3332026-01-22T09:07:07.127Z Updating git repository `https://github.com/oxidecomputer/softnpu`
3342026-01-22T09:07:07.560Z Updating git repository `https://github.com/oxidecomputer/tofino`
3352026-01-22T09:07:07.930Z Updating git repository `https://github.com/oxidecomputer/transceiver-control`
3362026-01-22T09:07:08.903Z Updating git repository `https://github.com/oxidecomputer/ispf`
3372026-01-22T09:07:09.542Z Updating git repository `https://github.com/oxidecomputer/netadm-sys`
3382026-01-22T09:07:10.067Z Updating git repository `https://github.com/oxidecomputer/lldp`
3392026-01-22T09:07:10.555Z Updating git repository `https://github.com/oxidecomputer/dlpi-sys`
3402026-01-22T09:07:10.926Z Updating git repository `https://github.com/oxidecomputer/p9fs`
3412026-01-22T09:07:11.351Z Updating git repository `https://github.com/oxidecomputer/p4`
3422026-01-22T09:07:11.979Z Updating git repository `https://github.com/oxidecomputer/illumos-devinfo`
3432026-01-22T09:07:12.363Z Updating git repository `https://github.com/oxidecomputer/lldp`
3442026-01-22T09:07:12.839Z Updating git repository `https://github.com/oxidecomputer/maghemite`
3452026-01-22T09:07:13.846Z Updating git repository `https://github.com/oxidecomputer/serde_human_bytes`
3462026-01-22T09:07:14.230Z Updating git repository `https://github.com/oxidecomputer/slog-error-chain`
3472026-01-22T09:07:14.637Z Updating git repository `https://github.com/oxidecomputer/tufaceous`
3482026-01-22T09:07:15.066Z Updating git repository `https://github.com/oxidecomputer/management-gateway-service`
3492026-01-22T09:07:15.758Z Updating git repository `https://github.com/oxidecomputer/dlpi-sys`
3502026-01-22T09:07:16.256Z Updating git repository `https://github.com/jmesmon/rust-libzfs`
3512026-01-22T09:07:16.653Z Updating git repository `https://github.com/oxidecomputer/rusty-doors`
3522026-01-22T09:07:17.044Z Updating git repository `https://github.com/oxidecomputer/dendrite`
3532026-01-22T09:07:18.436Z Updating git repository `https://github.com/oxidecomputer/propolis`
3542026-01-22T09:07:19.219Z Updating git repository `https://github.com/oxidecomputer/crucible`
3552026-01-22T09:07:23.033Z Updating git repository `https://github.com/oxidecomputer/opte`
3562026-01-22T09:07:23.932Z Updating git repository `https://github.com/oxidecomputer/tofino`
3572026-01-22T09:07:24.293Z Updating git repository `https://github.com/oxidecomputer/clickward`
3582026-01-22T09:07:24.772Z Updating git repository `https://github.com/oxidecomputer/netadm-sys`
3592026-01-22T09:07:26.605Z Downloading crates ...
3602026-01-22T09:07:26.695Z Downloaded adler2 v2.0.1
3612026-01-22T09:07:26.720Z Downloaded async-stream v0.3.6
3622026-01-22T09:07:26.720Z Downloaded block-buffer v0.10.4
3632026-01-22T09:07:26.744Z Downloaded dof v0.3.0
3642026-01-22T09:07:26.744Z Downloaded dunce v1.0.5
3652026-01-22T09:07:26.744Z Downloaded foldhash v0.2.0
3662026-01-22T09:07:26.769Z Downloaded ident_case v1.0.1
3672026-01-22T09:07:26.769Z Downloaded is_ci v1.2.0
3682026-01-22T09:07:26.769Z Downloaded memmap v0.7.0
3692026-01-22T09:07:26.795Z Downloaded num-derive v0.4.2
3702026-01-22T09:07:26.795Z Downloaded multer v3.1.0
3712026-01-22T09:07:26.820Z Downloaded powerfmt v0.2.0
3722026-01-22T09:07:26.820Z Downloaded progenitor-client v0.10.0
3732026-01-22T09:07:26.846Z Downloaded rustc_version v0.1.7
3742026-01-22T09:07:26.846Z Downloaded rand_xorshift v0.4.0
3752026-01-22T09:07:26.846Z Downloaded scroll_derive v0.12.1
3762026-01-22T09:07:26.846Z Downloaded serde_urlencoded v0.7.1
3772026-01-22T09:07:26.871Z Downloaded siphasher v1.0.1
3782026-01-22T09:07:26.871Z Downloaded tagptr v0.2.0
3792026-01-22T09:07:26.896Z Downloaded tinyvec_macros v0.1.1
3802026-01-22T09:07:26.896Z Downloaded thiserror-impl v1.0.69
3812026-01-22T09:07:26.897Z Downloaded tower-layer v0.3.3
3822026-01-22T09:07:26.897Z Downloaded topological-sort v0.2.2
3832026-01-22T09:07:26.922Z Downloaded usdt-attr-macro v0.6.0
3842026-01-22T09:07:26.922Z Downloaded usdt-macro v0.5.0
3852026-01-22T09:07:26.922Z Downloaded usdt-attr-macro v0.5.0
3862026-01-22T09:07:26.922Z Downloaded yoke-derive v0.8.0
3872026-01-22T09:07:26.922Z Downloaded toml v0.8.23
3882026-01-22T09:07:26.922Z Downloaded zone v0.3.1
3892026-01-22T09:07:26.922Z Downloaded zone_cfg_derive v0.3.1
3902026-01-22T09:07:26.971Z Downloaded zerofrom v0.1.6
3912026-01-22T09:07:26.971Z Downloaded zeroize_derive v1.4.3
3922026-01-22T09:07:26.971Z Downloaded zerovec-derive v0.11.1
3932026-01-22T09:07:26.972Z Downloaded yoke v0.8.0
3942026-01-22T09:07:26.972Z Downloaded waitgroup v0.1.2
3952026-01-22T09:07:26.972Z Downloaded zerocopy-derive v0.7.35
3962026-01-22T09:07:26.972Z Downloaded unsafe-libyaml v0.2.11
3972026-01-22T09:07:26.972Z Downloaded zerotrie v0.2.2
3982026-01-22T09:07:26.972Z Downloaded uuid v1.19.0
3992026-01-22T09:07:26.996Z Downloaded zerocopy-derive v0.8.27
4002026-01-22T09:07:26.996Z Downloaded zerovec v0.11.4
4012026-01-22T09:07:26.996Z Downloaded unicode-normalization v0.1.24
4022026-01-22T09:07:27.021Z Downloaded zerocopy v0.7.35
4032026-01-22T09:07:27.021Z Downloaded tokio-util v0.7.16
4042026-01-22T09:07:27.045Z Downloaded winnow v0.5.40
4052026-01-22T09:07:27.046Z Downloaded openssl v0.10.73
4062026-01-22T09:07:27.069Z Downloaded nix v0.30.1
4072026-01-22T09:07:27.069Z Downloaded winnow v0.7.14
4082026-01-22T09:07:27.093Z Downloaded zerocopy v0.8.27
4092026-01-22T09:07:27.119Z Downloaded regex-syntax v0.8.6
4102026-01-22T09:07:27.119Z Downloaded unicode-width v0.2.1
4112026-01-22T09:07:27.142Z Downloaded vcpkg v0.2.15
4122026-01-22T09:07:27.168Z Downloaded webpki-roots v1.0.2
4132026-01-22T09:07:27.192Z Downloaded rustix v0.38.44
4142026-01-22T09:07:27.217Z Downloaded openapiv3 v2.2.0
4152026-01-22T09:07:27.217Z Downloaded rustls v0.23.32
4162026-01-22T09:07:27.241Z Downloaded rustls v0.22.4
4172026-01-22T09:07:27.241Z Downloaded quinn-proto v0.11.13
4182026-01-22T09:07:27.265Z Downloaded unicode-width v0.1.14
4192026-01-22T09:07:27.266Z Downloaded rustix v1.1.2
4202026-01-22T09:07:27.290Z Downloaded syn v2.0.111
4212026-01-22T09:07:27.314Z Downloaded smoltcp v0.11.0
4222026-01-22T09:07:27.314Z Downloaded hickory-proto v0.25.2
4232026-01-22T09:07:27.338Z Downloaded syn v1.0.109
4242026-01-22T09:07:27.338Z Downloaded regex-automata v0.4.13
4252026-01-22T09:07:27.362Z Downloaded regress v0.10.4
4262026-01-22T09:07:27.385Z Downloaded typify-impl v0.4.3
4272026-01-22T09:07:27.386Z Downloaded jiff v0.2.15
4282026-01-22T09:07:27.409Z Downloaded petgraph v0.6.5
4292026-01-22T09:07:27.433Z Downloaded libc v0.2.176
4302026-01-22T09:07:27.456Z Downloaded hickory-proto v0.24.4
4312026-01-22T09:07:27.456Z Downloaded serde_json v1.0.145
4322026-01-22T09:07:27.480Z Downloaded chrono-tz v0.10.4
4332026-01-22T09:07:27.480Z Downloaded rayon v1.11.0
4342026-01-22T09:07:27.504Z Downloaded tabled v0.20.0
4352026-01-22T09:07:27.527Z Downloaded csv v1.3.1
4362026-01-22T09:07:27.551Z Downloaded tabled v0.15.0
4372026-01-22T09:07:27.575Z Downloaded itertools v0.14.0
4382026-01-22T09:07:27.575Z Downloaded tokio v1.48.0
4392026-01-22T09:07:27.614Z Downloaded sha3 v0.10.8
4402026-01-22T09:07:28.660Z Downloaded petgraph v0.8.2
4412026-01-22T09:07:28.728Z Downloaded libz-sys v1.1.22
4422026-01-22T09:07:28.728Z Downloaded typenum v1.18.0
4432026-01-22T09:07:28.728Z Downloaded typed-path v0.9.3
4442026-01-22T09:07:28.728Z Downloaded rustls-webpki v0.102.8
4452026-01-22T09:07:28.728Z Downloaded libm v0.2.15
4462026-01-22T09:07:28.728Z Downloaded curve25519-dalek v4.1.3
4472026-01-22T09:07:28.728Z Downloaded bstr v1.12.0
4482026-01-22T09:07:28.728Z Downloaded tracing v0.1.41
4492026-01-22T09:07:28.728Z Downloaded serde_with v3.14.1
4502026-01-22T09:07:28.728Z Downloaded moka v0.12.11
4512026-01-22T09:07:28.728Z Downloaded unicode-ident v1.0.19
4522026-01-22T09:07:28.728Z Downloaded tracing-core v0.1.34
4532026-01-22T09:07:28.729Z Downloaded tower-http v0.6.6
4542026-01-22T09:07:28.729Z Downloaded tower v0.5.2
4552026-01-22T09:07:28.729Z Downloaded tough v0.20.0
4562026-01-22T09:07:28.729Z Downloaded time v0.3.44
4572026-01-22T09:07:28.729Z Downloaded url v2.5.7
4582026-01-22T09:07:28.729Z Downloaded toml_edit v0.19.15
4592026-01-22T09:07:28.729Z Downloaded test-strategy v0.4.3
4602026-01-22T09:07:28.730Z Downloaded proptest v1.8.0
4612026-01-22T09:07:28.730Z Downloaded goblin v0.10.1
4622026-01-22T09:07:28.730Z Downloaded encoding_rs v0.8.35
4632026-01-22T09:07:28.730Z Downloaded whoami v1.6.1
4642026-01-22T09:07:28.730Z Downloaded vsss-rs v3.3.4
4652026-01-22T09:07:28.730Z Downloaded vergen v8.3.2
4662026-01-22T09:07:28.730Z Downloaded unicode-segmentation v1.12.0
4672026-01-22T09:07:28.730Z Downloaded tracing-attributes v0.1.30
4682026-01-22T09:07:28.730Z Downloaded toml_edit v0.22.27
4692026-01-22T09:07:28.730Z Downloaded toml v0.9.8
4702026-01-22T09:07:28.730Z Downloaded reqwest v0.12.23
4712026-01-22T09:07:28.730Z Downloaded regex v1.12.2
4722026-01-22T09:07:28.730Z Downloaded portable-atomic v1.11.1
4732026-01-22T09:07:28.730Z Downloaded typify v0.4.3
4742026-01-22T09:07:28.730Z Downloaded ring v0.17.14
4752026-01-22T09:07:28.730Z Downloaded tokio-rustls v0.25.0
4762026-01-22T09:07:28.730Z Downloaded xattr v1.6.1
4772026-01-22T09:07:28.730Z Downloaded writeable v0.6.1
4782026-01-22T09:07:28.730Z Downloaded smallvec v1.15.1
4792026-01-22T09:07:28.730Z Downloaded dropshot v0.16.6
4802026-01-22T09:07:28.730Z Downloaded wait-timeout v0.2.1
4812026-01-22T09:07:28.730Z Downloaded walkdir v2.5.0
4822026-01-22T09:07:28.730Z Downloaded version_check v0.9.5
4832026-01-22T09:07:28.730Z Downloaded utf8parse v0.2.2
4842026-01-22T09:07:28.730Z Downloaded ucd-trie v0.1.7
4852026-01-22T09:07:28.730Z Downloaded slog v2.8.2
4862026-01-22T09:07:28.730Z Downloaded toml v0.7.8
4872026-01-22T09:07:28.730Z Downloaded curl-sys v0.4.83+curl-8.15.0
4882026-01-22T09:07:28.730Z Downloaded steno v0.4.1
4892026-01-22T09:07:28.730Z Downloaded schemars v1.2.0
4902026-01-22T09:07:28.730Z Downloaded libgit2-sys v0.17.0+1.8.1
4912026-01-22T09:07:28.730Z Downloaded rustls-pki-types v1.12.0
4922026-01-22T09:07:28.730Z Downloaded h2 v0.4.12
4932026-01-22T09:07:28.730Z Downloaded git2 v0.19.0
4942026-01-22T09:07:28.730Z Downloaded zeroize v1.8.1
4952026-01-22T09:07:28.730Z Downloaded unicode-linebreak v0.1.5
4962026-01-22T09:07:28.730Z Downloaded hyper v1.8.1
4972026-01-22T09:07:28.730Z Downloaded hkdf v0.12.4
4982026-01-22T09:07:28.730Z Downloaded goblin v0.8.2
4992026-01-22T09:07:28.731Z Downloaded snafu v0.8.9
5002026-01-22T09:07:28.731Z Downloaded icu_properties_data v2.0.1
5012026-01-22T09:07:28.731Z Downloaded usdt-macro v0.6.0
5022026-01-22T09:07:28.731Z Downloaded usdt-impl v0.6.0
5032026-01-22T09:07:28.731Z Downloaded usdt-impl v0.5.0
5042026-01-22T09:07:28.731Z Downloaded usdt v0.6.0
5052026-01-22T09:07:28.731Z Downloaded untrusted v0.9.0
5062026-01-22T09:07:28.731Z Downloaded toml_parser v1.0.4
5072026-01-22T09:07:28.731Z Downloaded zerofrom-derive v0.1.6
5082026-01-22T09:07:28.731Z Downloaded want v0.3.1
5092026-01-22T09:07:28.731Z Downloaded utf8_iter v1.0.4
5102026-01-22T09:07:28.731Z Downloaded toml_write v0.1.2
5112026-01-22T09:07:28.731Z Downloaded tinyvec v1.10.0
5122026-01-22T09:07:28.731Z Downloaded tempfile v3.23.0
5132026-01-22T09:07:28.731Z Downloaded tokio-stream v0.1.17
5142026-01-22T09:07:28.731Z Downloaded tokio-rustls v0.26.3
5152026-01-22T09:07:28.731Z Downloaded tower-service v0.3.3
5162026-01-22T09:07:28.731Z Downloaded textwrap v0.16.2
5172026-01-22T09:07:28.731Z Downloaded synstructure v0.13.2
5182026-01-22T09:07:28.731Z Downloaded usdt v0.5.0
5192026-01-22T09:07:28.731Z Downloaded unarray v0.1.4
5202026-01-22T09:07:28.731Z Downloaded thiserror-impl-no-std v2.0.2
5212026-01-22T09:07:28.731Z Downloaded terminal_size v0.4.3
5222026-01-22T09:07:28.731Z Downloaded tar v0.4.44
5232026-01-22T09:07:28.731Z Downloaded similar v2.7.0
5242026-01-22T09:07:28.731Z Downloaded serde v1.0.228
5252026-01-22T09:07:28.731Z Downloaded untrusted v0.7.1
5262026-01-22T09:07:28.731Z Downloaded toml_writer v1.0.4
5272026-01-22T09:07:28.731Z Downloaded toml_datetime v0.7.3
5282026-01-22T09:07:28.731Z Downloaded time-macros v0.2.24
5292026-01-22T09:07:28.731Z Downloaded slog-bunyan v2.5.0
5302026-01-22T09:07:28.731Z Downloaded universal-hash v0.5.1
5312026-01-22T09:07:28.731Z Downloaded unicode-xid v0.2.6
5322026-01-22T09:07:28.731Z Downloaded typify-macro v0.4.3
5332026-01-22T09:07:28.731Z Downloaded try-lock v0.2.5
5342026-01-22T09:07:28.731Z Downloaded take_mut v0.2.2
5352026-01-22T09:07:28.731Z Downloaded spin v0.9.8
5362026-01-22T09:07:28.731Z Downloaded socket2 v0.6.0
5372026-01-22T09:07:28.731Z Downloaded hashbrown v0.15.5
5382026-01-22T09:07:28.732Z Downloaded sigpipe v0.1.3
5392026-01-22T09:07:28.732Z Downloaded pest v2.8.2
5402026-01-22T09:07:28.732Z Downloaded percent-encoding v2.3.2
5412026-01-22T09:07:28.756Z Downloaded memmap2 v0.9.8
5422026-01-22T09:07:28.756Z Downloaded chrono v0.4.42
5432026-01-22T09:07:28.756Z Downloaded bindgen v0.72.1
5442026-01-22T09:07:28.756Z Downloaded toml_datetime v0.6.11
5452026-01-22T09:07:28.757Z Downloaded tokio-native-tls v0.3.1
5462026-01-22T09:07:28.757Z Downloaded tokio-macros v2.6.0
5472026-01-22T09:07:28.757Z Downloaded tokio-dtrace v0.1.1
5482026-01-22T09:07:28.757Z Downloaded tinystr v0.8.1
5492026-01-22T09:07:28.757Z Downloaded thread_local v1.1.9
5502026-01-22T09:07:28.757Z Downloaded thiserror-no-std v2.0.2
5512026-01-22T09:07:28.757Z Downloaded thiserror-impl v2.0.17
5522026-01-22T09:07:28.757Z Downloaded term v1.2.0
5532026-01-22T09:07:28.757Z Downloaded sync_wrapper v1.0.2
5542026-01-22T09:07:28.757Z Downloaded strum_macros v0.27.2
5552026-01-22T09:07:28.757Z Downloaded serde_plain v1.0.2
5562026-01-22T09:07:28.758Z Downloaded serde_core v1.0.228
5572026-01-22T09:07:28.758Z Downloaded schemars v0.9.0
5582026-01-22T09:07:28.758Z Downloaded rustls-webpki v0.103.6
5592026-01-22T09:07:28.758Z Downloaded rand_core v0.9.3
5602026-01-22T09:07:28.758Z Downloaded pkg-config v0.3.32
5612026-01-22T09:07:28.758Z Downloaded hashbrown v0.16.1
5622026-01-22T09:07:28.758Z Downloaded thiserror v2.0.17
5632026-01-22T09:07:28.758Z Downloaded thiserror v1.0.69
5642026-01-22T09:07:28.758Z Downloaded signal-hook v0.3.18
5652026-01-22T09:07:28.758Z Downloaded serde_yaml v0.9.34+deprecated
5662026-01-22T09:07:28.758Z Downloaded schemars v0.8.22
5672026-01-22T09:07:28.758Z Downloaded rand_chacha v0.3.1
5682026-01-22T09:07:28.758Z Downloaded rand v0.9.2
5692026-01-22T09:07:28.758Z Downloaded qorb v0.4.1
5702026-01-22T09:07:28.758Z Downloaded pin-project-internal v1.1.10
5712026-01-22T09:07:28.758Z Downloaded num_threads v0.1.7
5722026-01-22T09:07:28.758Z Downloaded num_enum_derive v0.7.5
5732026-01-22T09:07:28.758Z Downloaded num_enum_derive v0.5.11
5742026-01-22T09:07:28.758Z Downloaded nom v7.1.3
5752026-01-22T09:07:28.758Z Downloaded linear-map v1.2.0
5762026-01-22T09:07:28.759Z Downloaded libloading v0.8.9
5772026-01-22T09:07:28.759Z Downloaded aws-lc-rs v1.14.0
5782026-01-22T09:07:28.759Z Downloaded time-core v0.1.6
5792026-01-22T09:07:28.759Z Downloaded thread-id v5.0.0
5802026-01-22T09:07:28.759Z Downloaded thread-id v4.2.2
5812026-01-22T09:07:28.759Z Downloaded testing_table v0.3.0
5822026-01-22T09:07:28.759Z Downloaded termtree v0.5.1
5832026-01-22T09:07:28.759Z Downloaded tabwriter v1.4.1
5842026-01-22T09:07:28.759Z Downloaded tabled_derive v0.7.0
5852026-01-22T09:07:28.759Z Downloaded strum_macros v0.26.4
5862026-01-22T09:07:28.759Z Downloaded static_assertions v1.1.0
5872026-01-22T09:07:28.759Z Downloaded snafu-derive v0.8.9
5882026-01-22T09:07:28.759Z Downloaded smf v0.2.3
5892026-01-22T09:07:28.759Z Downloaded slog-term v2.9.2
5902026-01-22T09:07:28.759Z Downloaded slog-dtrace v0.3.0
5912026-01-22T09:07:28.759Z Downloaded serde_with_macros v3.14.1
5922026-01-22T09:07:28.759Z Downloaded serde_spanned v1.0.3
5932026-01-22T09:07:28.759Z Downloaded serde_derive v1.0.228
5942026-01-22T09:07:28.759Z Downloaded rayon-core v1.13.0
5952026-01-22T09:07:28.759Z Downloaded rand v0.8.5
5962026-01-22T09:07:28.759Z Downloaded quinn v0.11.9
5972026-01-22T09:07:28.759Z Downloaded proc-macro-error-attr2 v2.0.0
5982026-01-22T09:07:28.759Z Downloaded proc-macro-error-attr v1.0.4
5992026-01-22T09:07:28.759Z Downloaded opaque-debug v0.3.1
6002026-01-22T09:07:28.759Z Downloaded num-iter v0.1.45
6012026-01-22T09:07:28.759Z Downloaded native-tls v0.2.14
6022026-01-22T09:07:28.759Z Downloaded memchr v2.7.5
6032026-01-22T09:07:28.759Z Downloaded libsw-core v0.3.2
6042026-01-22T09:07:28.759Z Downloaded libsw v3.5.0
6052026-01-22T09:07:28.759Z Downloaded ingot-types v0.1.2
6062026-01-22T09:07:28.759Z Downloaded ingot-macros v0.1.1
6072026-01-22T09:07:28.759Z Downloaded indexmap v1.9.3
6082026-01-22T09:07:28.759Z Downloaded hyper-util v0.1.19
6092026-01-22T09:07:28.760Z Downloaded http v1.4.0
6102026-01-22T09:07:28.760Z Downloaded tabled_derive v0.11.0
6112026-01-22T09:07:28.760Z Downloaded swrite v0.1.0
6122026-01-22T09:07:28.760Z Downloaded supports-color v3.0.2
6132026-01-22T09:07:28.760Z Downloaded subtle v2.6.1
6142026-01-22T09:07:28.760Z Downloaded strum v0.27.2
6152026-01-22T09:07:28.760Z Downloaded strum v0.26.3
6162026-01-22T09:07:28.760Z Downloaded structmeta-derive v0.3.0
6172026-01-22T09:07:28.760Z Downloaded structmeta v0.3.0
6182026-01-22T09:07:28.760Z Downloaded strsim v0.11.1
6192026-01-22T09:07:28.760Z Downloaded stable_deref_trait v1.2.0
6202026-01-22T09:07:28.760Z Downloaded smawk v0.3.2
6212026-01-22T09:07:28.760Z Downloaded slog-json v2.6.1
6222026-01-22T09:07:28.760Z Downloaded slog-async v2.8.0
6232026-01-22T09:07:28.760Z Downloaded slab v0.4.11
6242026-01-22T09:07:28.760Z Downloaded signal-hook-registry v1.4.6
6252026-01-22T09:07:28.760Z Downloaded shlex v1.3.0
6262026-01-22T09:07:28.760Z Downloaded sha2 v0.10.9
6272026-01-22T09:07:28.760Z Downloaded scroll v0.13.0
6282026-01-22T09:07:28.760Z Downloaded ryu v1.0.20
6292026-01-22T09:07:28.760Z Downloaded progenitor-impl v0.10.0
6302026-01-22T09:07:28.760Z Downloaded proc-macro2 v1.0.101
6312026-01-22T09:07:28.760Z Downloaded prettyplease v0.2.37
6322026-01-22T09:07:28.761Z Downloaded newline-converter v0.3.0
6332026-01-22T09:07:28.761Z Downloaded mime v0.3.17
6342026-01-22T09:07:28.761Z Downloaded libscf-sys v1.1.0
6352026-01-22T09:07:28.761Z Downloaded keccak v0.1.5
6362026-01-22T09:07:28.761Z Downloaded itertools v0.12.1
6372026-01-22T09:07:28.761Z Downloaded internet-checksum v0.2.1
6382026-01-22T09:07:28.761Z Downloaded iddqd v0.3.17
6392026-01-22T09:07:28.761Z Downloaded clap_builder v4.5.50
6402026-01-22T09:07:28.761Z Downloaded signal-hook-tokio v0.3.1
6412026-01-22T09:07:28.786Z Downloaded sha1 v0.10.6
6422026-01-22T09:07:28.786Z Downloaded serde_tokenstream v0.2.2
6432026-01-22T09:07:28.786Z Downloaded serde_repr v0.1.20
6442026-01-22T09:07:28.786Z Downloaded serde_path_to_error v0.1.20
6452026-01-22T09:07:28.786Z Downloaded serde_derive_internals v0.29.1
6462026-01-22T09:07:28.786Z Downloaded semver v1.0.27
6472026-01-22T09:07:28.786Z Downloaded secrecy v0.10.3
6482026-01-22T09:07:28.786Z Downloaded scroll v0.12.0
6492026-01-22T09:07:28.786Z Downloaded schemars_derive v0.8.22
6502026-01-22T09:07:28.786Z Downloaded rusty-fork v0.3.0
6512026-01-22T09:07:28.786Z Downloaded rustversion v1.0.22
6522026-01-22T09:07:28.786Z Downloaded quinn-udp v0.5.14
6532026-01-22T09:07:28.786Z Downloaded progenitor-impl v0.11.1
6542026-01-22T09:07:28.786Z Downloaded papergrid v0.17.0
6552026-01-22T09:07:28.786Z Downloaded openssl-sys v0.9.109
6562026-01-22T09:07:28.786Z Downloaded mio v1.0.4
6572026-01-22T09:07:28.786Z Downloaded hickory-resolver v0.24.4
6582026-01-22T09:07:28.786Z Downloaded derive_more v0.99.20
6592026-01-22T09:07:28.786Z Downloaded serde_spanned v0.6.9
6602026-01-22T09:07:28.786Z Downloaded serde-big-array v0.5.1
6612026-01-22T09:07:28.786Z Downloaded semver v0.1.20
6622026-01-22T09:07:28.786Z Downloaded search_path v0.1.4
6632026-01-22T09:07:28.786Z Downloaded scroll_derive v0.13.1
6642026-01-22T09:07:28.786Z Downloaded scopeguard v1.2.0
6652026-01-22T09:07:28.786Z Downloaded rustls-pemfile v2.2.0
6662026-01-22T09:07:28.786Z Downloaded pq-sys v0.7.5
6672026-01-22T09:07:28.786Z Downloaded parking_lot v0.12.4
6682026-01-22T09:07:28.786Z Downloaded papergrid v0.11.0
6692026-01-22T09:07:28.786Z Downloaded num-traits v0.2.19
6702026-01-22T09:07:28.786Z Downloaded iri-string v0.7.8
6712026-01-22T09:07:28.787Z Downloaded icu_normalizer_data v2.0.0
6722026-01-22T09:07:28.787Z Downloaded icu_collections v2.0.0
6732026-01-22T09:07:28.787Z Downloaded heapless v0.8.0
6742026-01-22T09:07:28.787Z Downloaded same-file v1.0.6
6752026-01-22T09:07:28.787Z Downloaded rustc_version v0.4.1
6762026-01-22T09:07:28.787Z Downloaded resolv-conf v0.7.5
6772026-01-22T09:07:28.787Z Downloaded rand_core v0.6.4
6782026-01-22T09:07:28.787Z Downloaded rand_chacha v0.9.0
6792026-01-22T09:07:28.787Z Downloaded quote v1.0.40
6802026-01-22T09:07:28.787Z Downloaded ppv-lite86 v0.2.21
6812026-01-22T09:07:28.787Z Downloaded pin-project v1.1.10
6822026-01-22T09:07:28.787Z Downloaded pest_meta v2.8.2
6832026-01-22T09:07:28.787Z Downloaded idna v1.1.0
6842026-01-22T09:07:28.787Z Downloaded blake3 v1.8.2
6852026-01-22T09:07:28.787Z Downloaded progenitor v0.11.1
6862026-01-22T09:07:28.788Z Downloaded proc-macro-error v1.0.4
6872026-01-22T09:07:28.788Z Downloaded postcard v1.1.3
6882026-01-22T09:07:28.812Z Downloaded password-hash v0.5.0
6892026-01-22T09:07:28.812Z Downloaded parking_lot_core v0.9.11
6902026-01-22T09:07:28.812Z Downloaded oxide-tokio-rt v0.1.2
6912026-01-22T09:07:28.812Z Downloaded owo-colors v4.2.2
6922026-01-22T09:07:28.812Z Downloaded minimal-lexical v0.2.1
6932026-01-22T09:07:28.812Z Downloaded futures-util v0.3.31
6942026-01-22T09:07:28.836Z Downloaded const_format v0.2.34
6952026-01-22T09:07:28.836Z Downloaded rustc-hash v2.1.1
6962026-01-22T09:07:28.836Z Downloaded ref-cast-impl v1.0.24
6972026-01-22T09:07:28.836Z Downloaded ref-cast v1.0.24
6982026-01-22T09:07:28.836Z Downloaded quick-error v1.2.3
6992026-01-22T09:07:28.836Z Downloaded progenitor-macro v0.11.1
7002026-01-22T09:07:28.836Z Downloaded progenitor-macro v0.10.0
7012026-01-22T09:07:28.836Z Downloaded progenitor-client v0.11.1
7022026-01-22T09:07:28.836Z Downloaded progenitor v0.10.0
7032026-01-22T09:07:28.836Z Downloaded proc-macro-error2 v2.0.1
7042026-01-22T09:07:28.860Z Downloaded potential_utf v0.1.3
7052026-01-22T09:07:28.860Z Downloaded poly1305 v0.8.0
7062026-01-22T09:07:28.860Z Downloaded pin-project-lite v0.2.16
7072026-01-22T09:07:28.860Z Downloaded pest_derive v2.8.2
7082026-01-22T09:07:28.860Z Downloaded pem v3.0.5
7092026-01-22T09:07:28.860Z Downloaded paste v1.0.15
7102026-01-22T09:07:28.860Z Downloaded parse-display-derive v0.10.0
7112026-01-22T09:07:28.861Z Downloaded oxnet v0.1.4
7122026-01-22T09:07:28.861Z Downloaded openssl-macros v0.1.1
7132026-01-22T09:07:28.885Z Downloaded omicron-zone-package v0.12.2
7142026-01-22T09:07:28.885Z Downloaded num-rational v0.4.2
7152026-01-22T09:07:28.885Z Downloaded num-integer v0.1.46
7162026-01-22T09:07:28.885Z Downloaded miniz_oxide v0.8.9
7172026-01-22T09:07:28.885Z Downloaded log v0.4.28
7182026-01-22T09:07:28.885Z Downloaded indexmap v2.12.1
7192026-01-22T09:07:28.885Z Downloaded icu_normalizer v2.0.0
7202026-01-22T09:07:28.885Z Downloaded hickory-resolver v0.25.2
7212026-01-22T09:07:28.909Z Downloaded getrandom v0.3.3
7222026-01-22T09:07:28.909Z Downloaded getrandom v0.2.16
7232026-01-22T09:07:28.909Z Downloaded chacha20poly1305 v0.10.1
7242026-01-22T09:07:28.909Z Downloaded aho-corasick v1.1.3
7252026-01-22T09:07:28.933Z Downloaded proc-macro-crate v1.3.1
7262026-01-22T09:07:28.933Z Downloaded pretty-hex v0.4.1
7272026-01-22T09:07:28.933Z Downloaded plain v0.2.3
7282026-01-22T09:07:28.933Z Downloaded phf v0.12.1
7292026-01-22T09:07:28.933Z Downloaded pest_generator v2.8.2
7302026-01-22T09:07:28.933Z Downloaded once_cell v1.21.3
7312026-01-22T09:07:28.933Z Downloaded lock_api v0.4.13
7322026-01-22T09:07:28.933Z Downloaded icu_provider v2.0.0
7332026-01-22T09:07:28.933Z Downloaded icu_locale_core v2.0.0
7342026-01-22T09:07:28.933Z Downloaded iana-time-zone v0.1.64
7352026-01-22T09:07:28.957Z Downloaded hyper-rustls v0.27.7
7362026-01-22T09:07:28.957Z Downloaded httparse v1.10.1
7372026-01-22T09:07:28.957Z Downloaded hashbrown v0.12.3
7382026-01-22T09:07:28.957Z Downloaded globset v0.4.16
7392026-01-22T09:07:28.957Z Downloaded fs_extra v1.3.0
7402026-01-22T09:07:28.957Z Downloaded either v1.15.0
7412026-01-22T09:07:28.957Z Downloaded darling v0.21.3
7422026-01-22T09:07:28.957Z Downloaded curl v0.4.49
7432026-01-22T09:07:28.981Z Downloaded pin-utils v0.1.0
7442026-01-22T09:07:28.981Z Downloaded phf_shared v0.12.1
7452026-01-22T09:07:28.981Z Downloaded parse-display v0.10.0
7462026-01-22T09:07:28.981Z Downloaded openssl-probe v0.1.6
7472026-01-22T09:07:28.981Z Downloaded omicron-workspace-hack v0.1.0
7482026-01-22T09:07:28.981Z Downloaded olpc-cjson v0.1.4
7492026-01-22T09:07:28.982Z Downloaded num_enum v0.7.5
7502026-01-22T09:07:28.982Z Downloaded num_enum v0.5.11
7512026-01-22T09:07:28.982Z Downloaded num-derive v0.3.3
7522026-01-22T09:07:28.982Z Downloaded num-conv v0.1.0
7532026-01-22T09:07:29.006Z Downloaded num-complex v0.4.6
7542026-01-22T09:07:29.006Z Downloaded num v0.4.3
7552026-01-22T09:07:29.006Z Downloaded newtype_derive v0.1.6
7562026-01-22T09:07:29.006Z Downloaded newtype-uuid-macros v0.1.0
7572026-01-22T09:07:29.006Z Downloaded newtype-uuid v1.3.2
7582026-01-22T09:07:29.006Z Downloaded managed v0.8.0
7592026-01-22T09:07:29.006Z Downloaded lru-cache v0.1.2
7602026-01-22T09:07:29.006Z Downloaded jiff-static v0.2.15
7612026-01-22T09:07:29.006Z Downloaded icu_properties v2.0.1
7622026-01-22T09:07:29.006Z Downloaded http-body-util v0.1.3
7632026-01-22T09:07:29.006Z Downloaded hostname v0.4.2
7642026-01-22T09:07:29.006Z Downloaded highway v1.3.0
7652026-01-22T09:07:29.006Z Downloaded futures-executor v0.3.31
7662026-01-22T09:07:29.006Z Downloaded fs-err v3.1.2
7672026-01-22T09:07:29.031Z Downloaded erased-serde v0.3.31
7682026-01-22T09:07:29.031Z Downloaded elliptic-curve v0.13.8
7692026-01-22T09:07:29.031Z Downloaded crossbeam-utils v0.8.21
7702026-01-22T09:07:29.031Z Downloaded console v0.15.11
7712026-01-22T09:07:29.031Z Downloaded match_cfg v0.1.0
7722026-01-22T09:07:29.031Z Downloaded macaddr v1.0.1
7732026-01-22T09:07:29.031Z Downloaded lru-slab v0.1.2
7742026-01-22T09:07:29.031Z Downloaded litemap v0.8.0
7752026-01-22T09:07:29.031Z Downloaded lazy_static v1.5.0
7762026-01-22T09:07:29.031Z Downloaded is_terminal_polyfill v1.70.1
7772026-01-22T09:07:29.031Z Downloaded humantime v2.3.0
7782026-01-22T09:07:29.055Z Downloaded hash32 v0.3.1
7792026-01-22T09:07:29.055Z Downloaded futures-channel v0.3.31
7802026-01-22T09:07:29.055Z Downloaded form_urlencoded v1.2.2
7812026-01-22T09:07:29.055Z Downloaded equivalent v1.0.2
7822026-01-22T09:07:29.055Z Downloaded enum-as-inner v0.6.1
7832026-01-22T09:07:29.055Z Downloaded derive-where v1.6.0
7842026-01-22T09:07:29.055Z Downloaded darling_core v0.21.3
7852026-01-22T09:07:29.056Z Downloaded daft-derive v0.1.4
7862026-01-22T09:07:29.056Z Downloaded daft v0.1.4
7872026-01-22T09:07:29.080Z Downloaded crypto-bigint v0.5.5
7882026-01-22T09:07:29.080Z Downloaded cookie v0.18.1
7892026-01-22T09:07:29.080Z Downloaded cmake v0.1.54
7902026-01-22T09:07:29.080Z Downloaded clap v4.5.50
7912026-01-22T09:07:29.104Z Downloaded clang-sys v1.8.1
7922026-01-22T09:07:29.104Z Downloaded cc v1.2.38
7932026-01-22T09:07:29.104Z Downloaded cancel-safe-futures v0.1.5
7942026-01-22T09:07:29.104Z Downloaded camino v1.2.2
7952026-01-22T09:07:29.104Z Downloaded memoffset v0.9.1
7962026-01-22T09:07:29.104Z Downloaded hostname v0.3.1
7972026-01-22T09:07:29.128Z Downloaded heck v0.5.0
7982026-01-22T09:07:29.128Z Downloaded glob v0.3.3
7992026-01-22T09:07:29.128Z Downloaded futures-task v0.3.31
8002026-01-22T09:07:29.128Z Downloaded futures-io v0.3.31
8012026-01-22T09:07:29.128Z Downloaded foreign-types-shared v0.1.1
8022026-01-22T09:07:29.128Z Downloaded foreign-types v0.3.2
8032026-01-22T09:07:29.128Z Downloaded deranged v0.5.3
8042026-01-22T09:07:29.128Z Downloaded defmt v0.3.100
8052026-01-22T09:07:29.128Z Downloaded cstr-argument v0.1.2
8062026-01-22T09:07:29.128Z Downloaded crossbeam-epoch v0.9.18
8072026-01-22T09:07:29.128Z Downloaded crossbeam-channel v0.5.15
8082026-01-22T09:07:29.152Z Downloaded cipher v0.4.4
8092026-01-22T09:07:29.152Z Downloaded linked-hash-map v0.5.6
8102026-01-22T09:07:29.152Z Downloaded kstat-rs v0.2.4
8112026-01-22T09:07:29.152Z Downloaded jobserver v0.1.34
8122026-01-22T09:07:29.152Z Downloaded itoa v1.0.15
8132026-01-22T09:07:29.152Z Downloaded is-terminal v0.4.16
8142026-01-22T09:07:29.152Z Downloaded ipnetwork v0.21.1
8152026-01-22T09:07:29.176Z Downloaded ipnet v2.11.0
8162026-01-22T09:07:29.176Z Downloaded ingot v0.1.1
8172026-01-22T09:07:29.176Z Downloaded hubpack v0.1.2
8182026-01-22T09:07:29.176Z Downloaded httpdate v1.0.3
8192026-01-22T09:07:29.176Z Downloaded hmac v0.12.1
8202026-01-22T09:07:29.176Z Downloaded half v2.7.1
8212026-01-22T09:07:29.176Z Downloaded generic-array v0.14.7
8222026-01-22T09:07:29.176Z Downloaded futures-sink v0.3.31
8232026-01-22T09:07:29.176Z Downloaded futures v0.3.31
8242026-01-22T09:07:29.176Z Downloaded foreign-types-macros v0.2.3
8252026-01-22T09:07:29.200Z Downloaded csv-core v0.1.12
8262026-01-22T09:07:29.200Z Downloaded crc8 v0.1.1
8272026-01-22T09:07:29.200Z Downloaded crc32fast v1.5.0
8282026-01-22T09:07:29.200Z Downloaded colored v3.0.0
8292026-01-22T09:07:29.200Z Downloaded clap_derive v4.5.49
8302026-01-22T09:07:29.200Z Downloaded ciborium v0.2.2
8312026-01-22T09:07:29.200Z Downloaded cfg-if v1.0.3
8322026-01-22T09:07:29.200Z Downloaded bytes v1.10.1
8332026-01-22T09:07:29.200Z Downloaded instant v0.1.13
8342026-01-22T09:07:29.200Z Downloaded inout v0.1.4
8352026-01-22T09:07:29.200Z Downloaded indent_write v2.2.0
8362026-01-22T09:07:29.225Z Downloaded idna_adapter v1.2.1
8372026-01-22T09:07:29.225Z Downloaded hyper-tls v0.6.0
8382026-01-22T09:07:29.225Z Downloaded hubpack_derive v0.1.1
8392026-01-22T09:07:29.225Z Downloaded http-body v1.0.1
8402026-01-22T09:07:29.225Z Downloaded group v0.13.0
8412026-01-22T09:07:29.225Z Downloaded gethostname v0.5.0
8422026-01-22T09:07:29.225Z Downloaded futures-macro v0.3.31
8432026-01-22T09:07:29.225Z Downloaded futures-core v0.3.31
8442026-01-22T09:07:29.225Z Downloaded foreign-types-shared v0.3.1
8452026-01-22T09:07:29.226Z Downloaded foreign-types v0.5.0
8462026-01-22T09:07:29.226Z Downloaded flate2 v1.1.2
8472026-01-22T09:07:29.226Z Downloaded find-msvc-tools v0.1.2
8482026-01-22T09:07:29.226Z Downloaded embedded-io v0.6.1
8492026-01-22T09:07:29.226Z Downloaded embedded-io v0.4.0
8502026-01-22T09:07:29.226Z Downloaded dyn-clone v1.0.20
8512026-01-22T09:07:29.250Z Downloaded dof v0.4.0
8522026-01-22T09:07:29.250Z Downloaded digest v0.10.7
8532026-01-22T09:07:29.250Z Downloaded defmt-macros v1.0.1
8542026-01-22T09:07:29.250Z Downloaded defmt v1.0.1
8552026-01-22T09:07:29.250Z Downloaded data-encoding v2.9.0
8562026-01-22T09:07:29.250Z Downloaded crossbeam-deque v0.8.6
8572026-01-22T09:07:29.250Z Downloaded critical-section v1.2.0
8582026-01-22T09:07:29.250Z Downloaded chacha20 v0.9.1
8592026-01-22T09:07:29.250Z Downloaded cexpr v0.6.0
8602026-01-22T09:07:29.250Z Downloaded cargo_metadata v0.18.1
8612026-01-22T09:07:29.250Z Downloaded base64 v0.22.1
8622026-01-22T09:07:29.274Z Downloaded allocator-api2 v0.2.21
8632026-01-22T09:07:29.274Z Downloaded hex v0.4.3
8642026-01-22T09:07:29.274Z Downloaded heck v0.4.1
8652026-01-22T09:07:29.274Z Downloaded foldhash v0.1.5
8662026-01-22T09:07:29.274Z Downloaded fnv v1.0.7
8672026-01-22T09:07:29.274Z Downloaded fixedbitset v0.4.2
8682026-01-22T09:07:29.274Z Downloaded fastrand v2.3.0
8692026-01-22T09:07:29.274Z Downloaded expectorate v1.2.0
8702026-01-22T09:07:29.274Z Downloaded dropshot_endpoint v0.16.6
8712026-01-22T09:07:29.298Z Downloaded dropshot-api-manager v0.2.2
8722026-01-22T09:07:29.298Z Downloaded drift v0.1.0
8732026-01-22T09:07:29.298Z Downloaded display-error-chain v0.2.2
8742026-01-22T09:07:29.298Z Downloaded curve25519-dalek-derive v0.1.1
8752026-01-22T09:07:29.298Z Downloaded crypto-common v0.1.6
8762026-01-22T09:07:29.298Z Downloaded crucible-workspace-hack v0.1.0
8772026-01-22T09:07:29.298Z Downloaded constant_time_eq v0.3.1
8782026-01-22T09:07:29.298Z Downloaded colorchoice v1.0.4
8792026-01-22T09:07:29.298Z Downloaded cobs v0.3.0
8802026-01-22T09:07:29.298Z Downloaded clap_lex v0.7.5
8812026-01-22T09:07:29.298Z Downloaded cargo-platform v0.1.9
8822026-01-22T09:07:29.298Z Downloaded float-ord v0.3.2
8832026-01-22T09:07:29.298Z Downloaded fixedbitset v0.5.7
8842026-01-22T09:07:29.298Z Downloaded filetime v0.2.26
8852026-01-22T09:07:29.322Z Downloaded ff v0.13.1
8862026-01-22T09:07:29.322Z Downloaded errno v0.3.14
8872026-01-22T09:07:29.322Z Downloaded dtrace-parser v0.2.0
8882026-01-22T09:07:29.322Z Downloaded displaydoc v0.2.5
8892026-01-22T09:07:29.322Z Downloaded derive-ex v0.1.8
8902026-01-22T09:07:29.322Z Downloaded defmt-parser v1.0.0
8912026-01-22T09:07:29.323Z Downloaded debug-ignore v1.0.5
8922026-01-22T09:07:29.323Z Downloaded darling_macro v0.21.3
8932026-01-22T09:07:29.323Z Downloaded cpufeatures v0.2.17
8942026-01-22T09:07:29.323Z Downloaded const_format_proc_macros v0.2.34
8952026-01-22T09:07:29.323Z Downloaded ciborium-ll v0.2.2
8962026-01-22T09:07:29.323Z Downloaded camino-tempfile v1.4.1
8972026-01-22T09:07:29.323Z Downloaded bytecount v0.6.9
8982026-01-22T09:07:29.347Z Downloaded blake2 v0.10.6
8992026-01-22T09:07:29.347Z Downloaded anstream v0.6.20
9002026-01-22T09:07:29.347Z Downloaded dtrace-parser v0.3.0
9012026-01-22T09:07:29.347Z Downloaded dropshot-api-manager-types v0.2.2
9022026-01-22T09:07:29.347Z Downloaded convert_case v0.4.0
9032026-01-22T09:07:29.347Z Downloaded ciborium-io v0.2.2
9042026-01-22T09:07:29.347Z Downloaded cfg_aliases v0.2.1
9052026-01-22T09:07:29.347Z Downloaded bitflags v2.9.4
9062026-01-22T09:07:29.347Z Downloaded bitflags v1.3.2
9072026-01-22T09:07:29.347Z Downloaded anyhow v1.0.100
9082026-01-22T09:07:29.372Z Downloaded anstyle-parse v0.2.7
9092026-01-22T09:07:29.372Z Downloaded byteorder v1.5.0
9102026-01-22T09:07:29.372Z Downloaded bit-vec v0.8.0
9112026-01-22T09:07:29.372Z Downloaded bit-set v0.8.0
9122026-01-22T09:07:29.372Z Downloaded bcs v0.1.6
9132026-01-22T09:07:29.372Z Downloaded base64ct v1.8.0
9142026-01-22T09:07:29.372Z Downloaded backoff v0.4.0
9152026-01-22T09:07:29.372Z Downloaded atomic-waker v1.1.2
9162026-01-22T09:07:29.372Z Downloaded async-trait v0.1.89
9172026-01-22T09:07:29.373Z Downloaded async-stream-impl v0.3.6
9182026-01-22T09:07:29.397Z Downloaded arrayvec v0.7.6
9192026-01-22T09:07:29.397Z Downloaded arrayref v0.3.9
9202026-01-22T09:07:29.397Z Downloaded argon2 v0.5.3
9212026-01-22T09:07:29.397Z Downloaded base16ct v0.2.0
9222026-01-22T09:07:29.397Z Downloaded autocfg v1.5.0
9232026-01-22T09:07:29.397Z Downloaded aws-lc-sys v0.31.0
9242026-01-22T09:07:29.646Z Downloaded atomicwrites v0.4.4
9252026-01-22T09:07:29.671Z Downloaded async-recursion v1.1.1
9262026-01-22T09:07:29.671Z Downloaded aead v0.5.2
9272026-01-22T09:07:29.671Z Downloaded anstyle-query v1.1.4
9282026-01-22T09:07:29.671Z Downloaded anstyle v1.0.11
9292026-01-22T09:07:30.093Z Compiling proc-macro2 v1.0.101
9302026-01-22T09:07:30.093Z Compiling unicode-ident v1.0.19
9312026-01-22T09:07:30.117Z Compiling serde_core v1.0.228
9322026-01-22T09:07:30.117Z Compiling serde v1.0.228
9332026-01-22T09:07:30.117Z Compiling libc v0.2.176
9342026-01-22T09:07:30.117Z Compiling autocfg v1.5.0
9352026-01-22T09:07:30.117Z Checking cfg-if v1.0.3
9362026-01-22T09:07:30.459Z Compiling memchr v2.7.5
9372026-01-22T09:07:30.664Z Compiling getrandom v0.3.3
9382026-01-22T09:07:31.064Z Compiling libm v0.2.15
9392026-01-22T09:07:32.133Z Compiling shlex v1.3.0
9402026-01-22T09:07:32.266Z Compiling find-msvc-tools v0.1.2
9412026-01-22T09:07:32.523Z Compiling jobserver v0.1.34
9422026-01-22T09:07:32.562Z Compiling version_check v0.9.5
9432026-01-22T09:07:32.768Z Checking smallvec v1.15.1
9442026-01-22T09:07:32.855Z Compiling quote v1.0.40
9452026-01-22T09:07:32.884Z Checking itoa v1.0.15
9462026-01-22T09:07:33.310Z Compiling cc v1.2.38
9472026-01-22T09:07:33.351Z Compiling icu_properties_data v2.0.1
9482026-01-22T09:07:33.387Z Compiling icu_normalizer_data v2.0.0
9492026-01-22T09:07:33.414Z Compiling thiserror v2.0.17
9502026-01-22T09:07:33.489Z Compiling syn v2.0.111
9512026-01-22T09:07:33.986Z Compiling lock_api v0.4.13
9522026-01-22T09:07:34.112Z Compiling parking_lot_core v0.9.11
9532026-01-22T09:07:34.180Z Checking stable_deref_trait v1.2.0
9542026-01-22T09:07:34.354Z Checking ryu v1.0.20
9552026-01-22T09:07:34.647Z Compiling serde_json v1.0.145
9562026-01-22T09:07:34.685Z Compiling log v0.4.28
9572026-01-22T09:07:35.122Z Compiling heck v0.5.0
9582026-01-22T09:07:35.189Z Compiling num-traits v0.2.19
9592026-01-22T09:07:35.410Z Checking litemap v0.8.0
9602026-01-22T09:07:35.583Z Checking writeable v0.6.1
9612026-01-22T09:07:35.869Z Checking percent-encoding v2.3.2
9622026-01-22T09:07:35.934Z Compiling zerocopy v0.8.27
9632026-01-22T09:07:36.168Z Checking form_urlencoded v1.2.2
9642026-01-22T09:07:36.397Z Checking utf8_iter v1.0.4
9652026-01-22T09:07:36.464Z Compiling rustversion v1.0.22
9662026-01-22T09:07:36.723Z Checking pin-project-lite v0.2.16
9672026-01-22T09:07:36.844Z Checking getrandom v0.2.16
9682026-01-22T09:07:36.879Z Compiling regex-syntax v0.8.6
9692026-01-22T09:07:36.908Z Compiling aho-corasick v1.1.3
9702026-01-22T09:07:37.101Z Checking iana-time-zone v0.1.64
9712026-01-22T09:07:37.323Z Compiling allocator-api2 v0.2.21
9722026-01-22T09:07:37.561Z Checking socket2 v0.6.0
9732026-01-22T09:07:38.082Z Compiling equivalent v1.0.2
9742026-01-22T09:07:38.131Z Compiling bitflags v2.9.4
9752026-01-22T09:07:38.245Z Checking scopeguard v1.2.0
9762026-01-22T09:07:38.436Z Compiling semver v1.0.27
9772026-01-22T09:07:38.531Z Checking uuid v1.19.0
9782026-01-22T09:07:38.934Z Compiling portable-atomic v1.11.1
9792026-01-22T09:07:39.002Z Checking parking_lot v0.12.4
9802026-01-22T09:07:39.056Z Compiling ring v0.17.14
9812026-01-22T09:07:39.256Z Checking signal-hook-registry v1.4.6
9822026-01-22T09:07:39.437Z Compiling typenum v1.18.0
9832026-01-22T09:07:39.582Z Checking mio v1.0.4
9842026-01-22T09:07:39.616Z Checking critical-section v1.2.0
9852026-01-22T09:07:39.804Z Compiling schemars v0.8.22
9862026-01-22T09:07:40.139Z Checking dyn-clone v1.0.20
9872026-01-22T09:07:40.273Z Checking futures-core v0.3.31
9882026-01-22T09:07:40.357Z Compiling hashbrown v0.16.1
9892026-01-22T09:07:40.552Z Compiling regex-automata v0.4.13
9902026-01-22T09:07:41.023Z Compiling synstructure v0.13.2
9912026-01-22T09:07:41.085Z Compiling serde_derive_internals v0.29.1
9922026-01-22T09:07:41.652Z Checking once_cell v1.21.3
9932026-01-22T09:07:42.320Z Compiling either v1.15.0
9942026-01-22T09:07:42.425Z Checking subtle v2.6.1
9952026-01-22T09:07:42.537Z Compiling indexmap v2.12.1
9962026-01-22T09:07:42.792Z Compiling thiserror v1.0.69
9972026-01-22T09:07:43.009Z Compiling pkg-config v0.3.32
9982026-01-22T09:07:43.777Z Checking rand_core v0.6.4
9992026-01-22T09:07:43.930Z Compiling rustix v1.1.2
10002026-01-22T09:07:44.108Z Compiling httparse v1.10.1
10012026-01-22T09:07:44.136Z Checking futures-sink v0.3.31
10022026-01-22T09:07:44.184Z Compiling ucd-trie v0.1.7
10032026-01-22T09:07:44.335Z Checking slab v0.4.11
10042026-01-22T09:07:44.668Z Compiling anyhow v1.0.100
10052026-01-22T09:07:44.778Z Compiling serde_derive v1.0.228
10062026-01-22T09:07:44.813Z Compiling zerofrom-derive v0.1.6
10072026-01-22T09:07:45.136Z Compiling yoke-derive v0.8.0
10082026-01-22T09:07:45.168Z Compiling zerovec-derive v0.11.1
10092026-01-22T09:07:45.370Z Compiling displaydoc v0.2.5
10102026-01-22T09:07:45.663Z Compiling thiserror-impl v2.0.17
10112026-01-22T09:07:45.804Z Compiling schemars_derive v0.8.22
10122026-01-22T09:07:46.856Z Compiling tokio-macros v2.6.0
10132026-01-22T09:07:47.335Z Compiling zerocopy-derive v0.8.27
10142026-01-22T09:07:47.546Z Compiling zeroize_derive v1.4.3
10152026-01-22T09:07:47.580Z Compiling futures-macro v0.3.31
10162026-01-22T09:07:47.671Z Checking zerofrom v0.1.6
10172026-01-22T09:07:47.979Z Checking yoke v0.8.0
10182026-01-22T09:07:48.409Z Compiling regex v1.12.2
10192026-01-22T09:07:48.453Z Checking zerovec v0.11.4
10202026-01-22T09:07:48.512Z Checking zerotrie v0.2.2
10212026-01-22T09:07:48.921Z Checking zeroize v1.8.1
10222026-01-22T09:07:48.954Z Compiling thiserror-impl v1.0.69
10232026-01-22T09:07:49.145Z Compiling pest v2.8.2
10242026-01-22T09:07:49.346Z Checking futures-channel v0.3.31
10252026-01-22T09:07:49.424Z Compiling generic-array v0.14.7
10262026-01-22T09:07:49.761Z Checking pin-utils v0.1.0
10272026-01-22T09:07:49.824Z Compiling fnv v1.0.7
10282026-01-22T09:07:49.914Z Compiling vcpkg v0.2.15
10292026-01-22T09:07:50.227Z Checking tinystr v0.8.1
10302026-01-22T09:07:50.621Z Checking icu_locale_core v2.0.0
10312026-01-22T09:07:51.057Z Checking potential_utf v0.1.3
10322026-01-22T09:07:51.348Z Checking icu_collections v2.0.0
10332026-01-22T09:07:51.640Z Checking futures-io v0.3.31
10342026-01-22T09:07:51.827Z Checking icu_provider v2.0.0
10352026-01-22T09:07:52.076Z Compiling pest_meta v2.8.2
10362026-01-22T09:07:52.109Z Compiling rustc-hash v2.1.1
10372026-01-22T09:07:52.246Z Checking futures-task v0.3.31
10382026-01-22T09:07:52.311Z Checking bytes v1.10.1
10392026-01-22T09:07:52.343Z Checking chrono v0.4.42
10402026-01-22T09:07:52.343Z Checking icu_properties v2.0.1
10412026-01-22T09:07:52.505Z Checking icu_normalizer v2.0.0
10422026-01-22T09:07:53.013Z Compiling serde_tokenstream v0.2.2
10432026-01-22T09:07:53.341Z Checking tokio v1.48.0
10442026-01-22T09:07:53.606Z Compiling pest_generator v2.8.2
10452026-01-22T09:07:53.771Z Compiling prettyplease v0.2.37
10462026-01-22T09:07:54.209Z Checking futures-util v0.3.31
10472026-01-22T09:07:54.407Z Compiling glob v0.3.3
10482026-01-22T09:07:54.435Z Checking idna_adapter v1.2.1
10492026-01-22T09:07:54.669Z Checking idna v1.1.0
10502026-01-22T09:07:55.104Z Compiling minimal-lexical v0.2.1
10512026-01-22T09:07:55.151Z Compiling tracing-attributes v0.1.30
10522026-01-22T09:07:55.180Z Compiling clang-sys v1.8.1
10532026-01-22T09:07:55.204Z Checking url v2.5.7
10542026-01-22T09:07:55.616Z Compiling pest_derive v2.8.2
10552026-01-22T09:07:55.860Z Compiling nom v7.1.3
10562026-01-22T09:07:56.170Z Checking tracing-core v0.1.34
10572026-01-22T09:07:56.848Z Compiling byteorder v1.5.0
10582026-01-22T09:07:57.500Z Checking crypto-common v0.1.6
10592026-01-22T09:07:57.644Z Compiling http v1.4.0
10602026-01-22T09:07:57.847Z Checking tracing v0.1.41
10612026-01-22T09:07:58.186Z Compiling libloading v0.8.9
10622026-01-22T09:07:58.370Z Compiling bindgen v0.72.1
10632026-01-22T09:07:58.887Z Compiling cexpr v0.6.0
10642026-01-22T09:07:58.987Z Compiling itertools v0.12.1
10652026-01-22T09:07:59.010Z Checking errno v0.3.14
10662026-01-22T09:07:59.246Z Compiling num-conv v0.1.0
10672026-01-22T09:07:59.541Z Compiling time-core v0.1.6
10682026-01-22T09:07:59.858Z Compiling time-macros v0.2.24
10692026-01-22T09:08:00.200Z Compiling scroll_derive v0.13.1
10702026-01-22T09:08:00.227Z Compiling camino v1.2.2
10712026-01-22T09:08:00.432Z Compiling paste v1.0.15
10722026-01-22T09:08:00.809Z Checking rustls-pki-types v1.12.0
10732026-01-22T09:08:01.417Z Compiling omicron-workspace-hack v0.1.0
10742026-01-22T09:08:01.482Z Checking ipnet v2.11.0
10752026-01-22T09:08:01.818Z Checking base64 v0.22.1
10762026-01-22T09:08:01.895Z Compiling foldhash v0.1.5
10772026-01-22T09:08:01.985Z Checking untrusted v0.9.0
10782026-01-22T09:08:02.118Z Checking tokio-util v0.7.16
10792026-01-22T09:08:02.154Z Compiling hashbrown v0.15.5
10802026-01-22T09:08:02.219Z Compiling openssl-sys v0.9.109
10812026-01-22T09:08:03.224Z Compiling strsim v0.11.1
10822026-01-22T09:08:03.387Z Compiling regress v0.10.4
10832026-01-22T09:08:03.418Z Checking http-body v1.0.1
10842026-01-22T09:08:03.466Z Checking block-buffer v0.10.4
10852026-01-22T09:08:03.649Z Checking ppv-lite86 v0.2.21
10862026-01-22T09:08:03.842Z Compiling async-trait v0.1.89
10872026-01-22T09:08:03.877Z Compiling crossbeam-utils v0.8.21
10882026-01-22T09:08:04.299Z Checking atomic-waker v1.1.2
10892026-01-22T09:08:04.391Z Checking pretty-hex v0.4.1
10902026-01-22T09:08:04.467Z Compiling syn v1.0.109
10912026-01-22T09:08:04.538Z Checking digest v0.10.7
10922026-01-22T09:08:04.599Z Compiling scroll v0.13.0
10932026-01-22T09:08:05.152Z Compiling slog v2.8.2
10942026-01-22T09:08:05.179Z Compiling cmake v0.1.54
10952026-01-22T09:08:05.403Z Compiling fs_extra v1.3.0
10962026-01-22T09:08:05.580Z Compiling dunce v1.0.5
10972026-01-22T09:08:05.764Z Checking tower-layer v0.3.3
10982026-01-22T09:08:05.888Z Compiling plain v0.2.3
10992026-01-22T09:08:05.966Z Compiling usdt-impl v0.6.0
11002026-01-22T09:08:05.995Z Checking tower-service v0.3.3
11012026-01-22T09:08:06.031Z Checking try-lock v0.2.5
11022026-01-22T09:08:06.104Z Compiling ident_case v1.0.1
11032026-01-22T09:08:06.133Z Compiling goblin v0.10.1
11042026-01-22T09:08:06.255Z Checking want v0.3.1
11052026-01-22T09:08:06.349Z Compiling darling_core v0.21.3
11062026-01-22T09:08:06.442Z Checking h2 v0.4.12
11072026-01-22T09:08:06.548Z Checking ipnetwork v0.21.1
11082026-01-22T09:08:06.594Z Checking erased-serde v0.3.31
11092026-01-22T09:08:06.984Z Compiling typify-impl v0.4.3
11102026-01-22T09:08:07.034Z Compiling daft-derive v0.1.4
11112026-01-22T09:08:07.728Z Checking httpdate v1.0.3
11122026-01-22T09:08:08.464Z Compiling dtrace-parser v0.3.0
11132026-01-22T09:08:09.210Z Compiling thread-id v5.0.0
11142026-01-22T09:08:09.927Z Checking cpufeatures v0.2.17
11152026-01-22T09:08:10.551Z Checking hyper v1.8.1
11162026-01-22T09:08:11.652Z Compiling darling_macro v0.21.3
11172026-01-22T09:08:12.173Z Compiling aws-lc-rs v1.14.0
11182026-01-22T09:08:12.540Z Checking hyper-util v0.1.19
11192026-01-22T09:08:12.570Z Compiling darling v0.21.3
11202026-01-22T09:08:12.622Z Compiling rustls v0.22.4
11212026-01-22T09:08:12.726Z Checking http-body-util v0.1.3
11222026-01-22T09:08:12.969Z Compiling dof v0.4.0
11232026-01-22T09:08:13.246Z Compiling openapiv3 v2.2.0
11242026-01-22T09:08:13.535Z Compiling aws-lc-sys v0.31.0
11252026-01-22T09:08:14.695Z Compiling structmeta-derive v0.3.0
11262026-01-22T09:08:14.934Z Checking rand_core v0.9.3
11272026-01-22T09:08:15.277Z Checking encoding_rs v0.8.35
11282026-01-22T09:08:15.307Z Compiling slog-async v2.8.0
11292026-01-22T09:08:15.438Z Checking mime v0.3.17
11302026-01-22T09:08:15.464Z Compiling typify-macro v0.4.3
11312026-01-22T09:08:15.777Z Compiling usdt-attr-macro v0.6.0
11322026-01-22T09:08:15.899Z Compiling usdt-macro v0.6.0
11332026-01-22T09:08:16.880Z Checking oxnet v0.1.4
11342026-01-22T09:08:16.910Z Compiling structmeta v0.3.0
11352026-01-22T09:08:17.286Z Checking serde_urlencoded v0.7.1
11362026-01-22T09:08:17.350Z Compiling multer v3.1.0
11372026-01-22T09:08:17.386Z Checking foreign-types-shared v0.1.1
11382026-01-22T09:08:17.386Z Compiling openssl v0.10.73
11392026-01-22T09:08:17.448Z Checking untrusted v0.7.1
11402026-01-22T09:08:17.574Z Checking foreign-types v0.3.2
11412026-01-22T09:08:17.662Z Checking rand_chacha v0.9.0
11422026-01-22T09:08:17.706Z Compiling openssl-macros v0.1.1
11432026-01-22T09:08:17.738Z Compiling async-stream-impl v0.3.6
11442026-01-22T09:08:17.858Z Compiling strum_macros v0.26.4
11452026-01-22T09:08:17.930Z Compiling native-tls v0.2.14
11462026-01-22T09:08:18.101Z Compiling unsafe-libyaml v0.2.11
11472026-01-22T09:08:18.340Z Checking fastrand v2.3.0
11482026-01-22T09:08:18.536Z Checking openssl-probe v0.1.6
11492026-01-22T09:08:18.563Z Compiling rustls v0.23.32
11502026-01-22T09:08:18.638Z Compiling typify v0.4.3
11512026-01-22T09:08:18.686Z Checking tempfile v3.23.0
11522026-01-22T09:08:18.836Z Checking rand v0.9.2
11532026-01-22T09:08:18.922Z Checking futures-executor v0.3.31
11542026-01-22T09:08:18.984Z Compiling newtype-uuid-macros v0.1.0
11552026-01-22T09:08:19.064Z Compiling dropshot v0.16.6
11562026-01-22T09:08:19.448Z Compiling serde_yaml v0.9.34+deprecated
11572026-01-22T09:08:19.607Z Checking powerfmt v0.2.0
11582026-01-22T09:08:19.829Z Compiling ref-cast v1.0.24
11592026-01-22T09:08:19.893Z Checking unicode-width v0.2.1
11602026-01-22T09:08:20.326Z Checking winnow v0.7.14
11612026-01-22T09:08:20.386Z Checking hex v0.4.3
11622026-01-22T09:08:20.548Z Checking deranged v0.5.3
11632026-01-22T09:08:20.927Z Checking futures v0.3.31
11642026-01-22T09:08:21.357Z Compiling dropshot_endpoint v0.16.6
11652026-01-22T09:08:22.452Z Compiling ref-cast-impl v1.0.24
11662026-01-22T09:08:22.854Z Checking sync_wrapper v1.0.2
11672026-01-22T09:08:23.044Z Checking num_threads v0.1.7
11682026-01-22T09:08:23.472Z Checking time v0.3.44
11692026-01-22T09:08:23.564Z Checking tower v0.5.2
11702026-01-22T09:08:23.942Z Checking tokio-native-tls v0.3.1
11712026-01-22T09:08:23.970Z Compiling derive-ex v0.1.8
11722026-01-22T09:08:24.361Z Checking webpki-roots v1.0.2
11732026-01-22T09:08:24.571Z Compiling strum_macros v0.27.2
11742026-01-22T09:08:24.602Z Checking memmap2 v0.9.8
11752026-01-22T09:08:24.686Z Checking iri-string v0.7.8
11762026-01-22T09:08:24.932Z Checking hyper-tls v0.6.0
11772026-01-22T09:08:24.987Z Compiling progenitor-impl v0.11.1
11782026-01-22T09:08:25.251Z Checking crossbeam-channel v0.5.15
11792026-01-22T09:08:26.055Z Checking newtype-uuid v1.3.2
11802026-01-22T09:08:26.446Z Checking daft v0.1.4
11812026-01-22T09:08:26.768Z Compiling serde_with_macros v3.14.1
11822026-01-22T09:08:27.184Z Checking tower-http v0.6.6
11832026-01-22T09:08:27.414Z Compiling test-strategy v0.4.3
11842026-01-22T09:08:27.771Z Checking thread_local v1.1.9
11852026-01-22T09:08:28.622Z Checking rustls-webpki v0.102.8
11862026-01-22T09:08:28.662Z Checking is-terminal v0.4.16
11872026-01-22T09:08:28.816Z Checking term v1.2.0
11882026-01-22T09:08:29.044Z Checking debug-ignore v1.0.5
11892026-01-22T09:08:29.225Z Checking match_cfg v0.1.0
11902026-01-22T09:08:29.343Z Checking take_mut v0.2.2
11912026-01-22T09:08:29.501Z Checking hostname v0.3.1
11922026-01-22T09:08:29.665Z Checking slog-term v2.9.2
11932026-01-22T09:08:29.873Z Checking slog-json v2.6.1
11942026-01-22T09:08:30.040Z Compiling progenitor-macro v0.11.1
11952026-01-22T09:08:30.186Z Checking toml_parser v1.0.4
11962026-01-22T09:08:30.219Z Compiling parse-display-derive v0.10.0
11972026-01-22T09:08:30.251Z Compiling slog-error-chain-derive v0.1.0 (https://github.com/oxidecomputer/slog-error-chain?branch=main#15f69041)
11982026-01-22T09:08:30.902Z Checking serde_spanned v1.0.3
11992026-01-22T09:08:31.040Z Checking toml_datetime v0.7.3
12002026-01-22T09:08:31.450Z Checking toml_writer v1.0.4
12012026-01-22T09:08:31.577Z Checking spin v0.9.8
12022026-01-22T09:08:31.814Z Checking toml v0.9.8
12032026-01-22T09:08:32.036Z Checking usdt v0.6.0
12042026-01-22T09:08:32.233Z Checking slog-bunyan v2.5.0
12052026-01-22T09:08:32.441Z Checking omicron-uuid-kinds v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
12062026-01-22T09:08:32.765Z Checking tokio-rustls v0.25.0
12072026-01-22T09:08:33.131Z Checking strum v0.26.3
12082026-01-22T09:08:33.163Z Checking async-stream v0.3.6
12092026-01-22T09:08:33.201Z Checking sha1 v0.10.6
12102026-01-22T09:08:33.313Z Checking waitgroup v0.1.2
12112026-01-22T09:08:33.395Z Checking rand_chacha v0.3.1
12122026-01-22T09:08:33.487Z Checking rustls-pemfile v2.2.0
12132026-01-22T09:08:33.516Z Compiling toml_datetime v0.6.11
12142026-01-22T09:08:33.590Z Checking macaddr v1.0.1
12152026-01-22T09:08:33.753Z Checking serde_path_to_error v0.1.20
12162026-01-22T09:08:33.816Z Checking hostname v0.4.2
12172026-01-22T09:08:33.940Z Checking wait-timeout v0.2.1
12182026-01-22T09:08:33.989Z Checking quick-error v1.2.3
12192026-01-22T09:08:34.012Z Checking bit-vec v0.8.0
12202026-01-22T09:08:34.162Z Checking lazy_static v1.5.0
12212026-01-22T09:08:34.227Z Checking rusty-fork v0.3.0
12222026-01-22T09:08:34.288Z Checking rand v0.8.5
12232026-01-22T09:08:34.336Z Compiling api_identity v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
12242026-01-22T09:08:34.392Z Checking bit-set v0.8.0
12252026-01-22T09:08:34.689Z Checking rand_xorshift v0.4.0
12262026-01-22T09:08:35.068Z Checking unarray v0.1.4
12272026-01-22T09:08:35.121Z Checking strum v0.27.2
12282026-01-22T09:08:35.250Z Checking proptest v1.8.0
12292026-01-22T09:08:35.333Z Checking serde_human_bytes v0.1.0 (https://github.com/oxidecomputer/serde_human_bytes?branch=main#70d3253a)
12302026-01-22T09:08:35.357Z Checking tabwriter v1.4.1
12312026-01-22T09:08:35.792Z Checking colored v3.0.0
12322026-01-22T09:08:37.943Z Checking serde_with v3.14.1
12332026-01-22T09:08:38.673Z Compiling clap_derive v4.5.49
12342026-01-22T09:08:39.144Z Compiling itertools v0.14.0
12352026-01-22T09:08:39.292Z Checking tufaceous-artifact v0.1.0 (https://github.com/oxidecomputer/tufaceous?branch=main#1eacfcf0)
12362026-01-22T09:08:39.831Z Checking utf8parse v0.2.2
12372026-01-22T09:08:40.141Z Checking anstyle-parse v0.2.7
12382026-01-22T09:08:40.833Z Checking rdb-types v0.1.0 (https://github.com/oxidecomputer/maghemite?rev=205b3ccf75b527ac7a565285fdcc0c78f4fcee95#205b3ccf)
12392026-01-22T09:08:41.263Z Checking terminal_size v0.4.3
12402026-01-22T09:08:41.351Z Checking instant v0.1.13
12412026-01-22T09:08:41.517Z Checking anstyle-query v1.1.4
12422026-01-22T09:08:41.553Z Checking anstyle v1.0.11
12432026-01-22T09:08:41.713Z Checking is_terminal_polyfill v1.70.1
12442026-01-22T09:08:41.928Z Checking foldhash v0.2.0
12452026-01-22T09:08:41.954Z Checking colorchoice v1.0.4
12462026-01-22T09:08:42.147Z Checking anstream v0.6.20
12472026-01-22T09:08:42.271Z Checking iddqd v0.3.17
12482026-01-22T09:08:42.380Z Checking backoff v0.4.0
12492026-01-22T09:08:42.550Z Checking parse-display v0.10.0
12502026-01-22T09:08:42.705Z Checking slog-error-chain v0.1.0 (https://github.com/oxidecomputer/slog-error-chain?branch=main#15f69041)
12512026-01-22T09:08:42.823Z Checking protocol v0.1.0 (https://github.com/oxidecomputer/lldp#5d121027)
12522026-01-22T09:08:43.040Z Checking clap_lex v0.7.5
12532026-01-22T09:08:43.503Z Checking clap_builder v4.5.50
12542026-01-22T09:08:46.384Z Checking clap v4.5.50
12552026-01-22T09:08:47.643Z Compiling rustls-webpki v0.103.6
12562026-01-22T09:08:53.445Z Checking serde_spanned v0.6.9
12572026-01-22T09:08:55.244Z Compiling tokio-rustls v0.26.3
12582026-01-22T09:08:56.970Z Compiling hyper-rustls v0.27.7
12592026-01-22T09:08:57.450Z Compiling reqwest v0.12.23
12602026-01-22T09:09:00.254Z Compiling progenitor-client v0.11.1
12612026-01-22T09:09:00.755Z Compiling progenitor v0.11.1
12622026-01-22T09:09:02.744Z Compiling num-integer v0.1.46
12632026-01-22T09:09:03.769Z Compiling mg-admin-client v0.1.0 (https://github.com/oxidecomputer/maghemite?rev=205b3ccf75b527ac7a565285fdcc0c78f4fcee95#205b3ccf)
12642026-01-22T09:09:03.985Z Compiling progenitor-client v0.10.0
12652026-01-22T09:09:06.488Z Checking toml_write v0.1.2
12662026-01-22T09:09:06.742Z Checking num-rational v0.4.2
12672026-01-22T09:09:06.766Z Checking num-iter v0.1.45
12682026-01-22T09:09:06.841Z Checking toml_edit v0.22.27
12692026-01-22T09:09:07.553Z Compiling num-complex v0.4.6
12702026-01-22T09:09:07.996Z Compiling memoffset v0.9.1
12712026-01-22T09:09:08.464Z Compiling cfg_aliases v0.2.1
12722026-01-22T09:09:08.563Z Checking num v0.4.3
12732026-01-22T09:09:08.599Z Compiling nix v0.30.1
12742026-01-22T09:09:09.134Z Compiling float-ord v0.3.2
12752026-01-22T09:09:09.336Z Checking toml v0.8.23
12762026-01-22T09:09:09.364Z Compiling winnow v0.5.40
12772026-01-22T09:09:10.041Z Compiling omicron-common v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
12782026-01-22T09:09:11.346Z Checking crossbeam-epoch v0.9.18
12792026-01-22T09:09:11.820Z Compiling oximeter-macro-impl v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
12802026-01-22T09:09:11.844Z Compiling hubpack_derive v0.1.1
12812026-01-22T09:09:12.631Z Compiling toml_edit v0.19.15
12822026-01-22T09:09:12.870Z Compiling zerocopy-derive v0.7.35
12832026-01-22T09:09:12.936Z Checking hubpack v0.1.2
12842026-01-22T09:09:13.266Z Compiling nvpair-sys v0.4.0 (https://github.com/jmesmon/rust-libzfs?branch=master#ecd5a922)
12852026-01-22T09:09:13.698Z Checking static_assertions v1.1.0
12862026-01-22T09:09:13.794Z Compiling rayon-core v1.13.0
12872026-01-22T09:09:14.090Z Compiling proc-macro-error-attr v1.0.4
12882026-01-22T09:09:14.210Z Compiling heapless v0.8.0
12892026-01-22T09:09:14.531Z Checking crossbeam-deque v0.8.6
12902026-01-22T09:09:14.586Z Compiling ingot-macros v0.1.1
12912026-01-22T09:09:14.614Z Checking hash32 v0.3.1
12922026-01-22T09:09:14.815Z Compiling proc-macro-error v1.0.4
12932026-01-22T09:09:14.865Z Compiling smoltcp v0.11.0
12942026-01-22T09:09:14.902Z Compiling libdlpi-sys v0.1.0 (https://github.com/oxidecomputer/dlpi-sys#42b2bfee)
12952026-01-22T09:09:15.094Z Checking bytecount v0.6.9
12962026-01-22T09:09:15.385Z Compiling proc-macro-crate v1.3.1
12972026-01-22T09:09:16.007Z Compiling zerocopy v0.7.35
12982026-01-22T09:09:16.099Z Compiling num-derive v0.3.3
12992026-01-22T09:09:16.171Z Checking cobs v0.3.0
13002026-01-22T09:09:16.302Z Compiling foreign-types-macros v0.2.3
13012026-01-22T09:09:16.453Z Compiling scroll_derive v0.12.1
13022026-01-22T09:09:17.357Z Compiling usdt-impl v0.5.0
13032026-01-22T09:09:17.515Z Checking managed v0.8.0
13042026-01-22T09:09:17.619Z Compiling num_enum_derive v0.7.5
13052026-01-22T09:09:17.832Z Compiling crucible-workspace-hack v0.1.0
13062026-01-22T09:09:17.862Z Checking bitflags v1.3.2
13072026-01-22T09:09:17.938Z Checking foreign-types-shared v0.3.1
13082026-01-22T09:09:17.971Z Checking libscf-sys v1.1.0
13092026-01-22T09:09:18.118Z Checking foreign-types v0.5.0
13102026-01-22T09:09:18.286Z Checking scroll v0.12.0
13112026-01-22T09:09:18.318Z Compiling dof v0.3.0
13122026-01-22T09:09:18.444Z Checking postcard v1.1.3
13132026-01-22T09:09:19.251Z Compiling dtrace-parser v0.2.0
13142026-01-22T09:09:19.316Z Checking camino-tempfile v1.4.1
13152026-01-22T09:09:19.346Z Compiling rusty-doors-macros v0.1.0 (https://github.com/oxidecomputer/rusty-doors#0e3a1495)
13162026-01-22T09:09:19.646Z Checking illumos-sys-hdrs v0.1.0 (https://github.com/oxidecomputer/opte?rev=795a1e0aeefb7a2c6fe4139779fdf66930d09b80#795a1e0a)
13172026-01-22T09:09:19.736Z Checking num_enum v0.7.5
13182026-01-22T09:09:19.962Z Compiling opte v0.1.0 (https://github.com/oxidecomputer/opte?rev=795a1e0aeefb7a2c6fe4139779fdf66930d09b80#795a1e0a)
13192026-01-22T09:09:20.108Z Checking cstr-argument v0.1.2
13202026-01-22T09:09:20.198Z Compiling thread-id v4.2.2
13212026-01-22T09:09:20.337Z Compiling heck v0.4.1
13222026-01-22T09:09:20.369Z Checking nvpair v0.5.0 (https://github.com/jmesmon/rust-libzfs?branch=master#ecd5a922)
13232026-01-22T09:09:20.484Z Checking ingot-types v0.1.2
13242026-01-22T09:09:20.728Z Checking rusty-doors v0.1.0 (https://github.com/oxidecomputer/rusty-doors#0e3a1495)
13252026-01-22T09:09:20.762Z Checking dlpi v0.2.0 (https://github.com/oxidecomputer/dlpi-sys#42b2bfee)
13262026-01-22T09:09:20.797Z Checking goblin v0.8.2
13272026-01-22T09:09:20.967Z Checking smf v0.10.0 (https://github.com/illumos/smf-rs#72389b51)
13282026-01-22T09:09:20.995Z Compiling num_enum_derive v0.5.11
13292026-01-22T09:09:21.274Z Checking ingot v0.1.1
13302026-01-22T09:09:21.388Z Compiling kstat-macro v0.1.0 (https://github.com/oxidecomputer/opte?rev=795a1e0aeefb7a2c6fe4139779fdf66930d09b80#795a1e0a)
13312026-01-22T09:09:21.789Z Compiling rustc_version v0.4.1
13322026-01-22T09:09:22.324Z Compiling convert_case v0.4.0
13332026-01-22T09:09:22.352Z Compiling libnet v0.1.0 (https://github.com/oxidecomputer/netadm-sys?branch=main#24167d26)
13342026-01-22T09:09:22.658Z Checking tinyvec_macros v0.1.1
13352026-01-22T09:09:22.795Z Checking tinyvec v1.10.0
13362026-01-22T09:09:22.946Z Compiling oximeter-types-versions v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
13372026-01-22T09:09:23.002Z Checking num_enum v0.5.11
13382026-01-22T09:09:23.027Z Compiling derive_more v0.99.20
13392026-01-22T09:09:23.566Z Compiling libz-sys v1.1.22
13402026-01-22T09:09:23.671Z Compiling tofino v0.1.0 (https://github.com/oxidecomputer/tofino#7e56ab6e)
13412026-01-22T09:09:23.911Z Compiling oximeter-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
13422026-01-22T09:09:24.158Z Compiling proc-macro-error-attr2 v2.0.0
13432026-01-22T09:09:24.395Z Compiling rustix v0.38.44
13442026-01-22T09:09:24.455Z Checking opte-api v0.1.0 (https://github.com/oxidecomputer/opte?rev=795a1e0aeefb7a2c6fe4139779fdf66930d09b80#795a1e0a)
13452026-01-22T09:09:24.891Z Compiling proc-macro-error2 v2.0.1
13462026-01-22T09:09:25.452Z Checking illumos-devinfo v0.1.0 (https://github.com/oxidecomputer/illumos-devinfo?branch=main#4323b17b)
13472026-01-22T09:09:25.790Z Compiling usdt-macro v0.5.0
13482026-01-22T09:09:26.775Z Compiling usdt-attr-macro v0.5.0
13492026-01-22T09:09:26.802Z Checking oxide-vpc v0.1.0 (https://github.com/oxidecomputer/opte?rev=795a1e0aeefb7a2c6fe4139779fdf66930d09b80#795a1e0a)
13502026-01-22T09:09:27.109Z Compiling zone_cfg_derive v0.3.1
13512026-01-22T09:09:27.155Z Checking rayon v1.11.0
13522026-01-22T09:09:27.378Z Compiling oximeter-schema v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
13532026-01-22T09:09:28.222Z Checking bhyve_api_sys v0.0.0 (https://github.com/oxidecomputer/propolis?rev=2dc643742f82d2e072a1281dab23ba2bfdcee440#2dc64374)
13542026-01-22T09:09:28.462Z Compiling num-derive v0.4.2
13552026-01-22T09:09:28.524Z Checking sigpipe v0.1.3
13562026-01-22T09:09:28.629Z Checking memmap v0.7.0
13572026-01-22T09:09:28.664Z Checking jiff v0.2.15
13582026-01-22T09:09:29.239Z Compiling illumos-utils v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
13592026-01-22T09:09:29.488Z Checking usdt v0.5.0
13602026-01-22T09:09:29.650Z Checking bhyve_api v0.0.0 (https://github.com/oxidecomputer/propolis?rev=2dc643742f82d2e072a1281dab23ba2bfdcee440#2dc64374)
13612026-01-22T09:09:29.780Z Checking opte-ioctl v0.1.0 (https://github.com/oxidecomputer/opte?rev=795a1e0aeefb7a2c6fe4139779fdf66930d09b80#795a1e0a)
13622026-01-22T09:09:30.130Z Compiling oximeter-timeseries-macro v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
13632026-01-22T09:09:30.159Z Compiling tabled_derive v0.11.0
13642026-01-22T09:09:30.383Z Checking crucible-smf v0.0.0 (https://github.com/oxidecomputer/crucible?rev=7103cd3a3d7b0112d2949dd135db06fef0c156bb#7103cd3a)
13652026-01-22T09:09:30.702Z Checking papergrid v0.17.0
13662026-01-22T09:09:30.729Z Checking zone v0.3.1
13672026-01-22T09:09:30.833Z Checking transceiver-messages v0.1.1 (https://github.com/oxidecomputer/transceiver-control?branch=main#59b8432e)
13682026-01-22T09:09:31.514Z Checking testing_table v0.3.0
13692026-01-22T09:09:31.678Z Checking smf v0.2.3
13702026-01-22T09:09:31.702Z Checking secrecy v0.10.3
13712026-01-22T09:09:31.889Z Compiling transceiver-controller v0.1.1 (https://github.com/oxidecomputer/transceiver-control?branch=main#59b8432e)
13722026-01-22T09:09:32.179Z Checking bstr v1.12.0
13732026-01-22T09:09:32.261Z Checking whoami v1.6.1
13742026-01-22T09:09:32.497Z Checking tabled v0.20.0
13752026-01-22T09:09:32.538Z Checking transceiver-decode v0.1.0 (https://github.com/oxidecomputer/transceiver-control?branch=main#59b8432e)
13762026-01-22T09:09:32.578Z Compiling curve25519-dalek v4.1.3
13772026-01-22T09:09:32.622Z Checking hmac v0.12.1
13782026-01-22T09:09:32.895Z Checking inout v0.1.4
13792026-01-22T09:09:32.946Z Compiling enum-as-inner v0.6.1
13802026-01-22T09:09:33.082Z Compiling pq-sys v0.7.5
13812026-01-22T09:09:33.628Z Checking ff v0.13.1
13822026-01-22T09:09:33.716Z Compiling semver v0.1.20
13832026-01-22T09:09:33.856Z Checking data-encoding v2.9.0
13842026-01-22T09:09:33.951Z Checking group v0.13.0
13852026-01-22T09:09:34.163Z Compiling rustc_version v0.1.7
13862026-01-22T09:09:34.310Z Checking cipher v0.4.4
13872026-01-22T09:09:34.559Z Checking hkdf v0.12.4
13882026-01-22T09:09:34.593Z Compiling omicron-rpaths v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
13892026-01-22T09:09:34.616Z Checking oxlog v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
13902026-01-22T09:09:34.655Z Compiling thiserror-impl-no-std v2.0.2
13912026-01-22T09:09:34.720Z Checking universal-hash v0.5.1
13922026-01-22T09:09:34.825Z Checking crypto-bigint v0.5.5
13932026-01-22T09:09:34.895Z Checking half v2.7.1
13942026-01-22T09:09:34.933Z Compiling curve25519-dalek-derive v0.1.1
13952026-01-22T09:09:34.962Z Checking indent_write v2.2.0
13962026-01-22T09:09:35.205Z Checking base16ct v0.2.0
13972026-01-22T09:09:35.433Z Checking opaque-debug v0.3.1
13982026-01-22T09:09:35.465Z Checking base64ct v1.8.0
13992026-01-22T09:09:35.572Z Checking ciborium-io v0.2.2
14002026-01-22T09:09:35.737Z Checking ciborium-ll v0.2.2
14012026-01-22T09:09:35.945Z Checking password-hash v0.5.0
14022026-01-22T09:09:36.074Z Checking poly1305 v0.8.0
14032026-01-22T09:09:36.391Z Compiling bootstore v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
14042026-01-22T09:09:36.611Z Checking chacha20 v0.9.1
14052026-01-22T09:09:36.828Z Compiling newtype_derive v0.1.6
14062026-01-22T09:09:36.905Z Checking similar v2.7.0
14072026-01-22T09:09:36.935Z Checking thiserror-no-std v2.0.2
14082026-01-22T09:09:36.991Z Checking gfss v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
14092026-01-22T09:09:37.051Z Checking atomicwrites v0.4.4
14102026-01-22T09:09:37.097Z Checking blake2 v0.10.6
14112026-01-22T09:09:37.206Z Checking aead v0.5.2
14122026-01-22T09:09:37.299Z Checking resolv-conf v0.7.5
14132026-01-22T09:09:37.374Z Checking elliptic-curve v0.13.8
14142026-01-22T09:09:37.446Z Checking keccak v0.1.5
14152026-01-22T09:09:37.473Z Compiling owo-colors v4.2.2
14162026-01-22T09:09:37.530Z Checking linked-hash-map v0.5.6
14172026-01-22T09:09:37.620Z Checking argon2 v0.5.3
14182026-01-22T09:09:37.682Z Checking chacha20poly1305 v0.10.1
14192026-01-22T09:09:37.768Z Checking sha3 v0.10.8
14202026-01-22T09:09:37.922Z Checking lru-cache v0.1.2
14212026-01-22T09:09:37.947Z Checking vsss-rs v3.3.4
14222026-01-22T09:09:38.015Z Checking ciborium v0.2.2
14232026-01-22T09:09:38.057Z Checking hickory-proto v0.24.4
14242026-01-22T09:09:38.177Z Checking tokio-dtrace v0.1.1
14252026-01-22T09:09:38.210Z Checking crucible-client-types v0.1.0 (https://github.com/oxidecomputer/crucible?rev=7103cd3a3d7b0112d2949dd135db06fef0c156bb#7103cd3a)
14262026-01-22T09:09:38.291Z Checking propolis_types v0.0.0 (https://github.com/oxidecomputer/propolis?rev=2dc643742f82d2e072a1281dab23ba2bfdcee440#2dc64374)
14272026-01-22T09:09:38.459Z Checking serde-big-array v0.5.1
14282026-01-22T09:09:38.522Z Compiling serde_repr v0.1.20
14292026-01-22T09:09:38.711Z Compiling derive-where v1.6.0
14302026-01-22T09:09:38.743Z Checking siphasher v1.0.1
14312026-01-22T09:09:38.816Z Checking same-file v1.0.6
14322026-01-22T09:09:38.960Z Checking unicode-segmentation v1.12.0
14332026-01-22T09:09:39.031Z Checking walkdir v2.5.0
14342026-01-22T09:09:39.080Z Checking phf_shared v0.12.1
14352026-01-22T09:09:39.342Z Checking propolis_api_types v0.0.0 (https://github.com/oxidecomputer/propolis?rev=2dc643742f82d2e072a1281dab23ba2bfdcee440#2dc64374)
14362026-01-22T09:09:39.370Z Checking oxide-tokio-rt v0.1.2
14372026-01-22T09:09:39.567Z Checking gateway-messages v0.1.0 (https://github.com/oxidecomputer/management-gateway-service?rev=ea2f39ccdea124b5affcad0ca17bc5dacf65823a#ea2f39cc)
14382026-01-22T09:09:39.606Z Checking omicron-passwords v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
14392026-01-22T09:09:39.670Z Checking newline-converter v0.3.0
14402026-01-22T09:09:40.100Z Checking console v0.15.11
14412026-01-22T09:09:40.635Z Compiling progenitor-impl v0.10.0
14422026-01-22T09:09:40.680Z Checking tokio-stream v0.1.17
14432026-01-22T09:09:41.219Z Compiling pin-project-internal v1.1.10
14442026-01-22T09:09:41.391Z Compiling slog-dtrace v0.3.0
14452026-01-22T09:09:41.459Z Checking hickory-resolver v0.24.4
14462026-01-22T09:09:41.556Z Checking csv-core v0.1.12
14472026-01-22T09:09:41.789Z Checking smawk v0.3.2
14482026-01-22T09:09:41.916Z Checking unicode-linebreak v0.1.5
14492026-01-22T09:09:42.084Z Checking unicode-width v0.1.14
14502026-01-22T09:09:42.121Z Compiling cancel-safe-futures v0.1.5
14512026-01-22T09:09:42.375Z Checking swrite v0.1.0
14522026-01-22T09:09:42.538Z Compiling unicode-xid v0.2.6
14532026-01-22T09:09:42.564Z Compiling chrono-tz v0.10.4
14542026-01-22T09:09:42.644Z Checking textwrap v0.16.2
14552026-01-22T09:09:42.770Z Compiling const_format_proc_macros v0.2.34
14562026-01-22T09:09:42.919Z Checking qorb v0.4.1
14572026-01-22T09:09:42.992Z Checking csv v1.3.1
14582026-01-22T09:09:43.190Z Checking expectorate v1.2.0
14592026-01-22T09:09:43.419Z Checking phf v0.12.1
14602026-01-22T09:09:43.612Z Checking pin-project v1.1.10
14612026-01-22T09:09:43.705Z Checking unicode-normalization v0.1.24
14622026-01-22T09:09:43.792Z Compiling oximeter-db v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
14632026-01-22T09:09:44.421Z Checking libsw-core v0.3.2
14642026-01-22T09:09:44.630Z Checking gateway-types-versions v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
14652026-01-22T09:09:44.673Z Compiling async-recursion v1.1.1
14662026-01-22T09:09:44.705Z Compiling snafu-derive v0.8.9
14672026-01-22T09:09:44.741Z Compiling libgit2-sys v0.17.0+1.8.1
14682026-01-22T09:09:44.954Z Compiling cookie v0.18.1
14692026-01-22T09:09:45.344Z Checking fixedbitset v0.4.2
14702026-01-22T09:09:45.613Z Compiling progenitor-macro v0.10.0
14712026-01-22T09:09:45.660Z Checking highway v1.3.0
14722026-01-22T09:09:45.704Z Compiling moka v0.12.11
14732026-01-22T09:09:45.977Z Checking fixedbitset v0.5.7
14742026-01-22T09:09:46.108Z Checking petgraph v0.6.5
14752026-01-22T09:09:46.387Z Checking petgraph v0.8.2
14762026-01-22T09:09:47.851Z Checking gateway-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
14772026-01-22T09:09:48.265Z Checking libsw v3.5.0
14782026-01-22T09:09:48.515Z Checking olpc-cjson v0.1.4
14792026-01-22T09:09:48.544Z Checking const_format v0.2.34
14802026-01-22T09:09:48.610Z Checking snafu v0.8.9
14812026-01-22T09:09:48.767Z Checking cockroach-admin-types-versions v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
14822026-01-22T09:09:49.524Z Checking papergrid v0.11.0
14832026-01-22T09:09:49.580Z Checking globset v0.4.16
14842026-01-22T09:09:49.612Z Checking gethostname v0.5.0
14852026-01-22T09:09:49.612Z Checking clickward v0.1.0 (https://github.com/oxidecomputer/clickward?rev=e3d9a1c35cf3cd04f9cb2e997b0ad88324d30737#e3d9a1c3)
14862026-01-22T09:09:49.985Z Compiling tabled_derive v0.7.0
14872026-01-22T09:09:50.079Z Checking ereport-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
14882026-01-22T09:09:50.651Z Checking bcs v0.1.6
14892026-01-22T09:09:50.886Z Checking internal-dns-types-versions v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
14902026-01-22T09:09:51.115Z Checking clickhouse-admin-types-versions v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
14912026-01-22T09:09:51.856Z Checking pem v3.0.5
14922026-01-22T09:09:51.991Z Checking internal-dns-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
14932026-01-22T09:09:52.183Z Checking serde_plain v1.0.2
14942026-01-22T09:09:52.488Z Checking typed-path v0.9.3
14952026-01-22T09:09:52.740Z Checking linear-map v1.2.0
14962026-01-22T09:09:53.104Z Checking crc8 v0.1.1
14972026-01-22T09:09:53.280Z Checking tagptr v0.2.0
14982026-01-22T09:09:53.443Z Checking termtree v0.5.1
14992026-01-22T09:09:53.574Z Compiling signal-hook v0.3.18
15002026-01-22T09:09:53.982Z Checking clickhouse-admin-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15012026-01-22T09:09:54.290Z Checking sled-hardware-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15022026-01-22T09:09:54.349Z Checking tough v0.20.0
15032026-01-22T09:09:54.373Z Checking update-engine v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15042026-01-22T09:09:55.124Z Checking oxql-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15052026-01-22T09:09:55.154Z Checking trust-quorum-types-versions v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15062026-01-22T09:09:55.510Z Checking oximeter v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15072026-01-22T09:09:55.934Z Checking common v0.1.0 (/work/oxidecomputer/dendrite/common)
15082026-01-22T09:09:56.729Z Checking progenitor v0.10.0
15092026-01-22T09:09:56.757Z Checking trust-quorum-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15102026-01-22T09:09:56.939Z Checking gateway-client v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15112026-01-22T09:09:57.133Z Checking tabled v0.15.0
15122026-01-22T09:09:57.161Z Checking cockroach-admin-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15132026-01-22T09:09:57.439Z Checking steno v0.4.1
15142026-01-22T09:09:57.601Z Checking sled-agent-types-versions v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15152026-01-22T09:09:58.860Z Checking aal v0.1.0 (/work/oxidecomputer/dendrite/aal)
15162026-01-22T09:09:59.230Z Checking hickory-proto v0.25.2
15172026-01-22T09:09:59.587Z Checking dropshot-api-manager-types v0.2.2
15182026-01-22T09:09:59.626Z Compiling cargo-platform v0.1.9
15192026-01-22T09:09:59.794Z Compiling curl-sys v0.4.83+curl-8.15.0
15202026-01-22T09:09:59.943Z Compiling vergen v8.3.2
15212026-01-22T09:10:00.156Z Compiling crc32fast v1.5.0
15222026-01-22T09:10:00.409Z Checking humantime v2.3.0
15232026-01-22T09:10:00.703Z Compiling cargo_metadata v0.18.1
15242026-01-22T09:10:00.829Z Checking dpd-types v0.1.0 (/work/oxidecomputer/dendrite/dpd-types)
15252026-01-22T09:10:00.857Z Checking common v0.1.0 (https://github.com/oxidecomputer/dendrite?branch=main#606c0be8)
15262026-01-22T09:10:02.085Z Checking sha2 v0.10.9
15272026-01-22T09:10:02.628Z Compiling blake3 v1.8.2
15282026-01-22T09:10:02.781Z Compiling fs-err v3.1.2
15292026-01-22T09:10:02.944Z Checking hickory-resolver v0.25.2
15302026-01-22T09:10:03.207Z Checking adler2 v2.0.1
15312026-01-22T09:10:03.414Z Checking miniz_oxide v0.8.9
15322026-01-22T09:10:03.889Z Checking dpd-api v0.1.0 (/work/oxidecomputer/dendrite/dpd-api)
15332026-01-22T09:10:04.160Z Checking dpd-client v0.1.0 (https://github.com/oxidecomputer/dendrite?branch=main#606c0be8)
15342026-01-22T09:10:04.327Z Checking internal-dns-resolver v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15352026-01-22T09:10:04.426Z Compiling asic v0.1.0 (/work/oxidecomputer/dendrite/asic)
15362026-01-22T09:10:04.467Z Compiling pcap v0.1.0 (/work/oxidecomputer/dendrite/pcap)
15372026-01-22T09:10:05.094Z Checking filetime v0.2.26
15382026-01-22T09:10:05.362Z Checking is_ci v1.2.0
15392026-01-22T09:10:05.548Z Checking constant_time_eq v0.3.1
15402026-01-22T09:10:05.731Z Checking xattr v1.6.1
15412026-01-22T09:10:05.980Z Checking arrayref v0.3.9
15422026-01-22T09:10:06.112Z Checking arrayvec v0.7.6
15432026-01-22T09:10:06.530Z Compiling curl v0.4.49
15442026-01-22T09:10:06.569Z Compiling libnet v0.1.0 (https://github.com/oxidecomputer/netadm-sys#2cd6617e)
15452026-01-22T09:10:07.030Z Checking tar v0.4.44
15462026-01-22T09:10:07.497Z Checking sled-agent-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15472026-01-22T09:10:07.572Z Checking supports-color v3.0.2
15482026-01-22T09:10:07.800Z Checking flate2 v1.1.2
15492026-01-22T09:10:08.117Z Checking toml v0.7.8
15502026-01-22T09:10:08.291Z Checking dpd-client v0.1.0 (/work/oxidecomputer/dendrite/dpd-client)
15512026-01-22T09:10:08.448Z Checking drift v0.1.0
15522026-01-22T09:10:08.544Z Checking kstat-rs v0.2.4
15532026-01-22T09:10:08.801Z Compiling tfportd v0.1.0 (/work/oxidecomputer/dendrite/tfportd)
15542026-01-22T09:10:08.918Z Checking topological-sort v0.2.2
15552026-01-22T09:10:08.946Z Checking dropshot-api-manager v0.2.2
15562026-01-22T09:10:09.172Z Checking omicron-zone-package v0.12.2
15572026-01-22T09:10:09.357Z Checking trust-quorum-protocol v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15582026-01-22T09:10:09.460Z Checking oximeter-instruments v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15592026-01-22T09:10:11.346Z Checking nexus-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15602026-01-22T09:10:11.575Z Checking signal-hook-tokio v0.3.1
15612026-01-22T09:10:11.789Z Checking packet v0.1.0 (/work/oxidecomputer/dendrite/packet)
15622026-01-22T09:10:11.820Z Compiling aal_macros v0.0.1 (/work/oxidecomputer/dendrite/aal_macros)
15632026-01-22T09:10:12.892Z Checking ispf v0.1.0 (https://github.com/oxidecomputer/ispf#f78443a9)
15642026-01-22T09:10:12.923Z Checking display-error-chain v0.2.2
15652026-01-22T09:10:13.189Z Checking internet-checksum v0.2.1
15662026-01-22T09:10:13.319Z Checking search_path v0.1.4
15672026-01-22T09:10:13.388Z Checking dendrite-dropshot-apis v0.1.0 (/work/oxidecomputer/dendrite/dropshot-apis)
15682026-01-22T09:10:13.417Z Checking uplinkd v0.1.0 (/work/oxidecomputer/dendrite/uplinkd)
15692026-01-22T09:10:13.573Z Checking xtask v0.1.0 (/work/oxidecomputer/dendrite/xtask)
15702026-01-22T09:10:17.042Z Checking lldpd-common v0.1.0 (https://github.com/oxidecomputer/lldp#5d121027)
15712026-01-22T09:10:17.310Z Checking lldpd-client v0.1.0 (https://github.com/oxidecomputer/lldp#5d121027)
15722026-01-22T09:10:19.069Z Compiling git2 v0.19.0
15732026-01-22T09:10:25.086Z Compiling dpd v0.2.0 (/work/oxidecomputer/dendrite/dpd)
15742026-01-22T09:10:27.271Z Checking swadm v0.1.0 (/work/oxidecomputer/dendrite/swadm)
15752026-01-22T09:10:41.222Z Checking nexus-client v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15762026-01-22T09:10:44.569Z Checking oximeter-producer v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
15772026-01-22T09:10:58.198Z Finished `dev` profile [unoptimized + debuginfo] target(s) in 4m 07s
15782026-01-22T09:10:58.640Z+ for feat in tofino_stub tofino_asic softnpu chaos
15792026-01-22T09:10:58.640Z+ cargo clippy --features tofino_asic -- --deny warnings
15802026-01-22T09:10:59.975Z Compiling tofino v0.1.0 (https://github.com/oxidecomputer/tofino?branch=main#d13f3e2d)
15812026-01-22T09:11:00.000Z Compiling asic v0.1.0 (/work/oxidecomputer/dendrite/asic)
15822026-01-22T09:11:00.000Z Compiling dpd v0.2.0 (/work/oxidecomputer/dendrite/dpd)
15832026-01-22T09:11:00.000Z Checking dpd-client v0.1.0 (/work/oxidecomputer/dendrite/dpd-client)
15842026-01-22T09:11:17.932Z Checking tfportd v0.1.0 (/work/oxidecomputer/dendrite/tfportd)
15852026-01-22T09:11:17.932Z Checking swadm v0.1.0 (/work/oxidecomputer/dendrite/swadm)
15862026-01-22T09:11:24.477Z Finished `dev` profile [unoptimized + debuginfo] target(s) in 25.58s
15872026-01-22T09:11:24.671Z+ for feat in tofino_stub tofino_asic softnpu chaos
15882026-01-22T09:11:24.671Z+ cargo clippy --features softnpu -- --deny warnings
15892026-01-22T09:11:25.545Z Downloading crates ...
15902026-01-22T09:11:25.810Z Downloaded funty v2.0.0
15912026-01-22T09:11:25.834Z Downloaded ascii v1.1.0
15922026-01-22T09:11:25.834Z Downloaded wyz v0.5.1
15932026-01-22T09:11:25.834Z Downloaded serde_arrays v0.1.0
15942026-01-22T09:11:25.834Z Downloaded bitstruct v0.1.1
15952026-01-22T09:11:25.834Z Downloaded erased-serde v0.4.8
15962026-01-22T09:11:25.834Z Downloaded bitstruct_derive v0.1.0
15972026-01-22T09:11:25.834Z Downloaded typeid v1.0.3
15982026-01-22T09:11:25.858Z Downloaded tap v1.0.1
15992026-01-22T09:11:25.858Z Downloaded radium v0.7.0
16002026-01-22T09:11:25.858Z Downloaded bitvec v1.0.1
16012026-01-22T09:11:25.882Z Downloaded num-bigint v0.4.6
16022026-01-22T09:11:25.882Z Downloaded libloading v0.7.4
16032026-01-22T09:11:26.216Z Checking num-integer v0.1.46
16042026-01-22T09:11:26.239Z Checking num-complex v0.4.6
16052026-01-22T09:11:26.283Z Compiling radium v0.7.0
16062026-01-22T09:11:26.307Z Checking tap v1.0.1
16072026-01-22T09:11:26.330Z Checking funty v2.0.0
16082026-01-22T09:11:26.354Z Compiling libdlpi-sys v0.1.0 (https://github.com/oxidecomputer/dlpi-sys?branch=main#555fa6e1)
16092026-01-22T09:11:26.354Z Compiling typeid v1.0.3
16102026-01-22T09:11:26.392Z Checking bhyve_api_sys v0.0.0 (https://github.com/oxidecomputer/propolis#827e6615)
16112026-01-22T09:11:26.584Z Checking wyz v0.5.1
16122026-01-22T09:11:26.789Z Checking num-bigint v0.4.6
16132026-01-22T09:11:26.826Z Checking num-iter v0.1.45
16142026-01-22T09:11:26.860Z Checking nvpair_sys v0.0.0 (https://github.com/oxidecomputer/propolis#827e6615)
16152026-01-22T09:11:26.987Z Compiling erased-serde v0.4.8
16162026-01-22T09:11:27.027Z Checking bhyve_api v0.0.0 (https://github.com/oxidecomputer/propolis#827e6615)
16172026-01-22T09:11:27.050Z Checking nvpair v0.0.0 (https://github.com/oxidecomputer/propolis#827e6615)
16182026-01-22T09:11:27.178Z Checking rgb_frame v0.0.0 (https://github.com/oxidecomputer/propolis#827e6615)
16192026-01-22T09:11:27.259Z Compiling bitstruct_derive v0.1.0
16202026-01-22T09:11:27.293Z Checking propolis_types v0.0.0 (https://github.com/oxidecomputer/propolis#827e6615)
16212026-01-22T09:11:27.317Z Checking bitvec v1.0.1
16222026-01-22T09:11:27.341Z Checking viona_api_sys v0.0.0 (https://github.com/oxidecomputer/propolis#827e6615)
16232026-01-22T09:11:27.365Z Checking ascii v1.1.0
16242026-01-22T09:11:27.429Z Checking dlpi v0.2.0 (https://github.com/oxidecomputer/dlpi-sys?branch=main#555fa6e1)
16252026-01-22T09:11:27.534Z Checking viona_api v0.0.0 (https://github.com/oxidecomputer/propolis#827e6615)
16262026-01-22T09:11:27.749Z Checking cpuid_utils v0.0.0 (https://github.com/oxidecomputer/propolis#827e6615)
16272026-01-22T09:11:27.773Z Checking p9ds v0.1.0 (https://github.com/oxidecomputer/p9fs#113f170a)
16282026-01-22T09:11:27.796Z Compiling asic v0.1.0 (/work/oxidecomputer/dendrite/asic)
16292026-01-22T09:11:27.820Z Checking rfb v0.0.0 (https://github.com/oxidecomputer/propolis#827e6615)
16302026-01-22T09:11:28.573Z Checking bitstruct v0.1.1
16312026-01-22T09:11:28.597Z Checking dladm v0.0.0 (https://github.com/oxidecomputer/propolis#827e6615)
16322026-01-22T09:11:28.621Z Checking serde_arrays v0.1.0
16332026-01-22T09:11:28.739Z Checking libloading v0.7.4
16342026-01-22T09:11:28.831Z Compiling dpd v0.2.0 (/work/oxidecomputer/dendrite/dpd)
16352026-01-22T09:11:29.013Z Checking num-rational v0.4.2
16362026-01-22T09:11:29.719Z Checking num v0.4.3
16372026-01-22T09:11:29.861Z Checking oximeter-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
16382026-01-22T09:11:30.926Z Checking p4rs v0.1.0 (https://github.com/oxidecomputer/p4?branch=main#c1343544)
16392026-01-22T09:11:31.595Z Checking softnpu v0.2.0 (https://github.com/oxidecomputer/softnpu#7e015d16)
16402026-01-22T09:11:31.595Z Checking softnpu v0.2.0 (https://github.com/oxidecomputer/softnpu?branch=main#7e015d16)
16412026-01-22T09:11:32.003Z Checking propolis v0.1.0 (https://github.com/oxidecomputer/propolis#827e6615)
16422026-01-22T09:11:33.051Z Checking oximeter-schema v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
16432026-01-22T09:11:33.051Z Checking oxql-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
16442026-01-22T09:11:34.144Z Checking oximeter v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
16452026-01-22T09:11:34.541Z Checking common v0.1.0 (/work/oxidecomputer/dendrite/common)
16462026-01-22T09:11:34.565Z Checking common v0.1.0 (https://github.com/oxidecomputer/dendrite?branch=main#606c0be8)
16472026-01-22T09:11:34.565Z Checking oximeter-instruments v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
16482026-01-22T09:11:34.678Z Checking oximeter-db v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
16492026-01-22T09:11:36.523Z Checking dpd-client v0.1.0 (https://github.com/oxidecomputer/dendrite?branch=main#606c0be8)
16502026-01-22T09:11:37.679Z Checking aal v0.1.0 (/work/oxidecomputer/dendrite/aal)
16512026-01-22T09:11:37.679Z Checking dpd-client v0.1.0 (/work/oxidecomputer/dendrite/dpd-client)
16522026-01-22T09:11:37.704Z Checking packet v0.1.0 (/work/oxidecomputer/dendrite/packet)
16532026-01-22T09:11:37.704Z Checking uplinkd v0.1.0 (/work/oxidecomputer/dendrite/uplinkd)
16542026-01-22T09:11:38.451Z Checking dpd-types v0.1.0 (/work/oxidecomputer/dendrite/dpd-types)
16552026-01-22T09:11:38.730Z Checking nexus-types v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
16562026-01-22T09:11:41.677Z Checking dpd-api v0.1.0 (/work/oxidecomputer/dendrite/dpd-api)
16572026-01-22T09:11:48.344Z Checking dendrite-dropshot-apis v0.1.0 (/work/oxidecomputer/dendrite/dropshot-apis)
16582026-01-22T09:11:50.682Z Checking lldpd-common v0.1.0 (https://github.com/oxidecomputer/lldp#5d121027)
16592026-01-22T09:11:50.966Z Checking lldpd-client v0.1.0 (https://github.com/oxidecomputer/lldp#5d121027)
16602026-01-22T09:11:57.172Z Checking swadm v0.1.0 (/work/oxidecomputer/dendrite/swadm)
16612026-01-22T09:12:08.347Z Checking nexus-client v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
16622026-01-22T09:12:11.725Z Checking oximeter-producer v0.1.0 (https://github.com/oxidecomputer/omicron?branch=main#c197cca8)
16632026-01-22T09:12:12.903Z Checking tfportd v0.1.0 (/work/oxidecomputer/dendrite/tfportd)
16642026-01-22T09:12:25.333Z Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 00s
16652026-01-22T09:12:25.543Z+ for feat in tofino_stub tofino_asic softnpu chaos
16662026-01-22T09:12:25.543Z+ cargo clippy --features chaos -- --deny warnings
16672026-01-22T09:12:26.890Z Compiling asic v0.1.0 (/work/oxidecomputer/dendrite/asic)
16682026-01-22T09:12:26.914Z Compiling dpd v0.2.0 (/work/oxidecomputer/dendrite/dpd)
16692026-01-22T09:12:26.914Z Checking dpd-client v0.1.0 (/work/oxidecomputer/dendrite/dpd-client)
16702026-01-22T09:12:45.301Z Checking tfportd v0.1.0 (/work/oxidecomputer/dendrite/tfportd)
16712026-01-22T09:12:45.326Z Checking swadm v0.1.0 (/work/oxidecomputer/dendrite/swadm)
16722026-01-22T09:12:51.417Z Finished `dev` profile [unoptimized + debuginfo] target(s) in 25.62s
16732026-01-22T09:12:51.601Z+ banner fmt
16742026-01-22T09:12:51.625Z
16752026-01-22T09:12:51.625Z ###### # # #####
16762026-01-22T09:12:51.625Z # ## ## #
16772026-01-22T09:12:51.625Z ##### # ## # #
16782026-01-22T09:12:51.625Z # # # #
16792026-01-22T09:12:51.626Z # # # #
16802026-01-22T09:12:51.626Z # # # #
16812026-01-22T09:12:51.626Z
16822026-01-22T09:12:51.626Z+ cargo fmt -- --check
16832026-01-22T09:12:52.383ZDiff in /work/oxidecomputer/dendrite/dpd/src/mcast/mod.rs:260:
16842026-01-22T09:12:52.383Z /// Returns a ScopedGroupId that will automatically return the ID to the
16852026-01-22T09:12:52.383Z /// free pool when dropped.
16862026-01-22T09:12:52.383Z fn generate_group_id(&mut self) -> DpdResult<ScopedGroupId> {
16872026-01-22T09:12:52.383Z- let mut pool = self
16882026-01-22T09:12:52.383Z- .free_group_ids
16892026-01-22T09:12:52.383Z- .lock()
16902026-01-22T09:12:52.383Z- .expect("group ID pool lock poisoned");
16912026-01-22T09:12:52.383Z+ let mut pool =
16922026-01-22T09:12:52.383Z+ self.free_group_ids.lock().expect("group ID pool lock poisoned");
16932026-01-22T09:12:52.383Z let id = pool.pop().ok_or_else(|| {
16942026-01-22T09:12:52.383Z DpdError::ResourceExhausted(
16952026-01-22T09:12:52.383Z "no free multicast group IDs available (exhausted range 100-65534)".to_string(),
16962026-01-22T09:12:52.383ZDiff in /work/oxidecomputer/dendrite/dpd/src/mcast/mod.rs:279:
16972026-01-22T09:12:52.383Z external_group_ip: IpAddr,
16982026-01-22T09:12:52.383Z admin_scoped_ip: UnderlayMulticastIpv6,
16992026-01-22T09:12:52.383Z ) {
17002026-01-22T09:12:52.383Z- self.nat_target_refs
17012026-01-22T09:12:52.383Z- .insert(admin_scoped_ip, external_group_ip);
17022026-01-22T09:12:52.383Z+ self.nat_target_refs.insert(admin_scoped_ip, external_group_ip);
17032026-01-22T09:12:52.383Z }
17042026-01-22T09:12:52.383Z
17052026-01-22T09:12:52.383Z /// Remove 1:1 forwarding reference.
17062026-01-22T09:12:52.383ZDiff in /work/oxidecomputer/dendrite/dpd/src/mcast/mod.rs:571:
17072026-01-22T09:12:52.383Z
17082026-01-22T09:12:52.384Z let group = mcast.groups.remove(&group_ip).unwrap();
17092026-01-22T09:12:52.384Z
17102026-01-22T09:12:52.384Z- let nat_target_to_remove = group
17112026-01-22T09:12:52.384Z- .int_fwding
17122026-01-22T09:12:52.384Z- .nat_target
17132026-01-22T09:12:52.384Z- .map(|nat| nat.internal_ip.into());
17142026-01-22T09:12:52.384Z+ let nat_target_to_remove =
17152026-01-22T09:12:52.384Z+ group.int_fwding.nat_target.map(|nat| nat.internal_ip.into());
17162026-01-22T09:12:52.384Z
17172026-01-22T09:12:52.384Z debug!(s.log, "deleting multicast group for IP {group_ip}");
17182026-01-22T09:12:52.384Z
17192026-01-22T09:12:52.384ZDiff in /work/oxidecomputer/dendrite/dpd/src/mcast/mod.rs:648:
17202026-01-22T09:12:52.384Z validate_tag(&existing_group.tag, tag)?;
17212026-01-22T09:12:52.384Z
17222026-01-22T09:12:52.384Z let nat_target =
17232026-01-22T09:12:52.384Z- new_group_info
17242026-01-22T09:12:52.384Z- .internal_forwarding
17252026-01-22T09:12:52.384Z- .nat_target
17262026-01-22T09:12:52.384Z- .ok_or_else(|| {
17272026-01-22T09:12:52.384Z- DpdError::Invalid(
17282026-01-22T09:12:52.384Z- "external groups must have NAT target".to_string(),
17292026-01-22T09:12:52.384Z- )
17302026-01-22T09:12:52.384Z- })?;
17312026-01-22T09:12:52.384Z+ new_group_info.internal_forwarding.nat_target.ok_or_else(|| {
17322026-01-22T09:12:52.384Z+ DpdError::Invalid(
17332026-01-22T09:12:52.384Z+ "external groups must have NAT target".to_string(),
17342026-01-22T09:12:52.384Z+ )
17352026-01-22T09:12:52.384Z+ })?;
17362026-01-22T09:12:52.384Z
17372026-01-22T09:12:52.384Z validate_multicast_address(group_ip, new_group_info.sources.as_deref())?;
17382026-01-22T09:12:52.384Z validate_nat_target(nat_target)?;
17392026-01-22T09:12:52.384ZDiff in /work/oxidecomputer/dendrite/dpd/src/mcast/mod.rs:1458:
17402026-01-22T09:12:52.384Z group_id: MulticastGroupId,
17412026-01-22T09:12:52.384Z group_ip: IpAddr,
17422026-01-22T09:12:52.384Z ) -> DpdResult<()> {
17432026-01-22T09:12:52.384Z- s.asic_hdl
17442026-01-22T09:12:52.385Z- .mc_group_create(group_id)
17452026-01-22T09:12:52.385Z- .map_err(|e: AsicError| {
17462026-01-22T09:12:52.385Z- DpdError::McastGroupFailure(format!(
17472026-01-22T09:12:52.385Z- "failed to create multicast group for IP {group_ip} with ID \
17482026-01-22T09:12:52.385Z+ s.asic_hdl.mc_group_create(group_id).map_err(|e: AsicError| {
17492026-01-22T09:12:52.385Z+ DpdError::McastGroupFailure(format!(
17502026-01-22T09:12:52.385Z+ "failed to create multicast group for IP {group_ip} with ID \
17512026-01-22T09:12:52.385Z {group_id}: {e:?}"
17522026-01-22T09:12:52.385Z- ))
17532026-01-22T09:12:52.385Z- })
17542026-01-22T09:12:52.385Z+ ))
17552026-01-22T09:12:52.385Z+ })
17562026-01-22T09:12:52.385Z }
17572026-01-22T09:12:52.385Z
17582026-01-22T09:12:52.385Z fn add_ports_to_groups(
17592026-01-22T09:12:52.385ZDiff in /work/oxidecomputer/dendrite/dpd/src/mcast/mod.rs:1514:
17602026-01-22T09:12:52.385Z ) -> DpdResult<(Vec<MulticastGroupMember>, Vec<MulticastGroupMember>)> {
17612026-01-22T09:12:52.385Z // First validate that IPv4 doesn't have underlay members
17622026-01-22T09:12:52.385Z if group_ip.is_ipv4()
17632026-01-22T09:12:52.385Z- && new_members
17642026-01-22T09:12:52.385Z- .iter()
17652026-01-22T09:12:52.385Z- .any(|m| m.direction == Direction::Underlay)
17662026-01-22T09:12:52.385Z+ && new_members.iter().any(|m| m.direction == Direction::Underlay)
17672026-01-22T09:12:52.385Z {
17682026-01-22T09:12:52.385Z return Err(DpdError::Invalid(format!(
17692026-01-22T09:12:52.385Z "multicast group for IPv4 {group_ip} cannot have underlay members"
17702026-01-22T09:12:52.385ZDiff in /work/oxidecomputer/dendrite/dpd/src/mcast/mod.rs:1716:
17712026-01-22T09:12:52.385Z
17722026-01-22T09:12:52.385Z // Update NAT target - external groups always have NAT targets
17732026-01-22T09:12:52.385Z // Also handles VLAN changes since VLAN is part of the NAT match key
17742026-01-22T09:12:52.385Z- let new_nat_target = new_group_info
17752026-01-22T09:12:52.385Z- .internal_forwarding
17762026-01-22T09:12:52.385Z- .nat_target
17772026-01-22T09:12:52.385Z- .ok_or_else(|| {
17782026-01-22T09:12:52.385Z+ let new_nat_target =
17792026-01-22T09:12:52.385Z+ new_group_info.internal_forwarding.nat_target.ok_or_else(|| {
17802026-01-22T09:12:52.385Z DpdError::Invalid(
17812026-01-22T09:12:52.386Z "external groups must have NAT target".to_string(),
17822026-01-22T09:12:52.386Z )
17832026-01-22T09:12:52.411ZDiff in /work/oxidecomputer/dendrite/dpd/src/mcast/rollback.rs:736:
17842026-01-22T09:12:52.411Z original_group: &'a MulticastGroup,
17852026-01-22T09:12:52.411Z attempted_vlan_id: Option<u16>,
17862026-01-22T09:12:52.412Z ) -> Self {
17872026-01-22T09:12:52.412Z- Self {
17882026-01-22T09:12:52.412Z- switch,
17892026-01-22T09:12:52.412Z- group_ip,
17902026-01-22T09:12:52.412Z- original_group,
17912026-01-22T09:12:52.412Z- attempted_vlan_id,
17922026-01-22T09:12:52.412Z- }
17932026-01-22T09:12:52.412Z+ Self { switch, group_ip, original_group, attempted_vlan_id }
17942026-01-22T09:12:52.412Z }
17952026-01-22T09:12:52.412Z
17962026-01-22T09:12:52.412Z /// Restore tables and return error.
17972026-01-22T09:12:52.412ZDiff in /work/oxidecomputer/dendrite/dpd/src/table/mcast/mcast_nat.rs:26:
17982026-01-22T09:12:52.412Z #[derive(ActionParse, Debug)]
17992026-01-22T09:12:52.412Z enum Ipv4Action {
18002026-01-22T09:12:52.412Z #[action_xlate(name = "mcast_forward_ipv4_to")]
18012026-01-22T09:12:52.412Z- Forward {
18022026-01-22T09:12:52.412Z- target: Ipv6Addr,
18032026-01-22T09:12:52.412Z- inner_mac: MacAddr,
18042026-01-22T09:12:52.412Z- vni: u32,
18052026-01-22T09:12:52.412Z- },
18062026-01-22T09:12:52.412Z+ Forward { target: Ipv6Addr, inner_mac: MacAddr, vni: u32 },
18072026-01-22T09:12:52.412Z }
18082026-01-22T09:12:52.412Z
18092026-01-22T09:12:52.412Z #[derive(ActionParse, Debug)]
18102026-01-22T09:12:52.412ZDiff in /work/oxidecomputer/dendrite/dpd/src/table/mcast/mcast_nat.rs:37:
18112026-01-22T09:12:52.412Z enum Ipv6Action {
18122026-01-22T09:12:52.412Z #[action_xlate(name = "mcast_forward_ipv6_to")]
18132026-01-22T09:12:52.412Z- Forward {
18142026-01-22T09:12:52.412Z- target: Ipv6Addr,
18152026-01-22T09:12:52.412Z- inner_mac: MacAddr,
18162026-01-22T09:12:52.412Z- vni: u32,
18172026-01-22T09:12:52.412Z- },
18182026-01-22T09:12:52.412Z+ Forward { target: Ipv6Addr, inner_mac: MacAddr, vni: u32 },
18192026-01-22T09:12:52.412Z }
18202026-01-22T09:12:52.412Z
18212026-01-22T09:12:52.412Z /// Add NAT entries for IPv4 multicast traffic.
18222026-01-22T09:12:52.412ZDiff in /work/oxidecomputer/dendrite/dpd/src/table/mcast/mcast_route.rs:92:
18232026-01-22T09:12:52.412Z }
18242026-01-22T09:12:52.413Z };
18252026-01-22T09:12:52.413Z
18262026-01-22T09:12:52.413Z- debug!(
18272026-01-22T09:12:52.413Z- s.log,
18282026-01-22T09:12:52.413Z- "update multicast route entry {match_key} -> {action:?}"
18292026-01-22T09:12:52.413Z- );
18302026-01-22T09:12:52.413Z+ debug!(s.log, "update multicast route entry {match_key} -> {action:?}");
18312026-01-22T09:12:52.413Z s.table_entry_update(TableType::RouteIpv4Mcast, &match_key, &action)
18322026-01-22T09:12:52.413Z }
18332026-01-22T09:12:52.413Z
18342026-01-22T09:12:52.413ZDiff in /work/oxidecomputer/dendrite/dpd/src/table/mcast/mcast_route.rs:188:
18352026-01-22T09:12:52.413Z }
18362026-01-22T09:12:52.413Z };
18372026-01-22T09:12:52.413Z
18382026-01-22T09:12:52.413Z- debug!(
18392026-01-22T09:12:52.413Z- s.log,
18402026-01-22T09:12:52.413Z- "update multicast route entry {match_key} -> {action:?}"
18412026-01-22T09:12:52.413Z- );
18422026-01-22T09:12:52.413Z+ debug!(s.log, "update multicast route entry {match_key} -> {action:?}");
18432026-01-22T09:12:52.413Z s.table_entry_update(TableType::RouteIpv6Mcast, &match_key, &action)
18442026-01-22T09:12:52.413Z }
18452026-01-22T09:12:52.413Z
18462026-01-22T09:12:52.413ZDiff in /work/oxidecomputer/dendrite/dpd/src/table/mcast/mod.rs:73:
18472026-01-22T09:12:52.413Z impl Ipv4VlanMatchKey {
18482026-01-22T09:12:52.413Z pub(super) fn new(dst_addr: Ipv4Addr, vlan_id: Option<u16>) -> Self {
18492026-01-22T09:12:52.413Z match vlan_id {
18502026-01-22T09:12:52.413Z- Some(id) => Self {
18512026-01-22T09:12:52.413Z- dst_addr,
18522026-01-22T09:12:52.413Z- vlan_valid: true,
18532026-01-22T09:12:52.413Z- vlan_id: id,
18542026-01-22T09:12:52.413Z- },
18552026-01-22T09:12:52.413Z- None => Self {
18562026-01-22T09:12:52.413Z- dst_addr,
18572026-01-22T09:12:52.414Z- vlan_valid: false,
18582026-01-22T09:12:52.414Z- vlan_id: 0,
18592026-01-22T09:12:52.414Z- },
18602026-01-22T09:12:52.414Z+ Some(id) => Self { dst_addr, vlan_valid: true, vlan_id: id },
18612026-01-22T09:12:52.414Z+ None => Self { dst_addr, vlan_valid: false, vlan_id: 0 },
18622026-01-22T09:12:52.414Z }
18632026-01-22T09:12:52.414Z }
18642026-01-22T09:12:52.414Z }
18652026-01-22T09:12:52.414ZDiff in /work/oxidecomputer/dendrite/dpd/src/table/mcast/mod.rs:114:
18662026-01-22T09:12:52.414Z impl Ipv6VlanMatchKey {
18672026-01-22T09:12:52.414Z pub(super) fn new(dst_addr: Ipv6Addr, vlan_id: Option<u16>) -> Self {
18682026-01-22T09:12:52.414Z match vlan_id {
18692026-01-22T09:12:52.414Z- Some(id) => Self {
18702026-01-22T09:12:52.414Z- dst_addr,
18712026-01-22T09:12:52.414Z- vlan_valid: true,
18722026-01-22T09:12:52.414Z- vlan_id: id,
18732026-01-22T09:12:52.414Z- },
18742026-01-22T09:12:52.414Z- None => Self {
18752026-01-22T09:12:52.414Z- dst_addr,
18762026-01-22T09:12:52.414Z- vlan_valid: false,
18772026-01-22T09:12:52.415Z- vlan_id: 0,
18782026-01-22T09:12:52.415Z- },
18792026-01-22T09:12:52.415Z+ Some(id) => Self { dst_addr, vlan_valid: true, vlan_id: id },
18802026-01-22T09:12:52.415Z+ None => Self { dst_addr, vlan_valid: false, vlan_id: 0 },
18812026-01-22T09:12:52.415Z }
18822026-01-22T09:12:52.415Z }
18832026-01-22T09:12:52.439Z }
18842026-01-22T09:12:53.008ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:55:
18852026-01-22T09:12:53.008Z
18862026-01-22T09:12:53.008Z /// Count table entries matching a specific IP address in any key field.
18872026-01-22T09:12:53.008Z fn count_entries_for_ip(entries: &[types::TableEntry], ip: &str) -> usize {
18882026-01-22T09:12:53.008Z- entries
18892026-01-22T09:12:53.008Z- .iter()
18902026-01-22T09:12:53.008Z- .filter(|e| e.keys.values().any(|v| v.contains(ip)))
18912026-01-22T09:12:53.008Z- .count()
18922026-01-22T09:12:53.008Z+ entries.iter().filter(|e| e.keys.values().any(|v| v.contains(ip))).count()
18932026-01-22T09:12:53.008Z }
18942026-01-22T09:12:53.008Z
18952026-01-22T09:12:53.008Z /// Check if any table entry for the given IP has a `forward_vlan` action with
18962026-01-22T09:12:53.008ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:292:
18972026-01-22T09:12:53.008Z match response {
18982026-01-22T09:12:53.008Z types::MulticastGroupResponse::Underlay { .. } => None,
18992026-01-22T09:12:53.008Z types::MulticastGroupResponse::External {
19002026-01-22T09:12:53.008Z- internal_forwarding,
19012026-01-22T09:12:53.008Z- ..
19022026-01-22T09:12:53.008Z+ internal_forwarding, ..
19032026-01-22T09:12:53.008Z } => internal_forwarding.nat_target.as_ref(),
19042026-01-22T09:12:53.008Z }
19052026-01-22T09:12:53.008Z }
19062026-01-22T09:12:53.008ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:418:
19072026-01-22T09:12:53.008Z encapped.deparse().unwrap().to_vec()
19082026-01-22T09:12:53.009Z };
19092026-01-22T09:12:53.009Z
19102026-01-22T09:12:53.009Z- let switch_port_mac = switch
19112026-01-22T09:12:53.009Z- .get_port_mac(switch_port.unwrap())
19122026-01-22T09:12:53.009Z- .unwrap()
19132026-01-22T09:12:53.009Z- .to_string();
19142026-01-22T09:12:53.009Z+ let switch_port_mac =
19152026-01-22T09:12:53.009Z+ switch.get_port_mac(switch_port.unwrap()).unwrap().to_string();
19162026-01-22T09:12:53.009Z
19172026-01-22T09:12:53.009Z let mut forward_pkt = common::gen_external_geneve_packet(
19182026-01-22T09:12:53.009Z Endpoint::parse(
19192026-01-22T09:12:53.009ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:668:
19202026-01-22T09:12:53.009Z );
19212026-01-22T09:12:53.009Z
19222026-01-22T09:12:53.009Z // Clean up external first (references internal via NAT target), then internal
19232026-01-22T09:12:53.009Z- cleanup_test_group(switch, created.group_ip, TEST_TAG)
19242026-01-22T09:12:53.009Z- .await
19252026-01-22T09:12:53.009Z- .unwrap();
19262026-01-22T09:12:53.009Z+ cleanup_test_group(switch, created.group_ip, TEST_TAG).await.unwrap();
19272026-01-22T09:12:53.009Z cleanup_test_group(switch, internal_multicast_ip, TEST_TAG).await
19282026-01-22T09:12:53.009Z }
19292026-01-22T09:12:53.009Z
19302026-01-22T09:12:53.009ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:963:
19312026-01-22T09:12:53.009Z .await
19322026-01-22T09:12:53.009Z .expect("Should be able to list groups");
19332026-01-22T09:12:53.009Z
19342026-01-22T09:12:53.009Z- let found_in_list = groups
19352026-01-22T09:12:53.009Z- .iter()
19362026-01-22T09:12:53.009Z- .any(|g| get_external_group_id(g) == external_group_id);
19372026-01-22T09:12:53.009Z+ let found_in_list =
19382026-01-22T09:12:53.009Z+ groups.iter().any(|g| get_external_group_id(g) == external_group_id);
19392026-01-22T09:12:53.009Z assert!(found_in_list, "Created group should be in the list");
19402026-01-22T09:12:53.009Z
19412026-01-22T09:12:53.009Z // Get groups by tag
19422026-01-22T09:12:53.009ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:976:
19432026-01-22T09:12:53.009Z .await
19442026-01-22T09:12:53.010Z .expect("Should be able to get groups by tag");
19452026-01-22T09:12:53.010Z
19462026-01-22T09:12:53.010Z- assert!(
19472026-01-22T09:12:53.010Z- !tagged_groups.is_empty(),
19482026-01-22T09:12:53.010Z- "Tagged group list should not be empty"
19492026-01-22T09:12:53.010Z- );
19502026-01-22T09:12:53.010Z+ assert!(!tagged_groups.is_empty(), "Tagged group list should not be empty");
19512026-01-22T09:12:53.010Z let found_by_tag = tagged_groups
19522026-01-22T09:12:53.010Z .iter()
19532026-01-22T09:12:53.010Z .any(|g| get_external_group_id(g) == external_group_id);
19542026-01-22T09:12:53.010ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:1079:
19552026-01-22T09:12:53.010Z .expect("Should be able to list groups");
19562026-01-22T09:12:53.010Z
19572026-01-22T09:12:53.010Z // Check if the specific deleted group is still in the list
19582026-01-22T09:12:53.010Z- let deleted_group_still_in_list = groups_after_delete
19592026-01-22T09:12:53.010Z- .iter()
19602026-01-22T09:12:53.010Z- .any(|g| get_group_ip(g) == group_ip);
19612026-01-22T09:12:53.010Z+ let deleted_group_still_in_list =
19622026-01-22T09:12:53.010Z+ groups_after_delete.iter().any(|g| get_group_ip(g) == group_ip);
19632026-01-22T09:12:53.010Z assert!(
19642026-01-22T09:12:53.010Z !deleted_group_still_in_list,
19652026-01-22T09:12:53.010Z "Deleted group should not be in the list"
19662026-01-22T09:12:53.010ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:1088:
19672026-01-22T09:12:53.010Z );
19682026-01-22T09:12:53.010Z
19692026-01-22T09:12:53.010Z // Clean up the internal group (external was already deleted above)
19702026-01-22T09:12:53.010Z- cleanup_test_group(switch, internal_multicast_ip, TEST_TAG)
19712026-01-22T09:12:53.010Z- .await
19722026-01-22T09:12:53.010Z- .unwrap();
19732026-01-22T09:12:53.010Z+ cleanup_test_group(switch, internal_multicast_ip, TEST_TAG).await.unwrap();
19742026-01-22T09:12:53.010Z }
19752026-01-22T09:12:53.010Z
19762026-01-22T09:12:53.010Z /// Tests tag validation behavior on multicast group deletion.
19772026-01-22T09:12:53.010ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:1137:
19782026-01-22T09:12:53.010Z
19792026-01-22T09:12:53.010Z // Attempt delete with wrong tag - should fail
19802026-01-22T09:12:53.011Z let del_tag = make_tag(TAG_B);
19812026-01-22T09:12:53.011Z- let wrong_tag_result = switch
19822026-01-22T09:12:53.011Z- .client
19832026-01-22T09:12:53.011Z- .multicast_group_delete(&tagged_group_ip, &del_tag)
19842026-01-22T09:12:53.037Z- .await;
19852026-01-22T09:12:53.037Z+ let wrong_tag_result =
19862026-01-22T09:12:53.037Z+ switch.client.multicast_group_delete(&tagged_group_ip, &del_tag).await;
19872026-01-22T09:12:53.037Z
19882026-01-22T09:12:53.037Z match &wrong_tag_result {
19892026-01-22T09:12:53.037Z Err(Error::ErrorResponse(resp)) => {
19902026-01-22T09:12:53.037ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:1209:
19912026-01-22T09:12:53.037Z .into_inner();
19922026-01-22T09:12:53.037Z
19932026-01-22T09:12:53.037Z // The group should have an auto-generated tag
19942026-01-22T09:12:53.037Z- assert!(
19952026-01-22T09:12:53.037Z- !created.tag.is_empty(),
19962026-01-22T09:12:53.037Z- "Group should have auto-generated tag"
19972026-01-22T09:12:53.037Z- );
19982026-01-22T09:12:53.037Z+ assert!(!created.tag.is_empty(), "Group should have auto-generated tag");
19992026-01-22T09:12:53.037Z let auto_tag = created.tag.clone();
20002026-01-22T09:12:53.037Z
20012026-01-22T09:12:53.037Z // Delete with correct auto-generated tag should succeed
20022026-01-22T09:12:53.037ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:1560:
20032026-01-22T09:12:53.037Z ),
20042026-01-22T09:12:53.037Z }
20052026-01-22T09:12:53.037Z
20062026-01-22T09:12:53.037Z- cleanup_test_group(switch, created_ipv4.group_ip, TEST_TAG)
20072026-01-22T09:12:53.037Z- .await
20082026-01-22T09:12:53.037Z- .unwrap();
20092026-01-22T09:12:53.037Z+ cleanup_test_group(switch, created_ipv4.group_ip, TEST_TAG).await.unwrap();
20102026-01-22T09:12:53.037Z cleanup_test_group(switch, created_non_admin.group_ip, TEST_TAG)
20112026-01-22T09:12:53.037Z .await
20122026-01-22T09:12:53.037Z .unwrap();
20132026-01-22T09:12:53.037ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:1638:
20142026-01-22T09:12:53.037Z // Generate packet with invalid MAC
20152026-01-22T09:12:53.037Z let to_send = common::gen_udp_packet(src_endpoint, dst_endpoint);
20162026-01-22T09:12:53.037Z
20172026-01-22T09:12:53.037Z- let test_pkt = TestPacket {
20182026-01-22T09:12:53.037Z- packet: Arc::new(to_send),
20192026-01-22T09:12:53.037Z- port: ingress,
20202026-01-22T09:12:53.038Z- };
20212026-01-22T09:12:53.038Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
20222026-01-22T09:12:53.038Z
20232026-01-22T09:12:53.038Z // Expect no output packets (invalid MAC should be dropped)
20242026-01-22T09:12:53.038Z let expected_pkts = vec![];
20252026-01-22T09:12:53.038ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:1648:
20262026-01-22T09:12:53.038Z
20272026-01-22T09:12:53.038Z- let ctr_baseline = switch
20282026-01-22T09:12:53.038Z- .get_counter("multicast_invalid_mac", None)
20292026-01-22T09:12:53.038Z- .await
20302026-01-22T09:12:53.038Z- .unwrap();
20312026-01-22T09:12:53.038Z+ let ctr_baseline =
20322026-01-22T09:12:53.038Z+ switch.get_counter("multicast_invalid_mac", None).await.unwrap();
20332026-01-22T09:12:53.038Z
20342026-01-22T09:12:53.038Z switch.packet_test(vec![test_pkt], expected_pkts).unwrap();
20352026-01-22T09:12:53.038Z
20362026-01-22T09:12:53.038ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:1714:
20372026-01-22T09:12:53.038Z // Generate packet with invalid MAC
20382026-01-22T09:12:53.038Z let to_send = common::gen_udp_packet(src_endpoint, dst_endpoint);
20392026-01-22T09:12:53.038Z
20402026-01-22T09:12:53.038Z- let test_pkt = TestPacket {
20412026-01-22T09:12:53.038Z- packet: Arc::new(to_send),
20422026-01-22T09:12:53.038Z- port: ingress,
20432026-01-22T09:12:53.038Z- };
20442026-01-22T09:12:53.038Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
20452026-01-22T09:12:53.038Z
20462026-01-22T09:12:53.038Z // Expect no output packets (invalid MAC should be dropped)
20472026-01-22T09:12:53.038Z let expected_pkts = vec![];
20482026-01-22T09:12:53.038ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:1724:
20492026-01-22T09:12:53.038Z
20502026-01-22T09:12:53.038Z- let ctr_baseline = switch
20512026-01-22T09:12:53.038Z- .get_counter("multicast_invalid_mac", None)
20522026-01-22T09:12:53.038Z- .await
20532026-01-22T09:12:53.038Z- .unwrap();
20542026-01-22T09:12:53.038Z+ let ctr_baseline =
20552026-01-22T09:12:53.038Z+ switch.get_counter("multicast_invalid_mac", None).await.unwrap();
20562026-01-22T09:12:53.038Z
20572026-01-22T09:12:53.039Z let port_label_ingress = switch.port_label(ingress).unwrap();
20582026-01-22T09:12:53.039Z
20592026-01-22T09:12:53.039ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:1816:
20602026-01-22T09:12:53.039Z // Set TTL to 0 (should be dropped)
20612026-01-22T09:12:53.039Z ipv4::Ipv4Hdr::adjust_ttl(&mut to_send, -255); // Set to 0
20622026-01-22T09:12:53.039Z
20632026-01-22T09:12:53.039Z- let test_pkt = TestPacket {
20642026-01-22T09:12:53.039Z- packet: Arc::new(to_send),
20652026-01-22T09:12:53.039Z- port: ingress,
20662026-01-22T09:12:53.039Z- };
20672026-01-22T09:12:53.039Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
20682026-01-22T09:12:53.039Z
20692026-01-22T09:12:53.039Z // Expect no output packets (should be dropped due to TTL=0)
20702026-01-22T09:12:53.039Z let expected_pkts = vec![];
20712026-01-22T09:12:53.039ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:1900:
20722026-01-22T09:12:53.039Z // because the switch decrements it to 0 during processing
20732026-01-22T09:12:53.039Z ipv4::Ipv4Hdr::adjust_ttl(&mut to_send, -254); // Set to 1
20742026-01-22T09:12:53.039Z
20752026-01-22T09:12:53.039Z- let test_pkt = TestPacket {
20762026-01-22T09:12:53.039Z- packet: Arc::new(to_send),
20772026-01-22T09:12:53.039Z- port: ingress,
20782026-01-22T09:12:53.039Z- };
20792026-01-22T09:12:53.039Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
20802026-01-22T09:12:53.039Z
20812026-01-22T09:12:53.039Z // Expect no output packets (should be dropped due to TTL=1)
20822026-01-22T09:12:53.039Z let expected_pkts = vec![];
20832026-01-22T09:12:53.039ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2026:
20842026-01-22T09:12:53.065Z Some(egress3),
20852026-01-22T09:12:53.065Z );
20862026-01-22T09:12:53.065Z
20872026-01-22T09:12:53.065Z- let test_pkt = TestPacket {
20882026-01-22T09:12:53.065Z- packet: Arc::new(to_send),
20892026-01-22T09:12:53.065Z- port: ingress,
20902026-01-22T09:12:53.065Z- };
20912026-01-22T09:12:53.065Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
20922026-01-22T09:12:53.065Z
20932026-01-22T09:12:53.065Z let expected_pkts = vec![
20942026-01-22T09:12:53.065Z- TestPacket {
20952026-01-22T09:12:53.065Z- packet: Arc::new(to_recv1),
20962026-01-22T09:12:53.065Z- port: egress1,
20972026-01-22T09:12:53.065Z- },
20982026-01-22T09:12:53.065Z- TestPacket {
20992026-01-22T09:12:53.065Z- packet: Arc::new(to_recv2),
21002026-01-22T09:12:53.065Z- port: egress3,
21012026-01-22T09:12:53.065Z- },
21022026-01-22T09:12:53.065Z+ TestPacket { packet: Arc::new(to_recv1), port: egress1 },
21032026-01-22T09:12:53.065Z+ TestPacket { packet: Arc::new(to_recv2), port: egress3 },
21042026-01-22T09:12:53.065Z ];
21052026-01-22T09:12:53.065Z
21062026-01-22T09:12:53.065Z let port_label_ingress = switch.port_label(ingress).unwrap();
21072026-01-22T09:12:53.065ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2046:
21082026-01-22T09:12:53.066Z
21092026-01-22T09:12:53.066Z- let ctr_baseline_ingress = switch
21102026-01-22T09:12:53.066Z- .get_counter(&port_label_ingress, Some("ingress"))
21112026-01-22T09:12:53.066Z- .await
21122026-01-22T09:12:53.066Z- .unwrap();
21132026-01-22T09:12:53.066Z+ let ctr_baseline_ingress =
21142026-01-22T09:12:53.066Z+ switch.get_counter(&port_label_ingress, Some("ingress")).await.unwrap();
21152026-01-22T09:12:53.066Z
21162026-01-22T09:12:53.066Z switch.packet_test(vec![test_pkt], expected_pkts).unwrap();
21172026-01-22T09:12:53.066Z
21182026-01-22T09:12:53.066ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2167:
21192026-01-22T09:12:53.066Z &payload,
21202026-01-22T09:12:53.066Z );
21212026-01-22T09:12:53.066Z
21222026-01-22T09:12:53.066Z- let test_pkt = TestPacket {
21232026-01-22T09:12:53.066Z- packet: Arc::new(geneve_pkt),
21242026-01-22T09:12:53.066Z- port: ingress,
21252026-01-22T09:12:53.066Z- };
21262026-01-22T09:12:53.066Z+ let test_pkt = TestPacket { packet: Arc::new(geneve_pkt), port: ingress };
21272026-01-22T09:12:53.066Z
21282026-01-22T09:12:53.066Z // We expect the packet to be decapsulated and forwarded to both egress
21292026-01-22T09:12:53.066Z // ports
21302026-01-22T09:12:53.066ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2177:
21312026-01-22T09:12:53.066Z let expected_pkts = vec![
21322026-01-22T09:12:53.066Z- TestPacket {
21332026-01-22T09:12:53.066Z- packet: Arc::new(expected_pkt1),
21342026-01-22T09:12:53.066Z- port: egress1,
21352026-01-22T09:12:53.066Z- },
21362026-01-22T09:12:53.066Z- TestPacket {
21372026-01-22T09:12:53.066Z- packet: Arc::new(expected_pkt2),
21382026-01-22T09:12:53.066Z- port: egress2,
21392026-01-22T09:12:53.066Z- },
21402026-01-22T09:12:53.066Z+ TestPacket { packet: Arc::new(expected_pkt1), port: egress1 },
21412026-01-22T09:12:53.066Z+ TestPacket { packet: Arc::new(expected_pkt2), port: egress2 },
21422026-01-22T09:12:53.066Z ];
21432026-01-22T09:12:53.066Z
21442026-01-22T09:12:53.067Z let port_label_ingress = switch.port_label(ingress).unwrap();
21452026-01-22T09:12:53.067ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2189:
21462026-01-22T09:12:53.067Z
21472026-01-22T09:12:53.067Z- let ctr_baseline_ingress = switch
21482026-01-22T09:12:53.067Z- .get_counter(&port_label_ingress, Some("ingress"))
21492026-01-22T09:12:53.067Z- .await
21502026-01-22T09:12:53.067Z- .unwrap();
21512026-01-22T09:12:53.067Z+ let ctr_baseline_ingress =
21522026-01-22T09:12:53.067Z+ switch.get_counter(&port_label_ingress, Some("ingress")).await.unwrap();
21532026-01-22T09:12:53.067Z
21542026-01-22T09:12:53.067Z switch.packet_test(vec![test_pkt], expected_pkts).unwrap();
21552026-01-22T09:12:53.067Z
21562026-01-22T09:12:53.067ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2300:
21572026-01-22T09:12:53.067Z &payload,
21582026-01-22T09:12:53.067Z );
21592026-01-22T09:12:53.067Z
21602026-01-22T09:12:53.067Z- let test_pkt = TestPacket {
21612026-01-22T09:12:53.067Z- packet: Arc::new(geneve_pkt.clone()),
21622026-01-22T09:12:53.067Z- port: ingress,
21632026-01-22T09:12:53.067Z- };
21642026-01-22T09:12:53.067Z+ let test_pkt =
21652026-01-22T09:12:53.067Z+ TestPacket { packet: Arc::new(geneve_pkt.clone()), port: ingress };
21662026-01-22T09:12:53.067Z
21672026-01-22T09:12:53.067Z // Vlan should be stripped and we only replicate to underlay ports
21682026-01-22T09:12:53.067Z let recv_pkt1 =
21692026-01-22T09:12:53.067ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2314:
21702026-01-22T09:12:53.067Z // We expect the packet not be decapped and forwarded to both egress
21712026-01-22T09:12:53.067Z // ports
21722026-01-22T09:12:53.067Z let expected_pkts = vec![
21732026-01-22T09:12:53.067Z- TestPacket {
21742026-01-22T09:12:53.067Z- packet: Arc::new(recv_pkt1),
21752026-01-22T09:12:53.067Z- port: egress3,
21762026-01-22T09:12:53.067Z- },
21772026-01-22T09:12:53.067Z- TestPacket {
21782026-01-22T09:12:53.067Z- packet: Arc::new(recv_pkt2),
21792026-01-22T09:12:53.067Z- port: egress4,
21802026-01-22T09:12:53.067Z- },
21812026-01-22T09:12:53.067Z+ TestPacket { packet: Arc::new(recv_pkt1), port: egress3 },
21822026-01-22T09:12:53.067Z+ TestPacket { packet: Arc::new(recv_pkt2), port: egress4 },
21832026-01-22T09:12:53.067Z ];
21842026-01-22T09:12:53.093Z
21852026-01-22T09:12:53.093Z let port_label_ingress = switch.port_label(ingress).unwrap();
21862026-01-22T09:12:53.093ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2328:
21872026-01-22T09:12:53.093Z
21882026-01-22T09:12:53.093Z- let ctr_baseline_ingress = switch
21892026-01-22T09:12:53.093Z- .get_counter(&port_label_ingress, Some("ingress"))
21902026-01-22T09:12:53.093Z- .await
21912026-01-22T09:12:53.093Z- .unwrap();
21922026-01-22T09:12:53.093Z+ let ctr_baseline_ingress =
21932026-01-22T09:12:53.093Z+ switch.get_counter(&port_label_ingress, Some("ingress")).await.unwrap();
21942026-01-22T09:12:53.093Z
21952026-01-22T09:12:53.093Z switch.packet_test(vec![test_pkt], expected_pkts).unwrap();
21962026-01-22T09:12:53.093Z
21972026-01-22T09:12:53.093ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2443:
21982026-01-22T09:12:53.093Z &payload,
21992026-01-22T09:12:53.093Z );
22002026-01-22T09:12:53.093Z
22012026-01-22T09:12:53.093Z- let test_pkt = TestPacket {
22022026-01-22T09:12:53.093Z- packet: Arc::new(geneve_pkt.clone()),
22032026-01-22T09:12:53.093Z- port: ingress,
22042026-01-22T09:12:53.093Z- };
22052026-01-22T09:12:53.094Z+ let test_pkt =
22062026-01-22T09:12:53.094Z+ TestPacket { packet: Arc::new(geneve_pkt.clone()), port: ingress };
22072026-01-22T09:12:53.094Z
22082026-01-22T09:12:53.094Z // External ports should be replicated with Vlan information
22092026-01-22T09:12:53.094Z let recv_pkt1 =
22102026-01-22T09:12:53.094ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2464:
22112026-01-22T09:12:53.094Z // We expect 2 packets to be decapped and forwarded to external ports
22122026-01-22T09:12:53.094Z // and 2 packets to be forwarded to underlay ports (still encapped)
22132026-01-22T09:12:53.094Z let expected_pkts = vec![
22142026-01-22T09:12:53.094Z- TestPacket {
22152026-01-22T09:12:53.094Z- packet: Arc::new(recv_pkt1),
22162026-01-22T09:12:53.094Z- port: egress1,
22172026-01-22T09:12:53.094Z- },
22182026-01-22T09:12:53.094Z- TestPacket {
22192026-01-22T09:12:53.094Z- packet: Arc::new(recv_pkt2),
22202026-01-22T09:12:53.094Z- port: egress2,
22212026-01-22T09:12:53.094Z- },
22222026-01-22T09:12:53.094Z- TestPacket {
22232026-01-22T09:12:53.094Z- packet: Arc::new(recv_pkt3),
22242026-01-22T09:12:53.094Z- port: egress3,
22252026-01-22T09:12:53.094Z- },
22262026-01-22T09:12:53.094Z- TestPacket {
22272026-01-22T09:12:53.094Z- packet: Arc::new(recv_pkt4),
22282026-01-22T09:12:53.094Z- port: egress4,
22292026-01-22T09:12:53.094Z- },
22302026-01-22T09:12:53.094Z+ TestPacket { packet: Arc::new(recv_pkt1), port: egress1 },
22312026-01-22T09:12:53.094Z+ TestPacket { packet: Arc::new(recv_pkt2), port: egress2 },
22322026-01-22T09:12:53.094Z+ TestPacket { packet: Arc::new(recv_pkt3), port: egress3 },
22332026-01-22T09:12:53.094Z+ TestPacket { packet: Arc::new(recv_pkt4), port: egress4 },
22342026-01-22T09:12:53.094Z ];
22352026-01-22T09:12:53.094Z
22362026-01-22T09:12:53.094Z let port_label_ingress = switch.port_label(ingress).unwrap();
22372026-01-22T09:12:53.094ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2486:
22382026-01-22T09:12:53.094Z
22392026-01-22T09:12:53.094Z- let ctr_baseline_ingress = switch
22402026-01-22T09:12:53.094Z- .get_counter(&port_label_ingress, Some("ingress"))
22412026-01-22T09:12:53.094Z- .await
22422026-01-22T09:12:53.095Z- .unwrap();
22432026-01-22T09:12:53.095Z+ let ctr_baseline_ingress =
22442026-01-22T09:12:53.095Z+ switch.get_counter(&port_label_ingress, Some("ingress")).await.unwrap();
22452026-01-22T09:12:53.095Z
22462026-01-22T09:12:53.095Z switch.packet_test(vec![test_pkt], expected_pkts).unwrap();
22472026-01-22T09:12:53.095Z
22482026-01-22T09:12:53.095ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2557:
22492026-01-22T09:12:53.095Z dst_port,
22502026-01-22T09:12:53.095Z );
22512026-01-22T09:12:53.095Z
22522026-01-22T09:12:53.095Z- let test_pkt = TestPacket {
22532026-01-22T09:12:53.095Z- packet: Arc::new(to_send),
22542026-01-22T09:12:53.095Z- port: ingress,
22552026-01-22T09:12:53.095Z- };
22562026-01-22T09:12:53.095Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
22572026-01-22T09:12:53.095Z
22582026-01-22T09:12:53.096Z let expected_pkts = vec![];
22592026-01-22T09:12:53.096Z
22602026-01-22T09:12:53.096ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2567:
22612026-01-22T09:12:53.096Z let port_label_ingress = switch.port_label(ingress).unwrap();
22622026-01-22T09:12:53.096Z
22632026-01-22T09:12:53.096Z- let ctr_baseline_ingress = switch
22642026-01-22T09:12:53.096Z- .get_counter(&port_label_ingress, Some("ingress"))
22652026-01-22T09:12:53.096Z- .await
22662026-01-22T09:12:53.096Z- .unwrap();
22672026-01-22T09:12:53.096Z+ let ctr_baseline_ingress =
22682026-01-22T09:12:53.096Z+ switch.get_counter(&port_label_ingress, Some("ingress")).await.unwrap();
22692026-01-22T09:12:53.096Z
22702026-01-22T09:12:53.096Z switch.packet_test(vec![test_pkt], expected_pkts).unwrap();
22712026-01-22T09:12:53.096Z
22722026-01-22T09:12:53.096ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2644:
22732026-01-22T09:12:53.096Z // Set Hop Limit to 0 (should be dropped)
22742026-01-22T09:12:53.096Z ipv6::Ipv6Hdr::adjust_hlim(&mut to_send, -255); // Set to 0
22752026-01-22T09:12:53.096Z
22762026-01-22T09:12:53.097Z- let test_pkt = TestPacket {
22772026-01-22T09:12:53.097Z- packet: Arc::new(to_send),
22782026-01-22T09:12:53.097Z- port: ingress,
22792026-01-22T09:12:53.097Z- };
22802026-01-22T09:12:53.097Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
22812026-01-22T09:12:53.097Z
22822026-01-22T09:12:53.097Z // Expect no output packets (should be dropped due to Hop Limit=0)
22832026-01-22T09:12:53.097Z let expected_pkts = vec![];
22842026-01-22T09:12:53.122ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2732:
22852026-01-22T09:12:53.122Z // because the switch decrements it to 0 during processing
22862026-01-22T09:12:53.122Z ipv6::Ipv6Hdr::adjust_hlim(&mut to_send, -254); // Set to 1 (255 - 254 = 1)
22872026-01-22T09:12:53.122Z
22882026-01-22T09:12:53.122Z- let test_pkt = TestPacket {
22892026-01-22T09:12:53.122Z- packet: Arc::new(to_send),
22902026-01-22T09:12:53.122Z- port: ingress,
22912026-01-22T09:12:53.122Z- };
22922026-01-22T09:12:53.122Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
22932026-01-22T09:12:53.122Z
22942026-01-22T09:12:53.122Z // Expect no output packets (should be dropped due to Hop Limit=1)
22952026-01-22T09:12:53.122Z let expected_pkts = vec![];
22962026-01-22T09:12:53.122ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2830:
22972026-01-22T09:12:53.122Z Some(egress1),
22982026-01-22T09:12:53.122Z );
22992026-01-22T09:12:53.122Z
23002026-01-22T09:12:53.122Z- let test_pkt = TestPacket {
23012026-01-22T09:12:53.122Z- packet: Arc::new(to_send),
23022026-01-22T09:12:53.123Z- port: ingress,
23032026-01-22T09:12:53.123Z- };
23042026-01-22T09:12:53.123Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
23052026-01-22T09:12:53.123Z
23062026-01-22T09:12:53.123Z- let expected_pkts = vec![TestPacket {
23072026-01-22T09:12:53.123Z- packet: Arc::new(to_recv1),
23082026-01-22T09:12:53.123Z- port: egress1,
23092026-01-22T09:12:53.123Z- }];
23102026-01-22T09:12:53.123Z+ let expected_pkts =
23112026-01-22T09:12:53.123Z+ vec![TestPacket { packet: Arc::new(to_recv1), port: egress1 }];
23122026-01-22T09:12:53.123Z
23132026-01-22T09:12:53.123Z let port_label_ingress = switch.port_label(ingress).unwrap();
23142026-01-22T09:12:53.123Z
23152026-01-22T09:12:53.123ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2845:
23162026-01-22T09:12:53.123Z- let ctr_baseline_ingress = switch
23172026-01-22T09:12:53.123Z- .get_counter(&port_label_ingress, Some("ingress"))
23182026-01-22T09:12:53.123Z- .await
23192026-01-22T09:12:53.123Z- .unwrap();
23202026-01-22T09:12:53.123Z+ let ctr_baseline_ingress =
23212026-01-22T09:12:53.123Z+ switch.get_counter(&port_label_ingress, Some("ingress")).await.unwrap();
23222026-01-22T09:12:53.123Z
23232026-01-22T09:12:53.123Z switch.packet_test(vec![test_pkt], expected_pkts).unwrap();
23242026-01-22T09:12:53.123Z
23252026-01-22T09:12:53.123ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2949:
23262026-01-22T09:12:53.123Z );
23272026-01-22T09:12:53.123Z
23282026-01-22T09:12:53.123Z let test_pkts = vec![
23292026-01-22T09:12:53.123Z- TestPacket {
23302026-01-22T09:12:53.123Z- packet: Arc::new(allowed_pkt),
23312026-01-22T09:12:53.123Z- port: ingress1,
23322026-01-22T09:12:53.123Z- },
23332026-01-22T09:12:53.123Z- TestPacket {
23342026-01-22T09:12:53.123Z- packet: Arc::new(filtered_pkt),
23352026-01-22T09:12:53.123Z- port: ingress2,
23362026-01-22T09:12:53.123Z- },
23372026-01-22T09:12:53.123Z+ TestPacket { packet: Arc::new(allowed_pkt), port: ingress1 },
23382026-01-22T09:12:53.124Z+ TestPacket { packet: Arc::new(filtered_pkt), port: ingress2 },
23392026-01-22T09:12:53.124Z ];
23402026-01-22T09:12:53.124Z
23412026-01-22T09:12:53.124Z // Only expect packets from the allowed source
23422026-01-22T09:12:53.124ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:2963:
23432026-01-22T09:12:53.124Z let expected_pkts = vec![
23442026-01-22T09:12:53.124Z- TestPacket {
23452026-01-22T09:12:53.124Z- packet: Arc::new(to_recv11),
23462026-01-22T09:12:53.124Z- port: egress1,
23472026-01-22T09:12:53.124Z- },
23482026-01-22T09:12:53.124Z- TestPacket {
23492026-01-22T09:12:53.124Z- packet: Arc::new(to_recv12),
23502026-01-22T09:12:53.124Z- port: egress2,
23512026-01-22T09:12:53.124Z- },
23522026-01-22T09:12:53.124Z+ TestPacket { packet: Arc::new(to_recv11), port: egress1 },
23532026-01-22T09:12:53.124Z+ TestPacket { packet: Arc::new(to_recv12), port: egress2 },
23542026-01-22T09:12:53.124Z ];
23552026-01-22T09:12:53.124Z
23562026-01-22T09:12:53.124Z- let ctr_baseline = switch
23572026-01-22T09:12:53.124Z- .get_counter("multicast_src_filtered", None)
23582026-01-22T09:12:53.124Z- .await
23592026-01-22T09:12:53.124Z- .unwrap();
23602026-01-22T09:12:53.124Z+ let ctr_baseline =
23612026-01-22T09:12:53.124Z+ switch.get_counter("multicast_src_filtered", None).await.unwrap();
23622026-01-22T09:12:53.124Z
23632026-01-22T09:12:53.124Z switch.packet_test(test_pkts, expected_pkts).unwrap();
23642026-01-22T09:12:53.124Z
23652026-01-22T09:12:53.124ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:3109:
23662026-01-22T09:12:53.124Z );
23672026-01-22T09:12:53.124Z
23682026-01-22T09:12:53.124Z let test_pkts = vec![
23692026-01-22T09:12:53.124Z- TestPacket {
23702026-01-22T09:12:53.124Z- packet: Arc::new(allowed_pkt1),
23712026-01-22T09:12:53.124Z- port: ingress1,
23722026-01-22T09:12:53.124Z- },
23732026-01-22T09:12:53.124Z- TestPacket {
23742026-01-22T09:12:53.124Z- packet: Arc::new(allowed_pkt2),
23752026-01-22T09:12:53.124Z- port: ingress2,
23762026-01-22T09:12:53.124Z- },
23772026-01-22T09:12:53.124Z- TestPacket {
23782026-01-22T09:12:53.125Z- packet: Arc::new(filtered_pkt),
23792026-01-22T09:12:53.125Z- port: ingress2,
23802026-01-22T09:12:53.125Z- },
23812026-01-22T09:12:53.125Z+ TestPacket { packet: Arc::new(allowed_pkt1), port: ingress1 },
23822026-01-22T09:12:53.125Z+ TestPacket { packet: Arc::new(allowed_pkt2), port: ingress2 },
23832026-01-22T09:12:53.125Z+ TestPacket { packet: Arc::new(filtered_pkt), port: ingress2 },
23842026-01-22T09:12:53.150Z ];
23852026-01-22T09:12:53.150Z
23862026-01-22T09:12:53.150Z // Only expect packets from the allowed sources
23872026-01-22T09:12:53.150ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:3127:
23882026-01-22T09:12:53.150Z let expected_pkts = vec![
23892026-01-22T09:12:53.150Z- TestPacket {
23902026-01-22T09:12:53.150Z- packet: Arc::new(to_recv11),
23912026-01-22T09:12:53.150Z- port: egress1,
23922026-01-22T09:12:53.150Z- },
23932026-01-22T09:12:53.150Z- TestPacket {
23942026-01-22T09:12:53.150Z- packet: Arc::new(to_recv22),
23952026-01-22T09:12:53.150Z- port: egress2,
23962026-01-22T09:12:53.150Z- },
23972026-01-22T09:12:53.150Z- TestPacket {
23982026-01-22T09:12:53.150Z- packet: Arc::new(to_recv12),
23992026-01-22T09:12:53.150Z- port: egress2,
24002026-01-22T09:12:53.150Z- },
24012026-01-22T09:12:53.151Z- TestPacket {
24022026-01-22T09:12:53.151Z- packet: Arc::new(to_recv21),
24032026-01-22T09:12:53.151Z- port: egress1,
24042026-01-22T09:12:53.151Z- },
24052026-01-22T09:12:53.151Z+ TestPacket { packet: Arc::new(to_recv11), port: egress1 },
24062026-01-22T09:12:53.151Z+ TestPacket { packet: Arc::new(to_recv22), port: egress2 },
24072026-01-22T09:12:53.151Z+ TestPacket { packet: Arc::new(to_recv12), port: egress2 },
24082026-01-22T09:12:53.151Z+ TestPacket { packet: Arc::new(to_recv21), port: egress1 },
24092026-01-22T09:12:53.151Z ];
24102026-01-22T09:12:53.151Z
24112026-01-22T09:12:53.151Z- let ctr_baseline = switch
24122026-01-22T09:12:53.151Z- .get_counter("multicast_src_filtered", None)
24132026-01-22T09:12:53.151Z- .await
24142026-01-22T09:12:53.151Z- .unwrap();
24152026-01-22T09:12:53.151Z+ let ctr_baseline =
24162026-01-22T09:12:53.151Z+ switch.get_counter("multicast_src_filtered", None).await.unwrap();
24172026-01-22T09:12:53.151Z
24182026-01-22T09:12:53.151Z switch.packet_test(test_pkts, expected_pkts).unwrap();
24192026-01-22T09:12:53.151Z
24202026-01-22T09:12:53.151ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:3281:
24212026-01-22T09:12:53.151Z );
24222026-01-22T09:12:53.151Z
24232026-01-22T09:12:53.151Z let test_pkts = vec![
24242026-01-22T09:12:53.151Z- TestPacket {
24252026-01-22T09:12:53.151Z- packet: Arc::new(allowed_pkt1),
24262026-01-22T09:12:53.151Z- port: ingress1,
24272026-01-22T09:12:53.151Z- },
24282026-01-22T09:12:53.151Z- TestPacket {
24292026-01-22T09:12:53.151Z- packet: Arc::new(allowed_pkt2),
24302026-01-22T09:12:53.151Z- port: ingress2,
24312026-01-22T09:12:53.151Z- },
24322026-01-22T09:12:53.151Z- TestPacket {
24332026-01-22T09:12:53.151Z- packet: Arc::new(filtered_pkt),
24342026-01-22T09:12:53.151Z- port: ingress3,
24352026-01-22T09:12:53.151Z- },
24362026-01-22T09:12:53.151Z+ TestPacket { packet: Arc::new(allowed_pkt1), port: ingress1 },
24372026-01-22T09:12:53.151Z+ TestPacket { packet: Arc::new(allowed_pkt2), port: ingress2 },
24382026-01-22T09:12:53.152Z+ TestPacket { packet: Arc::new(filtered_pkt), port: ingress3 },
24392026-01-22T09:12:53.152Z ];
24402026-01-22T09:12:53.152Z
24412026-01-22T09:12:53.152Z // Only expect packets from the allowed sources
24422026-01-22T09:12:53.152ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:3299:
24432026-01-22T09:12:53.152Z let expected_pkts = vec![
24442026-01-22T09:12:53.152Z // First allowed source
24452026-01-22T09:12:53.152Z- TestPacket {
24462026-01-22T09:12:53.152Z- packet: Arc::new(to_recv11),
24472026-01-22T09:12:53.152Z- port: egress1,
24482026-01-22T09:12:53.152Z- },
24492026-01-22T09:12:53.152Z- TestPacket {
24502026-01-22T09:12:53.152Z- packet: Arc::new(to_recv12),
24512026-01-22T09:12:53.152Z- port: egress2,
24522026-01-22T09:12:53.152Z- },
24532026-01-22T09:12:53.152Z+ TestPacket { packet: Arc::new(to_recv11), port: egress1 },
24542026-01-22T09:12:53.152Z+ TestPacket { packet: Arc::new(to_recv12), port: egress2 },
24552026-01-22T09:12:53.152Z // Second allowed source
24562026-01-22T09:12:53.152Z- TestPacket {
24572026-01-22T09:12:53.152Z- packet: Arc::new(to_recv21),
24582026-01-22T09:12:53.152Z- port: egress1,
24592026-01-22T09:12:53.152Z- },
24602026-01-22T09:12:53.152Z- TestPacket {
24612026-01-22T09:12:53.152Z- packet: Arc::new(to_recv22),
24622026-01-22T09:12:53.152Z- port: egress2,
24632026-01-22T09:12:53.152Z- },
24642026-01-22T09:12:53.152Z+ TestPacket { packet: Arc::new(to_recv21), port: egress1 },
24652026-01-22T09:12:53.152Z+ TestPacket { packet: Arc::new(to_recv22), port: egress2 },
24662026-01-22T09:12:53.152Z ];
24672026-01-22T09:12:53.152Z
24682026-01-22T09:12:53.152Z- let ctr_baseline = switch
24692026-01-22T09:12:53.153Z- .get_counter("multicast_src_filtered", None)
24702026-01-22T09:12:53.153Z- .await
24712026-01-22T09:12:53.153Z- .unwrap();
24722026-01-22T09:12:53.153Z+ let ctr_baseline =
24732026-01-22T09:12:53.153Z+ switch.get_counter("multicast_src_filtered", None).await.unwrap();
24742026-01-22T09:12:53.153Z
24752026-01-22T09:12:53.153Z switch.packet_test(test_pkts, expected_pkts).unwrap();
24762026-01-22T09:12:53.153Z
24772026-01-22T09:12:53.153ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:3410:
24782026-01-22T09:12:53.153Z Some(egress2),
24792026-01-22T09:12:53.153Z );
24802026-01-22T09:12:53.153Z
24812026-01-22T09:12:53.153Z- let test_pkt = TestPacket {
24822026-01-22T09:12:53.153Z- packet: Arc::new(to_send.clone()),
24832026-01-22T09:12:53.153Z- port: ingress,
24842026-01-22T09:12:53.179Z- };
24852026-01-22T09:12:53.179Z+ let test_pkt =
24862026-01-22T09:12:53.179Z+ TestPacket { packet: Arc::new(to_send.clone()), port: ingress };
24872026-01-22T09:12:53.179Z
24882026-01-22T09:12:53.179Z let expected_pkts = vec![
24892026-01-22T09:12:53.179Z- TestPacket {
24902026-01-22T09:12:53.179Z- packet: Arc::new(to_recv1),
24912026-01-22T09:12:53.179Z- port: egress1,
24922026-01-22T09:12:53.179Z- },
24932026-01-22T09:12:53.179Z- TestPacket {
24942026-01-22T09:12:53.179Z- packet: Arc::new(to_recv2),
24952026-01-22T09:12:53.179Z- port: egress2,
24962026-01-22T09:12:53.179Z- },
24972026-01-22T09:12:53.179Z+ TestPacket { packet: Arc::new(to_recv1), port: egress1 },
24982026-01-22T09:12:53.180Z+ TestPacket { packet: Arc::new(to_recv2), port: egress2 },
24992026-01-22T09:12:53.180Z ];
25002026-01-22T09:12:53.180Z
25012026-01-22T09:12:53.180Z let result1 = switch.packet_test(vec![test_pkt], expected_pkts);
25022026-01-22T09:12:53.180ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:3501:
25032026-01-22T09:12:53.180Z Some(egress3),
25042026-01-22T09:12:53.180Z );
25052026-01-22T09:12:53.180Z
25062026-01-22T09:12:53.180Z- let test_pkt_new = TestPacket {
25072026-01-22T09:12:53.180Z- packet: Arc::new(to_send),
25082026-01-22T09:12:53.180Z- port: ingress,
25092026-01-22T09:12:53.180Z- };
25102026-01-22T09:12:53.180Z+ let test_pkt_new = TestPacket { packet: Arc::new(to_send), port: ingress };
25112026-01-22T09:12:53.180Z
25122026-01-22T09:12:53.180Z let expected_pkts_new = vec![
25132026-01-22T09:12:53.180Z- TestPacket {
25142026-01-22T09:12:53.180Z- packet: Arc::new(to_recv1_new),
25152026-01-22T09:12:53.180Z- port: egress2,
25162026-01-22T09:12:53.180Z- },
25172026-01-22T09:12:53.180Z- TestPacket {
25182026-01-22T09:12:53.180Z- packet: Arc::new(to_recv2_new),
25192026-01-22T09:12:53.180Z- port: egress3,
25202026-01-22T09:12:53.180Z- },
25212026-01-22T09:12:53.180Z+ TestPacket { packet: Arc::new(to_recv1_new), port: egress2 },
25222026-01-22T09:12:53.180Z+ TestPacket { packet: Arc::new(to_recv2_new), port: egress3 },
25232026-01-22T09:12:53.180Z ];
25242026-01-22T09:12:53.180Z
25252026-01-22T09:12:53.180Z- switch
25262026-01-22T09:12:53.181Z- .packet_test(vec![test_pkt_new], expected_pkts_new)
25272026-01-22T09:12:53.181Z- .unwrap();
25282026-01-22T09:12:53.181Z+ switch.packet_test(vec![test_pkt_new], expected_pkts_new).unwrap();
25292026-01-22T09:12:53.181Z
25302026-01-22T09:12:53.181Z cleanup_test_group(switch, get_group_ip(&created_group), TEST_TAG)
25312026-01-22T09:12:53.181Z .await
25322026-01-22T09:12:53.181ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:3675:
25332026-01-22T09:12:53.181Z );
25342026-01-22T09:12:53.181Z
25352026-01-22T09:12:53.181Z let test_pkts = vec![
25362026-01-22T09:12:53.181Z- TestPacket {
25372026-01-22T09:12:53.181Z- packet: Arc::new(to_send1),
25382026-01-22T09:12:53.181Z- port: ingress,
25392026-01-22T09:12:53.181Z- },
25402026-01-22T09:12:53.181Z- TestPacket {
25412026-01-22T09:12:53.182Z- packet: Arc::new(to_send2),
25422026-01-22T09:12:53.182Z- port: ingress,
25432026-01-22T09:12:53.182Z- },
25442026-01-22T09:12:53.182Z+ TestPacket { packet: Arc::new(to_send1), port: ingress },
25452026-01-22T09:12:53.182Z+ TestPacket { packet: Arc::new(to_send2), port: ingress },
25462026-01-22T09:12:53.182Z ];
25472026-01-22T09:12:53.182Z
25482026-01-22T09:12:53.182Z let expected_pkts = vec![
25492026-01-22T09:12:53.182ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:3689:
25502026-01-22T09:12:53.182Z // First multicast group - replicates to all ports since both groups share same NAT target
25512026-01-22T09:12:53.182Z- TestPacket {
25522026-01-22T09:12:53.182Z- packet: Arc::new(to_recv1_1),
25532026-01-22T09:12:53.182Z- port: egress1,
25542026-01-22T09:12:53.182Z- },
25552026-01-22T09:12:53.182Z- TestPacket {
25562026-01-22T09:12:53.182Z- packet: Arc::new(to_recv1_2),
25572026-01-22T09:12:53.183Z- port: egress2,
25582026-01-22T09:12:53.183Z- },
25592026-01-22T09:12:53.183Z- TestPacket {
25602026-01-22T09:12:53.183Z- packet: Arc::new(to_recv1_3),
25612026-01-22T09:12:53.183Z- port: egress3,
25622026-01-22T09:12:53.183Z- },
25632026-01-22T09:12:53.183Z- TestPacket {
25642026-01-22T09:12:53.183Z- packet: Arc::new(to_recv1_4),
25652026-01-22T09:12:53.183Z- port: egress4,
25662026-01-22T09:12:53.183Z- },
25672026-01-22T09:12:53.183Z+ TestPacket { packet: Arc::new(to_recv1_1), port: egress1 },
25682026-01-22T09:12:53.183Z+ TestPacket { packet: Arc::new(to_recv1_2), port: egress2 },
25692026-01-22T09:12:53.183Z+ TestPacket { packet: Arc::new(to_recv1_3), port: egress3 },
25702026-01-22T09:12:53.183Z+ TestPacket { packet: Arc::new(to_recv1_4), port: egress4 },
25712026-01-22T09:12:53.183Z // Second multicast group - also replicates to all ports
25722026-01-22T09:12:53.183Z- TestPacket {
25732026-01-22T09:12:53.183Z- packet: Arc::new(to_recv2_3),
25742026-01-22T09:12:53.183Z- port: egress1,
25752026-01-22T09:12:53.183Z- },
25762026-01-22T09:12:53.183Z- TestPacket {
25772026-01-22T09:12:53.183Z- packet: Arc::new(to_recv2_4),
25782026-01-22T09:12:53.183Z- port: egress2,
25792026-01-22T09:12:53.183Z- },
25802026-01-22T09:12:53.183Z- TestPacket {
25812026-01-22T09:12:53.184Z- packet: Arc::new(to_recv2_1),
25822026-01-22T09:12:53.184Z- port: egress3,
25832026-01-22T09:12:53.184Z- },
25842026-01-22T09:12:53.209Z- TestPacket {
25852026-01-22T09:12:53.209Z- packet: Arc::new(to_recv2_2),
25862026-01-22T09:12:53.209Z- port: egress4,
25872026-01-22T09:12:53.209Z- },
25882026-01-22T09:12:53.209Z+ TestPacket { packet: Arc::new(to_recv2_3), port: egress1 },
25892026-01-22T09:12:53.209Z+ TestPacket { packet: Arc::new(to_recv2_4), port: egress2 },
25902026-01-22T09:12:53.209Z+ TestPacket { packet: Arc::new(to_recv2_1), port: egress3 },
25912026-01-22T09:12:53.209Z+ TestPacket { packet: Arc::new(to_recv2_2), port: egress4 },
25922026-01-22T09:12:53.209Z ];
25932026-01-22T09:12:53.209Z
25942026-01-22T09:12:53.209Z switch.packet_test(test_pkts, expected_pkts).unwrap();
25952026-01-22T09:12:53.209ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4031:
25962026-01-22T09:12:53.209Z .await
25972026-01-22T09:12:53.209Z .expect("Should be able to list groups");
25982026-01-22T09:12:53.209Z
25992026-01-22T09:12:53.209Z- assert!(
26002026-01-22T09:12:53.209Z- groups_after.is_empty(),
26012026-01-22T09:12:53.209Z- "No groups should exist after reset"
26022026-01-22T09:12:53.209Z- );
26032026-01-22T09:12:53.209Z+ assert!(groups_after.is_empty(), "No groups should exist after reset");
26042026-01-22T09:12:53.209Z
26052026-01-22T09:12:53.210Z // Try to get each group specifically
26062026-01-22T09:12:53.210Z for group_ip in [
26072026-01-22T09:12:53.210ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4090:
26082026-01-22T09:12:53.210Z types::InternalForwarding {
26092026-01-22T09:12:53.210Z nat_target: Some(create_nat_target_ipv4()),
26102026-01-22T09:12:53.210Z }, // Create NAT target
26112026-01-22T09:12:53.210Z- types::ExternalForwarding {
26122026-01-22T09:12:53.210Z- vlan_id: output_vlan,
26132026-01-22T09:12:53.210Z- },
26142026-01-22T09:12:53.210Z+ types::ExternalForwarding { vlan_id: output_vlan },
26152026-01-22T09:12:53.210Z None,
26162026-01-22T09:12:53.210Z )
26172026-01-22T09:12:53.210Z .await;
26182026-01-22T09:12:53.210ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4110:
26192026-01-22T09:12:53.210Z );
26202026-01-22T09:12:53.210Z
26212026-01-22T09:12:53.210Z // Add input VLAN tag
26222026-01-22T09:12:53.210Z- to_send.hdrs.eth_hdr.as_mut().unwrap().eth_8021q = Some(eth::EthQHdr {
26232026-01-22T09:12:53.210Z- eth_pcp: 0,
26242026-01-22T09:12:53.210Z- eth_dei: 0,
26252026-01-22T09:12:53.210Z- eth_vlan_tag: input_vlan,
26262026-01-22T09:12:53.210Z- });
26272026-01-22T09:12:53.210Z+ to_send.hdrs.eth_hdr.as_mut().unwrap().eth_8021q =
26282026-01-22T09:12:53.210Z+ Some(eth::EthQHdr { eth_pcp: 0, eth_dei: 0, eth_vlan_tag: input_vlan });
26292026-01-22T09:12:53.210Z
26302026-01-22T09:12:53.210Z- let test_pkt = TestPacket {
26312026-01-22T09:12:53.211Z- packet: Arc::new(to_send),
26322026-01-22T09:12:53.211Z- port: ingress,
26332026-01-22T09:12:53.211Z- };
26342026-01-22T09:12:53.211Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
26352026-01-22T09:12:53.212Z
26362026-01-22T09:12:53.212Z // Expect NO packets - this test demonstrates that VLAN translation
26372026-01-22T09:12:53.212Z // is not possible for multicast packets
26382026-01-22T09:12:53.212ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4223:
26392026-01-22T09:12:53.212Z Some(egress3),
26402026-01-22T09:12:53.212Z );
26412026-01-22T09:12:53.212Z
26422026-01-22T09:12:53.212Z- test_pkts.push(TestPacket {
26432026-01-22T09:12:53.212Z- packet: Arc::new(to_send),
26442026-01-22T09:12:53.212Z- port: ingress,
26452026-01-22T09:12:53.212Z- });
26462026-01-22T09:12:53.212Z+ test_pkts.push(TestPacket { packet: Arc::new(to_send), port: ingress });
26472026-01-22T09:12:53.212Z
26482026-01-22T09:12:53.212Z- expected_pkts.push(TestPacket {
26492026-01-22T09:12:53.212Z- packet: Arc::new(to_recv1),
26502026-01-22T09:12:53.212Z- port: egress1,
26512026-01-22T09:12:53.212Z- });
26522026-01-22T09:12:53.212Z- expected_pkts.push(TestPacket {
26532026-01-22T09:12:53.212Z- packet: Arc::new(to_recv2),
26542026-01-22T09:12:53.212Z- port: egress2,
26552026-01-22T09:12:53.212Z- });
26562026-01-22T09:12:53.212Z- expected_pkts.push(TestPacket {
26572026-01-22T09:12:53.212Z- packet: Arc::new(to_recv3),
26582026-01-22T09:12:53.212Z- port: egress3,
26592026-01-22T09:12:53.212Z- });
26602026-01-22T09:12:53.212Z+ expected_pkts
26612026-01-22T09:12:53.212Z+ .push(TestPacket { packet: Arc::new(to_recv1), port: egress1 });
26622026-01-22T09:12:53.213Z+ expected_pkts
26632026-01-22T09:12:53.213Z+ .push(TestPacket { packet: Arc::new(to_recv2), port: egress2 });
26642026-01-22T09:12:53.213Z+ expected_pkts
26652026-01-22T09:12:53.213Z+ .push(TestPacket { packet: Arc::new(to_recv3), port: egress3 });
26662026-01-22T09:12:53.213Z }
26672026-01-22T09:12:53.213Z
26682026-01-22T09:12:53.213Z let port_label_ingress = switch.port_label(ingress).unwrap();
26692026-01-22T09:12:53.213ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4246:
26702026-01-22T09:12:53.213Z
26712026-01-22T09:12:53.213Z- let ctr_baseline_ingress = switch
26722026-01-22T09:12:53.213Z- .get_counter(&port_label_ingress, Some("ingress"))
26732026-01-22T09:12:53.213Z- .await
26742026-01-22T09:12:53.213Z- .unwrap();
26752026-01-22T09:12:53.213Z+ let ctr_baseline_ingress =
26762026-01-22T09:12:53.213Z+ switch.get_counter(&port_label_ingress, Some("ingress")).await.unwrap();
26772026-01-22T09:12:53.213Z
26782026-01-22T09:12:53.213Z switch.packet_test(test_pkts, expected_pkts).unwrap();
26792026-01-22T09:12:53.213Z
26802026-01-22T09:12:53.213ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4283:
26812026-01-22T09:12:53.213Z let src_mac = switch.get_port_mac(ingress).unwrap();
26822026-01-22T09:12:53.213Z
26832026-01-22T09:12:53.213Z // Get baseline counter before any test packets
26842026-01-22T09:12:53.238Z- let initial_ctr_baseline = switch
26852026-01-22T09:12:53.238Z- .get_counter("multicast_no_group", None)
26862026-01-22T09:12:53.238Z- .await
26872026-01-22T09:12:53.238Z- .unwrap();
26882026-01-22T09:12:53.238Z+ let initial_ctr_baseline =
26892026-01-22T09:12:53.238Z+ switch.get_counter("multicast_no_group", None).await.unwrap();
26902026-01-22T09:12:53.239Z
26912026-01-22T09:12:53.239Z // Test IPv4 multicast with no configured group
26922026-01-22T09:12:53.239Z {
26932026-01-22T09:12:53.239ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4298:
26942026-01-22T09:12:53.239Z 4444,
26952026-01-22T09:12:53.239Z );
26962026-01-22T09:12:53.239Z
26972026-01-22T09:12:53.239Z- let test_pkt = TestPacket {
26982026-01-22T09:12:53.239Z- packet: Arc::new(to_send),
26992026-01-22T09:12:53.239Z- port: ingress,
27002026-01-22T09:12:53.239Z- };
27012026-01-22T09:12:53.239Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
27022026-01-22T09:12:53.239Z
27032026-01-22T09:12:53.239Z let expected_pkts = vec![];
27042026-01-22T09:12:53.239Z
27052026-01-22T09:12:53.239ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4331:
27062026-01-22T09:12:53.239Z 4444,
27072026-01-22T09:12:53.239Z );
27082026-01-22T09:12:53.239Z
27092026-01-22T09:12:53.239Z- let test_pkt = TestPacket {
27102026-01-22T09:12:53.239Z- packet: Arc::new(to_send),
27112026-01-22T09:12:53.239Z- port: ingress,
27122026-01-22T09:12:53.239Z- };
27132026-01-22T09:12:53.239Z+ let test_pkt = TestPacket { packet: Arc::new(to_send), port: ingress };
27142026-01-22T09:12:53.239Z
27152026-01-22T09:12:53.239Z // Expect no output packets - should be dropped
27162026-01-22T09:12:53.239Z let expected_pkts = vec![];
27172026-01-22T09:12:53.239ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4496:
27182026-01-22T09:12:53.239Z }],
27192026-01-22T09:12:53.239Z };
27202026-01-22T09:12:53.239Z
27212026-01-22T09:12:53.239Z- let admin_local_result = switch
27222026-01-22T09:12:53.239Z- .client
27232026-01-22T09:12:53.239Z- .multicast_group_create_underlay(&admin_local_group)
27242026-01-22T09:12:53.239Z- .await;
27252026-01-22T09:12:53.239Z+ let admin_local_result =
27262026-01-22T09:12:53.239Z+ switch.client.multicast_group_create_underlay(&admin_local_group).await;
27272026-01-22T09:12:53.239Z assert!(
27282026-01-22T09:12:53.240Z admin_local_result.is_ok(),
27292026-01-22T09:12:53.240Z "Admin-local scope (ff04::/16) should work with internal API"
27302026-01-22T09:12:53.240ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4516:
27312026-01-22T09:12:53.240Z }],
27322026-01-22T09:12:53.240Z };
27332026-01-22T09:12:53.240Z
27342026-01-22T09:12:53.240Z- let site_local_result = switch
27352026-01-22T09:12:53.240Z- .client
27362026-01-22T09:12:53.240Z- .multicast_group_create_underlay(&site_local_group)
27372026-01-22T09:12:53.240Z- .await;
27382026-01-22T09:12:53.240Z+ let site_local_result =
27392026-01-22T09:12:53.240Z+ switch.client.multicast_group_create_underlay(&site_local_group).await;
27402026-01-22T09:12:53.240Z assert!(
27412026-01-22T09:12:53.240Z site_local_result.is_err(),
27422026-01-22T09:12:53.240Z "Site-local scope (ff05::/16) should be rejected - only admin-local (ff04) allowed"
27432026-01-22T09:12:53.240ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4536:
27442026-01-22T09:12:53.240Z }],
27452026-01-22T09:12:53.240Z };
27462026-01-22T09:12:53.240Z
27472026-01-22T09:12:53.240Z- let org_local_result = switch
27482026-01-22T09:12:53.240Z- .client
27492026-01-22T09:12:53.240Z- .multicast_group_create_underlay(&org_local_group)
27502026-01-22T09:12:53.240Z- .await;
27512026-01-22T09:12:53.240Z+ let org_local_result =
27522026-01-22T09:12:53.240Z+ switch.client.multicast_group_create_underlay(&org_local_group).await;
27532026-01-22T09:12:53.240Z assert!(
27542026-01-22T09:12:53.240Z org_local_result.is_err(),
27552026-01-22T09:12:53.240Z "Organization-local scope (ff08::/16) should be rejected - only admin-local (ff04) allowed"
27562026-01-22T09:12:53.240ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4672:
27572026-01-22T09:12:53.240Z )
27582026-01-22T09:12:53.240Z .await;
27592026-01-22T09:12:53.240Z
27602026-01-22T09:12:53.240Z- assert_ne!(
27612026-01-22T09:12:53.240Z- get_external_group_id(&group1),
27622026-01-22T09:12:53.240Z- get_external_group_id(&group2)
27632026-01-22T09:12:53.240Z- );
27642026-01-22T09:12:53.240Z+ assert_ne!(get_external_group_id(&group1), get_external_group_id(&group2));
27652026-01-22T09:12:53.240Z
27662026-01-22T09:12:53.240Z // Delete the first group
27672026-01-22T09:12:53.241Z let del_tag = make_tag(TEST_TAG);
27682026-01-22T09:12:53.241ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4693:
27692026-01-22T09:12:53.241Z .await
27702026-01-22T09:12:53.241Z .expect("Should be able to list groups");
27712026-01-22T09:12:53.241Z assert!(
27722026-01-22T09:12:53.241Z- !groups_after_delete1
27732026-01-22T09:12:53.241Z- .iter()
27742026-01-22T09:12:53.241Z- .any(|g| get_group_ip(g) == group1_ip),
27752026-01-22T09:12:53.241Z+ !groups_after_delete1.iter().any(|g| get_group_ip(g) == group1_ip),
27762026-01-22T09:12:53.241Z "Group1 should be deleted"
27772026-01-22T09:12:53.241Z );
27782026-01-22T09:12:53.241Z
27792026-01-22T09:12:53.241ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4735:
27802026-01-22T09:12:53.241Z .await
27812026-01-22T09:12:53.241Z .expect("Should be able to list groups");
27822026-01-22T09:12:53.241Z assert!(
27832026-01-22T09:12:53.241Z- !groups_after_delete2
27842026-01-22T09:12:53.267Z- .iter()
27852026-01-22T09:12:53.267Z- .any(|g| get_group_ip(g) == group2_ip),
27862026-01-22T09:12:53.267Z+ !groups_after_delete2.iter().any(|g| get_group_ip(g) == group2_ip),
27872026-01-22T09:12:53.267Z "Group2 should be deleted"
27882026-01-22T09:12:53.267Z );
27892026-01-22T09:12:53.267Z
27902026-01-22T09:12:53.267ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4761:
27912026-01-22T09:12:53.267Z "Fourth group should reuse Group2's underlay ID due to LIFO recycling"
27922026-01-22T09:12:53.267Z );
27932026-01-22T09:12:53.267Z
27942026-01-22T09:12:53.267Z- cleanup_test_group(switch, group3_ip, TEST_TAG)
27952026-01-22T09:12:53.267Z- .await
27962026-01-22T09:12:53.267Z- .unwrap();
27972026-01-22T09:12:53.267Z+ cleanup_test_group(switch, group3_ip, TEST_TAG).await.unwrap();
27982026-01-22T09:12:53.267Z cleanup_test_group(switch, group4_ip, TEST_TAG).await
27992026-01-22T09:12:53.267Z }
28002026-01-22T09:12:53.268Z
28012026-01-22T09:12:53.268ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4836:
28022026-01-22T09:12:53.268Z .expect("Should find the created external group");
28032026-01-22T09:12:53.268Z
28042026-01-22T09:12:53.268Z assert!(
28052026-01-22T09:12:53.268Z- get_members(internal_group)
28062026-01-22T09:12:53.268Z- .map(|m| m.is_empty())
28072026-01-22T09:12:53.268Z- .unwrap_or(true),
28082026-01-22T09:12:53.268Z+ get_members(internal_group).map(|m| m.is_empty()).unwrap_or(true),
28092026-01-22T09:12:53.268Z "Empty internal group should have no members initially"
28102026-01-22T09:12:53.268Z );
28112026-01-22T09:12:53.268Z assert!(
28122026-01-22T09:12:53.268ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4845:
28132026-01-22T09:12:53.268Z- get_members(external_group)
28142026-01-22T09:12:53.268Z- .map(|m| m.is_empty())
28152026-01-22T09:12:53.268Z- .unwrap_or(true),
28162026-01-22T09:12:53.268Z+ get_members(external_group).map(|m| m.is_empty()).unwrap_or(true),
28172026-01-22T09:12:53.268Z "Empty external group should have no members initially"
28182026-01-22T09:12:53.268Z );
28192026-01-22T09:12:53.268Z
28202026-01-22T09:12:53.268ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:4887:
28212026-01-22T09:12:53.268Z &payload,
28222026-01-22T09:12:53.268Z );
28232026-01-22T09:12:53.268Z
28242026-01-22T09:12:53.268Z- let send = TestPacket {
28252026-01-22T09:12:53.269Z- packet: Arc::new(geneve_pkt.clone()),
28262026-01-22T09:12:53.269Z- port: ingress_port,
28272026-01-22T09:12:53.269Z- };
28282026-01-22T09:12:53.269Z+ let send =
28292026-01-22T09:12:53.269Z+ TestPacket { packet: Arc::new(geneve_pkt.clone()), port: ingress_port };
28302026-01-22T09:12:53.269Z
28312026-01-22T09:12:53.269Z // Verify no packets are replicated when group is empty
28322026-01-22T09:12:53.269Z switch.packet_test(vec![send], Vec::new())?;
28332026-01-22T09:12:53.269ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5034:
28342026-01-22T09:12:53.269Z Some(egress3),
28352026-01-22T09:12:53.269Z );
28362026-01-22T09:12:53.269Z
28372026-01-22T09:12:53.269Z- let send_again = TestPacket {
28382026-01-22T09:12:53.269Z- packet: Arc::new(to_send_again),
28392026-01-22T09:12:53.269Z- port: ingress_port,
28402026-01-22T09:12:53.269Z- };
28412026-01-22T09:12:53.269Z+ let send_again =
28422026-01-22T09:12:53.269Z+ TestPacket { packet: Arc::new(to_send_again), port: ingress_port };
28432026-01-22T09:12:53.269Z
28442026-01-22T09:12:53.269Z let expected_pkts = vec![
28452026-01-22T09:12:53.269Z- TestPacket {
28462026-01-22T09:12:53.269Z- packet: Arc::new(expected1),
28472026-01-22T09:12:53.269Z- port: egress1,
28482026-01-22T09:12:53.269Z- },
28492026-01-22T09:12:53.269Z- TestPacket {
28502026-01-22T09:12:53.269Z- packet: Arc::new(expected2),
28512026-01-22T09:12:53.269Z- port: egress2,
28522026-01-22T09:12:53.269Z- },
28532026-01-22T09:12:53.269Z- TestPacket {
28542026-01-22T09:12:53.269Z- packet: Arc::new(expected3),
28552026-01-22T09:12:53.269Z- port: egress3,
28562026-01-22T09:12:53.269Z- },
28572026-01-22T09:12:53.269Z+ TestPacket { packet: Arc::new(expected1), port: egress1 },
28582026-01-22T09:12:53.269Z+ TestPacket { packet: Arc::new(expected2), port: egress2 },
28592026-01-22T09:12:53.269Z+ TestPacket { packet: Arc::new(expected3), port: egress3 },
28602026-01-22T09:12:53.269Z ];
28612026-01-22T09:12:53.269Z
28622026-01-22T09:12:53.269Z // Verify packets are now replicated to all 3 members (2 external + 1 underlay)
28632026-01-22T09:12:53.270ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5121:
28642026-01-22T09:12:53.270Z "Bitmap table should be empty again when group has no members"
28652026-01-22T09:12:53.270Z );
28662026-01-22T09:12:53.270Z
28672026-01-22T09:12:53.270Z- let send_final = TestPacket {
28682026-01-22T09:12:53.270Z- packet: Arc::new(to_send_final),
28692026-01-22T09:12:53.270Z- port: ingress_port,
28702026-01-22T09:12:53.270Z- };
28712026-01-22T09:12:53.270Z+ let send_final =
28722026-01-22T09:12:53.270Z+ TestPacket { packet: Arc::new(to_send_final), port: ingress_port };
28732026-01-22T09:12:53.270Z
28742026-01-22T09:12:53.270Z // Should only see packet on ingress, no replication to egress ports
28752026-01-22T09:12:53.270Z let expected_final = vec![];
28762026-01-22T09:12:53.270ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5131:
28772026-01-22T09:12:53.270Z
28782026-01-22T09:12:53.270Z switch.packet_test(vec![send_final], expected_final)?;
28792026-01-22T09:12:53.270Z
28802026-01-22T09:12:53.270Z- cleanup_test_group(&switch, external_group_ip, TEST_TAG)
28812026-01-22T09:12:53.270Z- .await
28822026-01-22T09:12:53.270Z- .unwrap();
28832026-01-22T09:12:53.270Z+ cleanup_test_group(&switch, external_group_ip, TEST_TAG).await.unwrap();
28842026-01-22T09:12:53.295Z cleanup_test_group(&switch, internal_group_ip, TEST_TAG).await
28852026-01-22T09:12:53.296Z }
28862026-01-22T09:12:53.296Z
28872026-01-22T09:12:53.296ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5203:
28882026-01-22T09:12:53.296Z .expect("Should find the created external group");
28892026-01-22T09:12:53.296Z
28902026-01-22T09:12:53.296Z assert!(
28912026-01-22T09:12:53.296Z- get_members(internal_group)
28922026-01-22T09:12:53.296Z- .map(|m| m.is_empty())
28932026-01-22T09:12:53.296Z- .unwrap_or(true),
28942026-01-22T09:12:53.296Z+ get_members(internal_group).map(|m| m.is_empty()).unwrap_or(true),
28952026-01-22T09:12:53.296Z "Empty internal group should have no members initially"
28962026-01-22T09:12:53.296Z );
28972026-01-22T09:12:53.296Z assert!(
28982026-01-22T09:12:53.296ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5212:
28992026-01-22T09:12:53.296Z- get_members(external_group)
29002026-01-22T09:12:53.296Z- .map(|m| m.is_empty())
29012026-01-22T09:12:53.296Z- .unwrap_or(true),
29022026-01-22T09:12:53.296Z+ get_members(external_group).map(|m| m.is_empty()).unwrap_or(true),
29032026-01-22T09:12:53.296Z "Empty external group should have no members initially"
29042026-01-22T09:12:53.296Z );
29052026-01-22T09:12:53.296Z
29062026-01-22T09:12:53.296ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5254:
29072026-01-22T09:12:53.296Z &payload,
29082026-01-22T09:12:53.296Z );
29092026-01-22T09:12:53.296Z
29102026-01-22T09:12:53.296Z- let send = TestPacket {
29112026-01-22T09:12:53.296Z- packet: Arc::new(geneve_pkt.clone()),
29122026-01-22T09:12:53.296Z- port: ingress_port,
29132026-01-22T09:12:53.296Z- };
29142026-01-22T09:12:53.296Z+ let send =
29152026-01-22T09:12:53.296Z+ TestPacket { packet: Arc::new(geneve_pkt.clone()), port: ingress_port };
29162026-01-22T09:12:53.296Z
29172026-01-22T09:12:53.296Z // Verify no packets are replicated when group is empty
29182026-01-22T09:12:53.296Z switch.packet_test(vec![send], Vec::new())?;
29192026-01-22T09:12:53.296ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5400:
29202026-01-22T09:12:53.296Z Some(egress3),
29212026-01-22T09:12:53.296Z );
29222026-01-22T09:12:53.296Z
29232026-01-22T09:12:53.297Z- let send_again = TestPacket {
29242026-01-22T09:12:53.297Z- packet: Arc::new(test_packet2),
29252026-01-22T09:12:53.297Z- port: ingress_port,
29262026-01-22T09:12:53.297Z- };
29272026-01-22T09:12:53.297Z+ let send_again =
29282026-01-22T09:12:53.297Z+ TestPacket { packet: Arc::new(test_packet2), port: ingress_port };
29292026-01-22T09:12:53.297Z
29302026-01-22T09:12:53.297Z let expected_pkts = vec![
29312026-01-22T09:12:53.297Z- TestPacket {
29322026-01-22T09:12:53.297Z- packet: Arc::new(expected1),
29332026-01-22T09:12:53.297Z- port: egress1,
29342026-01-22T09:12:53.297Z- },
29352026-01-22T09:12:53.297Z- TestPacket {
29362026-01-22T09:12:53.297Z- packet: Arc::new(expected2),
29372026-01-22T09:12:53.297Z- port: egress2,
29382026-01-22T09:12:53.297Z- },
29392026-01-22T09:12:53.297Z- TestPacket {
29402026-01-22T09:12:53.297Z- packet: Arc::new(expected3),
29412026-01-22T09:12:53.297Z- port: egress3,
29422026-01-22T09:12:53.297Z- },
29432026-01-22T09:12:53.297Z+ TestPacket { packet: Arc::new(expected1), port: egress1 },
29442026-01-22T09:12:53.297Z+ TestPacket { packet: Arc::new(expected2), port: egress2 },
29452026-01-22T09:12:53.297Z+ TestPacket { packet: Arc::new(expected3), port: egress3 },
29462026-01-22T09:12:53.297Z ];
29472026-01-22T09:12:53.297Z
29482026-01-22T09:12:53.297Z // Verify packets are now replicated to all 3 members via NAT target
29492026-01-22T09:12:53.297ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5488:
29502026-01-22T09:12:53.297Z );
29512026-01-22T09:12:53.297Z
29522026-01-22T09:12:53.297Z // Test: Send packet again - should now only reach ingress (no replication)
29532026-01-22T09:12:53.297Z- let send_final = TestPacket {
29542026-01-22T09:12:53.297Z- packet: Arc::new(to_send_final),
29552026-01-22T09:12:53.297Z- port: ingress_port,
29562026-01-22T09:12:53.297Z- };
29572026-01-22T09:12:53.297Z+ let send_final =
29582026-01-22T09:12:53.297Z+ TestPacket { packet: Arc::new(to_send_final), port: ingress_port };
29592026-01-22T09:12:53.297Z
29602026-01-22T09:12:53.297Z // Should only see packet on ingress, no replication to egress ports
29612026-01-22T09:12:53.297Z let expected_final = vec![];
29622026-01-22T09:12:53.298ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5498:
29632026-01-22T09:12:53.298Z
29642026-01-22T09:12:53.298Z switch.packet_test(vec![send_final], expected_final)?;
29652026-01-22T09:12:53.298Z
29662026-01-22T09:12:53.298Z- cleanup_test_group(&switch, external_group_ip, TEST_TAG)
29672026-01-22T09:12:53.298Z- .await
29682026-01-22T09:12:53.298Z- .unwrap();
29692026-01-22T09:12:53.298Z+ cleanup_test_group(&switch, external_group_ip, TEST_TAG).await.unwrap();
29702026-01-22T09:12:53.298Z cleanup_test_group(&switch, internal_group_ip, TEST_TAG).await
29712026-01-22T09:12:53.298Z }
29722026-01-22T09:12:53.298Z
29732026-01-22T09:12:53.298ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5587:
29742026-01-22T09:12:53.298Z };
29752026-01-22T09:12:53.298Z
29762026-01-22T09:12:53.298Z // This should fail and trigger rollback
29772026-01-22T09:12:53.298Z- let result = switch
29782026-01-22T09:12:53.298Z- .client
29792026-01-22T09:12:53.298Z- .multicast_group_create_external(&external_entry)
29802026-01-22T09:12:53.298Z- .await;
29812026-01-22T09:12:53.298Z+ let result =
29822026-01-22T09:12:53.298Z+ switch.client.multicast_group_create_external(&external_entry).await;
29832026-01-22T09:12:53.298Z
29842026-01-22T09:12:53.323Z // Verify the creation failed
29852026-01-22T09:12:53.323Z- assert!(
29862026-01-22T09:12:53.323Z- result.is_err(),
29872026-01-22T09:12:53.323Z- "External group creation should have failed"
29882026-01-22T09:12:53.323Z- );
29892026-01-22T09:12:53.323Z+ assert!(result.is_err(), "External group creation should have failed");
29902026-01-22T09:12:53.323Z
29912026-01-22T09:12:53.323Z // Verify rollback worked - check that no state was left behind
29922026-01-22T09:12:53.323Z
29932026-01-22T09:12:53.323ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5705:
29942026-01-22T09:12:53.323Z .multicast_group_get(&internal_group_ip)
29952026-01-22T09:12:53.323Z .await
29962026-01-22T09:12:53.323Z .expect("Should be able to get initial group state");
29972026-01-22T09:12:53.323Z- let initial_member_count = get_members(&initial_group.into_inner())
29982026-01-22T09:12:53.323Z- .map(|m| m.len())
29992026-01-22T09:12:53.323Z- .unwrap_or(0);
30002026-01-22T09:12:53.323Z+ let initial_member_count =
30012026-01-22T09:12:53.323Z+ get_members(&initial_group.into_inner()).map(|m| m.len()).unwrap_or(0);
30022026-01-22T09:12:53.323Z
30032026-01-22T09:12:53.323Z // Try to add a member that should cause ASIC operations to fail
30042026-01-22T09:12:53.323Z // Use a valid port but with an invalid link ID that should cause issues
30052026-01-22T09:12:53.323ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5718:
30062026-01-22T09:12:53.324Z direction: types::Direction::External,
30072026-01-22T09:12:53.324Z }];
30082026-01-22T09:12:53.324Z
30092026-01-22T09:12:53.324Z- let update_request = types::MulticastGroupUpdateUnderlayEntry {
30102026-01-22T09:12:53.324Z- members: invalid_members,
30112026-01-22T09:12:53.324Z- };
30122026-01-22T09:12:53.324Z+ let update_request =
30132026-01-22T09:12:53.324Z+ types::MulticastGroupUpdateUnderlayEntry { members: invalid_members };
30142026-01-22T09:12:53.324Z
30152026-01-22T09:12:53.324Z let ipv6_update = types::UnderlayMulticastIpv6(match internal_group_ip {
30162026-01-22T09:12:53.324Z IpAddr::V6(ipv6) => ipv6,
30172026-01-22T09:12:53.324ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5749:
30182026-01-22T09:12:53.324Z .into_inner();
30192026-01-22T09:12:53.324Z
30202026-01-22T09:12:53.324Z assert_eq!(
30212026-01-22T09:12:53.324Z- get_members(&post_failure_group)
30222026-01-22T09:12:53.324Z- .map(|m| m.len())
30232026-01-22T09:12:53.324Z- .unwrap_or(0),
30242026-01-22T09:12:53.324Z+ get_members(&post_failure_group).map(|m| m.len()).unwrap_or(0),
30252026-01-22T09:12:53.324Z initial_member_count,
30262026-01-22T09:12:53.324Z "Member count should be unchanged after rollback"
30272026-01-22T09:12:53.324Z );
30282026-01-22T09:12:53.324ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5853:
30292026-01-22T09:12:53.324Z assert!(result.is_err(), "NAT update should have failed");
30302026-01-22T09:12:53.324Z
30312026-01-22T09:12:53.324Z // Verify rollback worked - external group should be unchanged
30322026-01-22T09:12:53.324Z- let post_failure_external_group = switch
30332026-01-22T09:12:53.324Z- .client
30342026-01-22T09:12:53.324Z- .multicast_group_get(&external_group_ip)
30352026-01-22T09:12:53.324Z- .await
30362026-01-22T09:12:53.324Z- .expect("Should be able to get external group state after rollback");
30372026-01-22T09:12:53.324Z+ let post_failure_external_group =
30382026-01-22T09:12:53.324Z+ switch.client.multicast_group_get(&external_group_ip).await.expect(
30392026-01-22T09:12:53.324Z+ "Should be able to get external group state after rollback",
30402026-01-22T09:12:53.324Z+ );
30412026-01-22T09:12:53.324Z
30422026-01-22T09:12:53.324Z // NAT target should be unchanged
30432026-01-22T09:12:53.324Z let initial_group_inner = initial_external_group.into_inner();
30442026-01-22T09:12:53.325ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5866:
30452026-01-22T09:12:53.325Z let initial_nat = get_nat_target(&initial_group_inner);
30462026-01-22T09:12:53.325Z let current_nat = get_nat_target(&post_failure_group_inner);
30472026-01-22T09:12:53.325Z
30482026-01-22T09:12:53.325Z- assert!(
30492026-01-22T09:12:53.325Z- initial_nat.is_some(),
30502026-01-22T09:12:53.325Z- "Initial group should have NAT target"
30512026-01-22T09:12:53.325Z- );
30522026-01-22T09:12:53.325Z- assert!(
30532026-01-22T09:12:53.325Z- current_nat.is_some(),
30542026-01-22T09:12:53.325Z- "Current group should have NAT target"
30552026-01-22T09:12:53.325Z- );
30562026-01-22T09:12:53.325Z+ assert!(initial_nat.is_some(), "Initial group should have NAT target");
30572026-01-22T09:12:53.325Z+ assert!(current_nat.is_some(), "Current group should have NAT target");
30582026-01-22T09:12:53.325Z
30592026-01-22T09:12:53.325Z if let (Some(original), Some(current)) = (initial_nat, current_nat) {
30602026-01-22T09:12:53.325Z assert_eq!(
30612026-01-22T09:12:53.325ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5899:
30622026-01-22T09:12:53.325Z "NAT table should be unchanged after rollback"
30632026-01-22T09:12:53.325Z );
30642026-01-22T09:12:53.325Z
30652026-01-22T09:12:53.325Z- cleanup_test_group(&switch, external_group_ip, TEST_TAG)
30662026-01-22T09:12:53.325Z- .await
30672026-01-22T09:12:53.325Z- .unwrap();
30682026-01-22T09:12:53.325Z+ cleanup_test_group(&switch, external_group_ip, TEST_TAG).await.unwrap();
30692026-01-22T09:12:53.325Z cleanup_test_group(&switch, internal_group_ip, TEST_TAG).await
30702026-01-22T09:12:53.325Z }
30712026-01-22T09:12:53.325Z
30722026-01-22T09:12:53.325ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:5974:
30732026-01-22T09:12:53.325Z };
30742026-01-22T09:12:53.325Z
30752026-01-22T09:12:53.325Z // This should fail because the NAT target (internal group) no longer exists
30762026-01-22T09:12:53.325Z- let result = switch
30772026-01-22T09:12:53.325Z- .client
30782026-01-22T09:12:53.325Z- .multicast_group_create_external(&external_entry)
30792026-01-22T09:12:53.325Z- .await;
30802026-01-22T09:12:53.325Z+ let result =
30812026-01-22T09:12:53.325Z+ switch.client.multicast_group_create_external(&external_entry).await;
30822026-01-22T09:12:53.325Z
30832026-01-22T09:12:53.325Z assert!(
30842026-01-22T09:12:53.351Z result.is_err(),
30852026-01-22T09:12:53.351ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:6141:
30862026-01-22T09:12:53.351Z );
30872026-01-22T09:12:53.351Z
30882026-01-22T09:12:53.351Z // Clean up external group first (it references internal group via NAT target)
30892026-01-22T09:12:53.351Z- cleanup_test_group(&switch, group_ip, TEST_TAG)
30902026-01-22T09:12:53.351Z- .await
30912026-01-22T09:12:53.351Z- .unwrap();
30922026-01-22T09:12:53.351Z+ cleanup_test_group(&switch, group_ip, TEST_TAG).await.unwrap();
30932026-01-22T09:12:53.351Z cleanup_test_group(&switch, internal_multicast_ip, TEST_TAG).await
30942026-01-22T09:12:53.351Z }
30952026-01-22T09:12:53.351Z
30962026-01-22T09:12:53.351ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:6175:
30972026-01-22T09:12:53.351Z .multicast_group_get(&internal_group_ip)
30982026-01-22T09:12:53.351Z .await
30992026-01-22T09:12:53.351Z .expect("Should be able to get initial group state");
31002026-01-22T09:12:53.351Z- let initial_member_count = get_members(&initial_group.into_inner())
31012026-01-22T09:12:53.351Z- .map(|m| m.len())
31022026-01-22T09:12:53.351Z- .unwrap_or(0);
31032026-01-22T09:12:53.351Z+ let initial_member_count =
31042026-01-22T09:12:53.351Z+ get_members(&initial_group.into_inner()).map(|m| m.len()).unwrap_or(0);
31052026-01-22T09:12:53.351Z
31062026-01-22T09:12:53.351Z // Create a mix of valid and invalid members to trigger partial addition failure
31072026-01-22T09:12:53.352Z let (valid_port_1, valid_link_1) = switch.link_id(PhysPort(17)).unwrap();
31082026-01-22T09:12:53.352ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:6205:
31092026-01-22T09:12:53.352Z },
31102026-01-22T09:12:53.352Z ];
31112026-01-22T09:12:53.352Z
31122026-01-22T09:12:53.352Z- let update_request = types::MulticastGroupUpdateUnderlayEntry {
31132026-01-22T09:12:53.352Z- members: mixed_members,
31142026-01-22T09:12:53.352Z- };
31152026-01-22T09:12:53.352Z+ let update_request =
31162026-01-22T09:12:53.352Z+ types::MulticastGroupUpdateUnderlayEntry { members: mixed_members };
31172026-01-22T09:12:53.352Z
31182026-01-22T09:12:53.352Z let ipv6_update = types::UnderlayMulticastIpv6(match internal_group_ip {
31192026-01-22T09:12:53.352Z IpAddr::V6(ipv6) => ipv6,
31202026-01-22T09:12:53.352ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:6239:
31212026-01-22T09:12:53.352Z .into_inner();
31222026-01-22T09:12:53.352Z
31232026-01-22T09:12:53.352Z assert_eq!(
31242026-01-22T09:12:53.352Z- get_members(&post_failure_group)
31252026-01-22T09:12:53.352Z- .map(|m| m.len())
31262026-01-22T09:12:53.352Z- .unwrap_or(0),
31272026-01-22T09:12:53.352Z+ get_members(&post_failure_group).map(|m| m.len()).unwrap_or(0),
31282026-01-22T09:12:53.352Z initial_member_count,
31292026-01-22T09:12:53.352Z "Member count should be unchanged after partial addition rollback"
31302026-01-22T09:12:53.352Z );
31312026-01-22T09:12:53.352ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:6316:
31322026-01-22T09:12:53.352Z };
31332026-01-22T09:12:53.352Z
31342026-01-22T09:12:53.352Z // This should fail because the NAT target (internal group) doesn't exist
31352026-01-22T09:12:53.352Z- let result = switch
31362026-01-22T09:12:53.352Z- .client
31372026-01-22T09:12:53.352Z- .multicast_group_create_external(&external_entry)
31382026-01-22T09:12:53.352Z- .await;
31392026-01-22T09:12:53.352Z+ let result =
31402026-01-22T09:12:53.352Z+ switch.client.multicast_group_create_external(&external_entry).await;
31412026-01-22T09:12:53.352Z
31422026-01-22T09:12:53.352Z // Verify the creation failed
31432026-01-22T09:12:53.352Z assert!(
31442026-01-22T09:12:53.352ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:6575:
31452026-01-22T09:12:53.353Z }
31462026-01-22T09:12:53.353Z
31472026-01-22T09:12:53.353Z // Cleanup in correct order: external first, then internal
31482026-01-22T09:12:53.353Z- cleanup_test_group(switch, external_group_ip, TEST_TAG)
31492026-01-22T09:12:53.353Z- .await
31502026-01-22T09:12:53.353Z- .unwrap();
31512026-01-22T09:12:53.353Z+ cleanup_test_group(switch, external_group_ip, TEST_TAG).await.unwrap();
31522026-01-22T09:12:53.353Z cleanup_test_group(switch, internal_group_ip, TEST_TAG).await
31532026-01-22T09:12:53.353Z }
31542026-01-22T09:12:53.353Z
31552026-01-22T09:12:53.353ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:6688:
31562026-01-22T09:12:53.353Z }
31572026-01-22T09:12:53.353Z
31582026-01-22T09:12:53.353Z // Cleanup in correct order: external first, then internal
31592026-01-22T09:12:53.353Z- cleanup_test_group(switch, external_group_ip, TEST_TAG)
31602026-01-22T09:12:53.353Z- .await
31612026-01-22T09:12:53.353Z- .unwrap();
31622026-01-22T09:12:53.353Z+ cleanup_test_group(switch, external_group_ip, TEST_TAG).await.unwrap();
31632026-01-22T09:12:53.353Z cleanup_test_group(switch, internal_group_ip, TEST_TAG).await
31642026-01-22T09:12:53.353Z }
31652026-01-22T09:12:53.353Z
31662026-01-22T09:12:53.353ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:6810:
31672026-01-22T09:12:53.353Z );
31682026-01-22T09:12:53.353Z
31692026-01-22T09:12:53.353Z // Cleanup in correct order: external first, then internal
31702026-01-22T09:12:53.353Z- cleanup_test_group(switch, external_group_ip, TEST_TAG)
31712026-01-22T09:12:53.353Z- .await
31722026-01-22T09:12:53.353Z- .unwrap();
31732026-01-22T09:12:53.353Z+ cleanup_test_group(switch, external_group_ip, TEST_TAG).await.unwrap();
31742026-01-22T09:12:53.353Z cleanup_test_group(switch, internal_group_ip, TEST_TAG).await
31752026-01-22T09:12:53.353Z }
31762026-01-22T09:12:53.353Z
31772026-01-22T09:12:53.353ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:6985:
31782026-01-22T09:12:53.353Z );
31792026-01-22T09:12:53.353Z
31802026-01-22T09:12:53.353Z // Cleanup
31812026-01-22T09:12:53.353Z- cleanup_test_group(switch, external_group_ip, TEST_TAG)
31822026-01-22T09:12:53.353Z- .await
31832026-01-22T09:12:53.353Z- .unwrap();
31842026-01-22T09:12:53.379Z+ cleanup_test_group(switch, external_group_ip, TEST_TAG).await.unwrap();
31852026-01-22T09:12:53.379Z
31862026-01-22T09:12:53.379Z // Verify the /0 entry was removed
31872026-01-22T09:12:53.379Z let after_delete_table = switch
31882026-01-22T09:12:53.379ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:7085:
31892026-01-22T09:12:53.379Z let nonexistent_ip = IpAddr::V4(Ipv4Addr::new(239, 255, 255, 253));
31902026-01-22T09:12:53.379Z
31912026-01-22T09:12:53.379Z let del_tag = make_tag("some_tag");
31922026-01-22T09:12:53.379Z- let result = switch
31932026-01-22T09:12:53.379Z- .client
31942026-01-22T09:12:53.379Z- .multicast_group_delete(&nonexistent_ip, &del_tag)
31952026-01-22T09:12:53.379Z- .await;
31962026-01-22T09:12:53.379Z+ let result =
31972026-01-22T09:12:53.379Z+ switch.client.multicast_group_delete(&nonexistent_ip, &del_tag).await;
31982026-01-22T09:12:53.379Z
31992026-01-22T09:12:53.379Z match result {
32002026-01-22T09:12:53.379Z Err(Error::ErrorResponse(resp)) => {
32012026-01-22T09:12:53.379ZDiff in /work/oxidecomputer/dendrite/dpd-client/tests/integration_tests/mcast.rs:7656:
32022026-01-22T09:12:53.379Z _ => panic!("Expected ErrorResponse for tag mismatch"),
32032026-01-22T09:12:53.379Z }
32042026-01-22T09:12:53.379Z
32052026-01-22T09:12:53.379Z- cleanup_test_group(switch, external_ip, TAG_A)
32062026-01-22T09:12:53.379Z- .await
32072026-01-22T09:12:53.379Z- .unwrap();
32082026-01-22T09:12:53.379Z- cleanup_test_group(switch, internal_ip, TEST_TAG)
32092026-01-22T09:12:53.379Z- .await
32102026-01-22T09:12:53.379Z- .unwrap();
32112026-01-22T09:12:53.379Z+ cleanup_test_group(switch, external_ip, TAG_A).await.unwrap();
32122026-01-22T09:12:53.379Z+ cleanup_test_group(switch, internal_ip, TEST_TAG).await.unwrap();
32132026-01-22T09:12:53.379Z
32142026-01-22T09:12:53.379Z // Case: Case-sensitive tag matching
32152026-01-22T09:12:53.380Z
32162026-01-22T09:12:53.417Zprocess exited: duration 526218 ms, exit code 1
 
32172026-01-22T09:12:53.466Zfound 0 output files