From 6873dd10cb28735e2838b1cab60ef6297041a08d Mon Sep 17 00:00:00 2001 From: Ryan Goodfellow Date: Sat, 19 Sep 2026 06:23:54 +0000 Subject: [PATCH] derive switch zone ddm router id from baseboard id --- Cargo.lock | 16 +++++------ package-manifest.toml | 10 +++---- sled-agent/src/services.rs | 41 ++++++++++++++++++++++++----- tools/maghemite_ddm_openapi_version | 2 +- tools/maghemite_mg_openapi_version | 2 +- tools/maghemite_mgd_checksums | 4 +-- 6 files changed, 51 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cfdb59dfa9a..975bf90cbb3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1595,7 +1595,7 @@ dependencies = [ [[package]] name = "client-common" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#26fcf262ba3be2af6156a5a010cd834e18ae42c7" +source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#23b7c04ee23d7303c1f56153fe48d8b04c194265" [[package]] name = "clipboard-win" @@ -2631,7 +2631,7 @@ dependencies = [ [[package]] name = "ddm-admin-client" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#26fcf262ba3be2af6156a5a010cd834e18ae42c7" +source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#23b7c04ee23d7303c1f56153fe48d8b04c194265" dependencies = [ "ddm-api-types-versions", "oxnet", @@ -2645,7 +2645,7 @@ dependencies = [ [[package]] name = "ddm-api-types" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#26fcf262ba3be2af6156a5a010cd834e18ae42c7" +source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#23b7c04ee23d7303c1f56153fe48d8b04c194265" dependencies = [ "ddm-api-types-versions", ] @@ -2653,7 +2653,7 @@ dependencies = [ [[package]] name = "ddm-api-types-versions" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#26fcf262ba3be2af6156a5a010cd834e18ae42c7" +source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#23b7c04ee23d7303c1f56153fe48d8b04c194265" dependencies = [ "ddm-protocol", "oxnet", @@ -2666,7 +2666,7 @@ dependencies = [ [[package]] name = "ddm-protocol" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#26fcf262ba3be2af6156a5a010cd834e18ae42c7" +source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#23b7c04ee23d7303c1f56153fe48d8b04c194265" dependencies = [ "oxnet", "schemars 0.8.22", @@ -6953,7 +6953,7 @@ dependencies = [ [[package]] name = "mg-admin-client" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#26fcf262ba3be2af6156a5a010cd834e18ae42c7" +source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#23b7c04ee23d7303c1f56153fe48d8b04c194265" dependencies = [ "chrono", "client-common", @@ -6973,7 +6973,7 @@ dependencies = [ [[package]] name = "mg-api-types" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#26fcf262ba3be2af6156a5a010cd834e18ae42c7" +source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#23b7c04ee23d7303c1f56153fe48d8b04c194265" dependencies = [ "mg-api-types-versions", ] @@ -6981,7 +6981,7 @@ dependencies = [ [[package]] name = "mg-api-types-versions" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#26fcf262ba3be2af6156a5a010cd834e18ae42c7" +source = "git+https://github.com/oxidecomputer/maghemite?branch=ry%2Fexternal-peers#23b7c04ee23d7303c1f56153fe48d8b04c194265" dependencies = [ "chrono", "nom 8.0.0", diff --git a/package-manifest.toml b/package-manifest.toml index 2070816d225..41816caed53 100644 --- a/package-manifest.toml +++ b/package-manifest.toml @@ -683,10 +683,10 @@ source.repo = "maghemite" # `tools/maghemite_openapi_version`. Failing to do so will cause a failure when # building `ddm-admin-client` (which will instruct you to update # `tools/maghemite_openapi_version`). -source.commit = "26fcf262ba3be2af6156a5a010cd834e18ae42c7" +source.commit = "23b7c04ee23d7303c1f56153fe48d8b04c194265" # The SHA256 digest is automatically posted to: # https://buildomat.eng.oxide.computer/public/file/oxidecomputer/maghemite/image//mg-ddm-gz.sha256.txt -source.sha256 = "a2551615119859c037564158867f9005e384d0a1f59237b5458c0737a0123d79" +source.sha256 = "d71af76dcd17dd34ed9f36f43dd7033f9488077ba5822e458700d60e0844368d" output.type = "tarball" [package.mg-ddm] @@ -699,10 +699,10 @@ source.repo = "maghemite" # `tools/maghemite_openapi_version`. Failing to do so will cause a failure when # building `ddm-admin-client` (which will instruct you to update # `tools/maghemite_openapi_version`). -source.commit = "26fcf262ba3be2af6156a5a010cd834e18ae42c7" +source.commit = "23b7c04ee23d7303c1f56153fe48d8b04c194265" # The SHA256 digest is automatically posted to: # https://buildomat.eng.oxide.computer/public/file/oxidecomputer/maghemite/image//mg-ddm.sha256.txt -source.sha256 = "05da12de94b677498606a6c18b90a7444621d49efe3aeb8a52b52b875fb1e5b8" +source.sha256 = "fab9864652a675a4258cc0900fd71316fb20aefb872a83406d9e048bf4c12c82" output.type = "zone" output.intermediate_only = true @@ -714,7 +714,7 @@ source.repo = "maghemite" # `tools/maghemite_openapi_version`. Failing to do so will cause a failure when # building `ddm-admin-client` (which will instruct you to update # `tools/maghemite_openapi_version`). -source.commit = "26fcf262ba3be2af6156a5a010cd834e18ae42c7" +source.commit = "23b7c04ee23d7303c1f56153fe48d8b04c194265" # The SHA256 digest is automatically posted to: # https://buildomat.eng.oxide.computer/public/file/oxidecomputer/maghemite/image//mgd.sha256.txt source.sha256 = "e46b9d06de9b9760afd46e24bbbbe9a81a5b831cbb8a6a2a7affb9cc727f10ae" diff --git a/sled-agent/src/services.rs b/sled-agent/src/services.rs index 92bea7a3603..24279063d60 100644 --- a/sled-agent/src/services.rs +++ b/sled-agent/src/services.rs @@ -459,7 +459,7 @@ enum SwitchService { Pumpkind { asic: DendriteAsic }, Tfport { pkt_source: String, asic: DendriteAsic }, Uplink, - MgDdm { mode: String }, + MgDdm { mode: String, baseboard: Baseboard }, Mgd, SpSim, } @@ -2888,7 +2888,7 @@ impl ServiceManager { .add_property_group(mgd_config), ); } - SwitchService::MgDdm { mode } => { + SwitchService::MgDdm { mode, baseboard } => { info!(self.inner.log, "Setting up mg-ddm service"); let mut mg_ddm_config = PropertyGroupBuilder::new("config") @@ -2897,7 +2897,12 @@ impl ServiceManager { // We must bind to "::" so the ddmd scrimlet reconciler // in the global zone can reach the ddm-admin port in // the switch zone via the underlay network. - .add_property("admin_host", "astring", "::"); + .add_property("admin_host", "astring", "::") + .add_property( + "router_id", + "astring", + &switch_zone_ddm_router_id(&baseboard), + ); if let Some(i) = info { mg_ddm_config = mg_ddm_config @@ -3138,7 +3143,10 @@ impl ServiceManager { SwitchService::Uplink, SwitchService::Wicketd { baseboard: baseboard.clone() }, SwitchService::Mgd, - SwitchService::MgDdm { mode: "transit".to_string() }, + SwitchService::MgDdm { + mode: "transit".to_string(), + baseboard: baseboard.clone(), + }, ] } @@ -3153,7 +3161,10 @@ impl ServiceManager { SwitchService::Uplink, SwitchService::Wicketd { baseboard: baseboard.clone() }, SwitchService::Mgd, - SwitchService::MgDdm { mode: "transit".to_string() }, + SwitchService::MgDdm { + mode: "transit".to_string(), + baseboard: baseboard.clone(), + }, SwitchService::Tfport { pkt_source: "vioif0".to_string(), asic, @@ -3184,7 +3195,10 @@ impl ServiceManager { SwitchService::Uplink, SwitchService::Wicketd { baseboard: baseboard.clone() }, SwitchService::Mgd, - SwitchService::MgDdm { mode: "transit".to_string() }, + SwitchService::MgDdm { + mode: "transit".to_string(), + baseboard: baseboard.clone(), + }, SwitchService::Tfport { pkt_source: "tfpkt0".to_string(), asic, @@ -3601,7 +3615,7 @@ impl ServiceManager { "refreshed mgd service with new configuration" ) } - SwitchService::MgDdm { mode } => { + SwitchService::MgDdm { mode, baseboard } => { info!(self.inner.log, "configuring mg-ddm service"); smfh.delpropvalue_default_instance( "config/mode", @@ -3612,6 +3626,15 @@ impl ServiceManager { &mode, "astring", )?; + smfh.delpropvalue_default_instance( + "config/router_id", + "*", + )?; + smfh.addpropvalue_type_default_instance( + "config/router_id", + &switch_zone_ddm_router_id(&baseboard), + "astring", + )?; if let Some(info) = self.inner.sled_info.get() { smfh.setprop_default_instance( "config/rack_uuid", @@ -3867,6 +3890,10 @@ fn internal_dns_addrobj_name(gz_address_index: u32) -> String { format!("internaldns{gz_address_index}") } +fn switch_zone_ddm_router_id(baseboard: &Baseboard) -> String { + format!("sw{}", baseboard.identifier()) +} + #[cfg(test)] mod test { use super::*; diff --git a/tools/maghemite_ddm_openapi_version b/tools/maghemite_ddm_openapi_version index 29b130e6238..8479e0f1d9d 100644 --- a/tools/maghemite_ddm_openapi_version +++ b/tools/maghemite_ddm_openapi_version @@ -1 +1 @@ -COMMIT="26fcf262ba3be2af6156a5a010cd834e18ae42c7" +COMMIT="23b7c04ee23d7303c1f56153fe48d8b04c194265" diff --git a/tools/maghemite_mg_openapi_version b/tools/maghemite_mg_openapi_version index 29b130e6238..8479e0f1d9d 100644 --- a/tools/maghemite_mg_openapi_version +++ b/tools/maghemite_mg_openapi_version @@ -1 +1 @@ -COMMIT="26fcf262ba3be2af6156a5a010cd834e18ae42c7" +COMMIT="23b7c04ee23d7303c1f56153fe48d8b04c194265" diff --git a/tools/maghemite_mgd_checksums b/tools/maghemite_mgd_checksums index a4fa4edf4c0..964fcd37938 100644 --- a/tools/maghemite_mgd_checksums +++ b/tools/maghemite_mgd_checksums @@ -1,4 +1,4 @@ CIDL_SHA256="e46b9d06de9b9760afd46e24bbbbe9a81a5b831cbb8a6a2a7affb9cc727f10ae" MGD_LINUX_SHA256="7b36358c6603ffd74149ebaf697782067b192b2f60dcc177eb5965c48b702dde" -MG_DDM_SHA256="05da12de94b677498606a6c18b90a7444621d49efe3aeb8a52b52b875fb1e5b8" -DDMD_LINUX_SHA256="43d609ef0f76ef05b8b0264677c36abd8cf54565fbd9e0c93afc135df25dd6ab" +MG_DDM_SHA256="fab9864652a675a4258cc0900fd71316fb20aefb872a83406d9e048bf4c12c82" +DDMD_LINUX_SHA256="df47660e8e4a14edc528fcd402368424b528e2e7b1d6a7d73a12f8d671493d82" \ No newline at end of file