diff --git a/Cargo.lock b/Cargo.lock index b65a238..faeb4a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -122,7 +122,7 @@ checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "api_identity" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "omicron-workspace-hack", "proc-macro2", @@ -409,7 +409,7 @@ dependencies = [ [[package]] name = "bootstore" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "bytes", "camino", @@ -438,7 +438,7 @@ dependencies = [ [[package]] name = "bootstrap-agent-lockstep-types" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "anyhow", "chrono", @@ -453,6 +453,8 @@ dependencies = [ "sled-hardware-types", "slog", "strum 0.27.2", + "thiserror 2.0.18", + "trust-quorum-types", "wicketd-commission-types", ] @@ -1559,7 +1561,7 @@ dependencies = [ [[package]] name = "gateway-types-versions" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "daft", "dropshot", @@ -1627,7 +1629,7 @@ dependencies = [ [[package]] name = "gfss" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "digest 0.10.7", "omicron-workspace-hack", @@ -2774,7 +2776,7 @@ dependencies = [ [[package]] name = "omicron-common" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "anyhow", "api_identity", @@ -2793,6 +2795,7 @@ dependencies = [ "ipnetwork", "itertools 0.14.0", "macaddr", + "omicron-generation-kinds", "omicron-ledger", "omicron-uuid-kinds", "omicron-workspace-hack", @@ -2817,10 +2820,19 @@ dependencies = [ "uuid", ] +[[package]] +name = "omicron-generation-kinds" +version = "0.1.0" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" +dependencies = [ + "oxide-generation", + "oxide-generation-macros", +] + [[package]] name = "omicron-ledger" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "async-trait", "atomicwrites", @@ -2837,7 +2849,7 @@ dependencies = [ [[package]] name = "omicron-passwords" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "argon2", "omicron-workspace-hack", @@ -2852,7 +2864,7 @@ dependencies = [ [[package]] name = "omicron-uuid-kinds" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "daft", "newtype-uuid", @@ -2908,6 +2920,33 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" +[[package]] +name = "oxide-generation" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e130a1add81f976d13f8f3ab455de3e3fd1f1b9b796520049680dd19a385809c" +dependencies = [ + "daft", + "schemars 0.8.22", + "serde", + "serde_json", + "slog", +] + +[[package]] +name = "oxide-generation-macros" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b727e329bc9ff425bf3051e7f39986943bea27aefd6e30b43b468ca999a348" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "serde", + "serde_tokenstream 0.3.0", + "syn 3.0.3", +] + [[package]] name = "oxnet" version = "0.1.6" @@ -3580,7 +3619,7 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rack-init-config" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "bootstrap-agent-lockstep-types", "iddqd", @@ -4548,7 +4587,7 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "sled-agent-types" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "anyhow", "async-trait", @@ -4578,7 +4617,7 @@ dependencies = [ [[package]] name = "sled-agent-types-versions" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "anyhow", "async-trait", @@ -4592,6 +4631,7 @@ dependencies = [ "ipnetwork", "itertools 0.14.0", "omicron-common", + "omicron-generation-kinds", "omicron-ledger", "omicron-passwords", "omicron-uuid-kinds", @@ -4617,7 +4657,7 @@ dependencies = [ [[package]] name = "sled-hardware-types" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "daft", "omicron-workspace-hack", @@ -5523,10 +5563,19 @@ dependencies = [ "once_cell", ] +[[package]] +name = "trust-quorum-types" +version = "0.1.0" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" +dependencies = [ + "omicron-workspace-hack", + "trust-quorum-types-versions", +] + [[package]] name = "trust-quorum-types-versions" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "byte-wrapper", "daft", @@ -5889,6 +5938,7 @@ dependencies = [ "rack-init-config", "reqwest 0.13.4", "serde_json", + "sled-agent-types", "slog", "sprockets-tls-test-utils", "tar", @@ -6115,7 +6165,7 @@ dependencies = [ [[package]] name = "wicketd-commission-client" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "iddqd", "omicron-uuid-kinds", @@ -6133,7 +6183,7 @@ dependencies = [ [[package]] name = "wicketd-commission-types" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "omicron-workspace-hack", "wicketd-commission-types-versions", @@ -6142,7 +6192,7 @@ dependencies = [ [[package]] name = "wicketd-commission-types-versions" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?rev=2e55f4ddac2fe51fc37e9a70e0619a013509750f#2e55f4ddac2fe51fc37e9a70e0619a013509750f" +source = "git+https://github.com/oxidecomputer/omicron?rev=c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78#c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" dependencies = [ "gateway-types-versions", "iddqd", @@ -6158,6 +6208,7 @@ dependencies = [ "slog-error-chain 0.1.0 (git+https://github.com/oxidecomputer/slog-error-chain?branch=main)", "thiserror 2.0.18", "uuid", + "zeroize", ] [[package]] @@ -6557,6 +6608,7 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" dependencies = [ + "serde", "zeroize_derive", ] diff --git a/Cargo.toml b/Cargo.toml index a33d9e3..cf6e00d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,9 +11,11 @@ members = [ anyhow = "1.0.102" # The omicron commit voxel is pinned to. Bumping this rev is the new-omicron # motion; build.rs surfaces it to voxel image create. Keep both revs identical. -rack-init-config = { git = "https://github.com/oxidecomputer/omicron", rev = "2e55f4ddac2fe51fc37e9a70e0619a013509750f" } -wicketd-commission-types-versions = { git = "https://github.com/oxidecomputer/omicron", rev = "2e55f4ddac2fe51fc37e9a70e0619a013509750f" } -wicketd-commission-client = { git = "https://github.com/oxidecomputer/omicron", rev = "2e55f4ddac2fe51fc37e9a70e0619a013509750f" } +rack-init-config = { git = "https://github.com/oxidecomputer/omicron", rev = "c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" } +wicketd-commission-types-versions = { git = "https://github.com/oxidecomputer/omicron", rev = "c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" } +wicketd-commission-client = { git = "https://github.com/oxidecomputer/omicron", rev = "c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" } +# Unnumbered BGP peer type rack-init-config does not re-export yet. +sled-agent-types = { git = "https://github.com/oxidecomputer/omicron", rev = "c6b42fc64ad6b4ed2c14f2932b97b7b8234f9e78" } clap = { version = "4.6.1", features = ["derive", "env"] } expectorate = "1.2.0" # Our crates use only #[tokio::main] + tokio::time; libfalcon pulls its own diff --git a/voxel/Cargo.toml b/voxel/Cargo.toml index af02929..c544f68 100644 --- a/voxel/Cargo.toml +++ b/voxel/Cargo.toml @@ -27,6 +27,7 @@ voxel-config = { path = "../voxel-config" } rack-init-config.workspace = true wicketd-commission-types-versions.workspace = true wicketd-commission-client.workspace = true +sled-agent-types.workspace = true # Reshape the generated config-rss.toml into wicketd's RSS config JSON for # `launch --wicket-setup` (drive setup through wicketd). toml = "0.9" diff --git a/voxel/src/commission.rs b/voxel/src/commission.rs index 35c03d8..496d55d 100644 --- a/voxel/src/commission.rs +++ b/voxel/src/commission.rs @@ -83,6 +83,7 @@ fn uplink_port( asn: p.peer_asn, port: p.port.clone(), addr: types::UserSpecifiedRouterPeerAddr::Unnumbered, + src_addr: None, router_lifetime: types::RouterLifetimeConfig::new( p.router_lifetime, ) @@ -343,7 +344,7 @@ pub(crate) async fn drive( .await .map_err(|e| anyhow!("upload cert: {e}"))?; client - .post_rss_config_key(&types::PrivateKeyPem(key)) + .post_rss_config_key(&types::PrivateKeyPem(key.into())) .await .map_err(|e| anyhow!("upload key: {e}"))?; client diff --git a/voxel/src/cpbuild.rs b/voxel/src/cpbuild.rs index caa960e..d60f7bd 100644 --- a/voxel/src/cpbuild.rs +++ b/voxel/src/cpbuild.rs @@ -483,9 +483,8 @@ async fn create_cp_tuf( std::fs::copy(&phase1, host_dir.join("phase1-gimlet.rom")) .context("stage host phase 1 rom")?; - // The standard-image sled-agent hardwires scrimlet = tofino ASIC at - // compile time (bootstrap/pre_server.rs sled_mode_from_config); softnpu - // scrimlets need a switch-softnpu build staged over the phase 2 one. + // The phase 2 sled-agent detects softnpu scrimlets at runtime, so this is + // an override: a sled-agent package staged over the phase 2 one. if let Some(pkg) = sled_agent { let dir = cargo_bay.join("gz/sled-agent"); std::fs::remove_dir_all(&dir) @@ -505,12 +504,7 @@ async fn create_cp_tuf( cargo_bay.join("gz/sled-agent.xml"), ) .context("stage the softnpu sled-agent SMF manifest")?; - eprintln!("[voxel] staged softnpu sled-agent from {pkg}"); - } else { - eprintln!( - "[voxel] WARN: no --sled-agent; the phase 2 sled-agent cannot \ - run softnpu scrimlets" - ); + eprintln!("[voxel] staged sled-agent from {pkg}"); } // --- 3. pinned single files from the omicron repo ------------------------ diff --git a/voxel/src/main.rs b/voxel/src/main.rs index a50b143..5612077 100644 --- a/voxel/src/main.rs +++ b/voxel/src/main.rs @@ -253,10 +253,9 @@ enum ImageCmd { /// phase 2 payload, switch zone recomposed for softnpu. #[arg(long, value_name = "REPO_ZIP")] from_tuf: Option, - /// With --from-tuf: an omicron-sled-agent package tar built with - /// switch-softnpu, staged in place of the phase 2 sled-agent. The - /// standard-image binary hardwires scrimlet = tofino ASIC, so softnpu - /// scrimlets need this build. + /// With --from-tuf: an omicron-sled-agent package tar staged in place + /// of the phase 2 sled-agent, for trying a sled-agent build. The + /// phase 2 one detects softnpu scrimlets at runtime. #[arg(long, value_name = "PKG_TAR", requires = "from_tuf")] sled_agent: Option, }, diff --git a/voxel/src/net.rs b/voxel/src/net.rs index ef75a7e..a3de0bf 100644 --- a/voxel/src/net.rs +++ b/voxel/src/net.rs @@ -113,8 +113,7 @@ async fn serial_bounded_caps( } if hard > soft { eprintln!( - "[voxel] {what}: no answer from the serial console after {}s. Waiting up to {}s \ - rather than cancelling, since a cancelled exec wedges the console.", + "[voxel] {what}: no serial console answer after {}s; waiting up to {}s", soft.as_secs(), hard.as_secs() ); @@ -361,8 +360,8 @@ pub(crate) fn wait_external_reachable( } warn!( log, - "{label}: external network not reachable after ~{}s (dns {dns_ip}) - the rack is up but \ - its external path may still be converging; retry `voxel route` or `dig {dns_zone} SOA @{dns_ip}`", + "{label}: external network not reachable after {}s (dns {dns_ip}); \ + it may still be converging: voxel route, or dig {dns_zone} SOA @{dns_ip}", ATTEMPTS * SPACING.as_secs() as u32 ); } @@ -482,7 +481,7 @@ pub(crate) async fn set_external_route( } else { warn!( d.log, - "route {} -> {} not confirmed: {}{} - run: route add {} {}", + "route {} -> {} not confirmed: {}{}; run: route add {} {}", prefix, ip, String::from_utf8_lossy(&add.stdout).trim(), diff --git a/voxel/src/rack.rs b/voxel/src/rack.rs index 5df79b8..52b0942 100644 --- a/voxel/src/rack.rs +++ b/voxel/src/rack.rs @@ -348,7 +348,7 @@ pub(crate) async fn cmd_launch( Err(e) if attempt < BOOT_ATTEMPTS => { warn!( topo.runner.log, - "boot attempt {attempt}/{BOOT_ATTEMPTS} failed ({e}); tearing down + retrying" + "boot attempt {attempt}/{BOOT_ATTEMPTS} failed ({e}); retrying" ); let _ = teardown(&topo.runner, name); std::thread::sleep(std::time::Duration::from_secs(3)); @@ -419,7 +419,7 @@ pub(crate) async fn cmd_launch( // settled past its startup dendrite restart. info!( d.log, - "rack{}: booted, left pre-RSS (unclaimed - multirack join not yet supported)", + "rack{}: booted, left uninitialized (no multirack join yet)", rack + 1 ); continue; diff --git a/voxel/src/rss.rs b/voxel/src/rss.rs index ad773bd..b85b305 100644 --- a/voxel/src/rss.rs +++ b/voxel/src/rss.rs @@ -148,8 +148,8 @@ async fn discover_rss_ip( Err(e) if Instant::now() + RETRY_SPACING >= ip_deadline => { warn!( d.log, - "{tag}: can't find the RSS node's IP to watch over SSH ({e}); \ - bring-up continues - check `voxel status` / the console" + "{tag}: no RSS node IP to watch over ssh ({e}); bring-up \ + continues, see voxel status" ); break None; } @@ -178,9 +178,8 @@ async fn watch_rss_loop( if start.elapsed() > cap { warn!( d.log, - "{tag}: stopped watching after {}m - the rack may still be \ - converging; check the console or re-run `voxel status`. Not failing \ - the launch.", + "{tag}: stopped watching after {}m; the rack may still be \ + converging, see voxel status", cap.as_secs() / 60 ); break; @@ -202,8 +201,8 @@ async fn watch_rss_loop( { warn!( d.log, - "{tag}: RSS will not start - a service on the RSS node is in \ - MAINTENANCE. `svcs -x`:\n{}", + "{tag}: RSS will not start: a service on the RSS node is in \ + maintenance. svcs -x:\n{}", x.trim() ); if let Some(t) = crate::net::ssh_capture( @@ -219,7 +218,7 @@ async fn watch_rss_loop( } warn!( d.log, - "{tag}: not waiting further - fix the service above, then relaunch." + "{tag}: not waiting further; clear the service, then relaunch" ); break; } @@ -234,7 +233,7 @@ async fn watch_rss_loop( }; info!( d.log, - "{tag}: still watching, {mins}m elapsed - {where_}" + "{tag}: still watching, {mins}m elapsed, {where_}" ); last_emit = Instant::now(); } @@ -286,7 +285,7 @@ async fn watch_rss_loop( } else { info!( d.log, - "{tag}: complete - rack initialized (RSS run {init_id})" + "{tag}: complete, rack initialized (RSS run {init_id})" ); } break; diff --git a/voxel/src/rss_request.rs b/voxel/src/rss_request.rs index 2b65c91..9551ad1 100644 --- a/voxel/src/rss_request.rs +++ b/voxel/src/rss_request.rs @@ -17,6 +17,7 @@ use rack_init_config::{ ServiceIpPoolConfig, SwitchSlot, UplinkAddress, UplinkAddressConfig, UplinkPorts, }; +use sled_agent_types::early_networking::UnnumberedRouter; use voxel_config::{RouterMode, UplinkPort, VoxelConfig}; // Well-known service pool identity, matching omicron's v1-to-v2 conversion. @@ -86,12 +87,12 @@ fn uplink_port(p: &UplinkPort, mode: RouterMode) -> Result { vec![BgpPeerConfig { asn: p.peer_asn, port: p.port.clone(), - addr: RouterPeerType::Unnumbered { + addr: RouterPeerType::Unnumbered(UnnumberedRouter { router_lifetime: RouterLifetimeConfig::new( p.router_lifetime, ) .map_err(|e| anyhow::anyhow!("router_lifetime: {e}"))?, - }, + }), hold_time: None, idle_hold_time: None, delay_open: None, @@ -136,6 +137,7 @@ fn uplink_port(p: &UplinkPort, mode: RouterMode) -> Result { autoneg: false, lldp: Some(lldp(&p.switch, &p.lldp)), tx_eq: None, + allow_ddm_traffic: false, }) } @@ -156,6 +158,7 @@ fn interconnect_port(switch: &str, port: &str) -> Result { autoneg: false, lldp: Some(lldp(switch, &format!("interconnect-{port}"))), tx_eq: None, + allow_ddm_traffic: false, }) } @@ -358,7 +361,7 @@ mod tests { assert_eq!(port.addresses[0].address, UplinkAddress::AddrConf); assert!(matches!( port.bgp_peers[0].addr, - RouterPeerType::Unnumbered { .. } + RouterPeerType::Unnumbered(..) )); assert_eq!(net.infra_ip_first, "::".parse::().unwrap()); } diff --git a/voxel/src/sp_host.rs b/voxel/src/sp_host.rs index f54abcc..3b603c8 100644 --- a/voxel/src/sp_host.rs +++ b/voxel/src/sp_host.rs @@ -198,7 +198,7 @@ pub(crate) fn fleet_dir(rack: usize) -> camino::Utf8PathBuf { pub(crate) fn emu_bin(rack: usize) -> anyhow::Result { let bin = fleet_dir(rack).join("sp-emu"); if !bin.exists() { - bail!("no sp-emu at {bin} - is this a running --emu rack?"); + bail!("no sp-emu at {bin}; is this a running --emu rack?"); } Ok(bin) }