Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
5601d87
WIP: allow launching multiple racks with omicron-dev
internet-diglett Dec 3, 2025
5a46d99
WIP: integrate mgd changes
internet-diglett Dec 16, 2025
e135d80
make mgd work correctly in omicron-dev (and test ctx)
internet-diglett Dec 17, 2025
1600e1c
update test fixture
internet-diglett Dec 17, 2025
b3dcdf4
WIP: add LLDPD
internet-diglett Dec 23, 2025
bebb200
kinda need this file :P
internet-diglett Dec 23, 2025
e5354b3
fix missing enum variant
internet-diglett Dec 23, 2025
2af1971
fix tests
internet-diglett Dec 23, 2025
3492950
cargo fmt
internet-diglett Dec 23, 2025
c3b3782
ensure lldpd is available for linux testing
internet-diglett Dec 29, 2025
364a20c
fixup! ensure lldpd is available for linux testing
internet-diglett Dec 30, 2025
11932cc
fixup! ensure lldpd is available for linux testing
internet-diglett Dec 30, 2025
adceaab
fixup! ensure lldpd is available for linux testing
internet-diglett Dec 30, 2025
f9e2a92
Use DNS to lookup lldp daemon
internet-diglett Jan 3, 2026
c350612
fix checksum
internet-diglett Jan 3, 2026
e46222d
linux treats 'localhost' differently?
internet-diglett Jan 4, 2026
c49b5c3
move JBOR options to their own subcommands
internet-diglett Jan 7, 2026
02c7146
cargo fmt
internet-diglett Jan 7, 2026
d3d826f
fixup! move JBOR options to their own subcommands
internet-diglett Jan 7, 2026
1638b1f
Merge branch 'main' into omicron-dev-for-multi-rack
internet-diglett Jan 7, 2026
eaa10cc
fix downloader for macos
internet-diglett Jan 7, 2026
bd796ff
I accidentally orphaned these :D
internet-diglett Jan 9, 2026
abe910e
okay, fix it for real this time
internet-diglett Jan 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .envrc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ PATH_add out/cockroachdb/bin
PATH_add out/clickhouse
PATH_add out/dendrite-stub/bin
PATH_add out/mgd/root/opt/oxide/mgd/bin
PATH_add out/lldp/root/opt/oxide/bin

if [ "$OMICRON_USE_FLAKE" = 1 ] && nix flake show &> /dev/null
then
Expand Down
12 changes: 6 additions & 6 deletions Cargo.lock

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

10 changes: 5 additions & 5 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -558,17 +558,17 @@ libfalcon = { git = "https://github.com/oxidecomputer/falcon", branch = "main" }
libnvme = { git = "https://github.com/oxidecomputer/libnvme", rev = "dd5bb221d327a1bc9287961718c3c10d6bd37da0" }
linear-map = "1.2.0"
live-tests-macros = { path = "live-tests/macros" }
lldpd_client = { git = "https://github.com/oxidecomputer/lldp", package = "lldpd-client" }
lldp_protocol = { git = "https://github.com/oxidecomputer/lldp", package = "protocol" }
lldpd_client = { git = "https://github.com/oxidecomputer/lldp", package = "lldpd-client", rev = "01b79698257c8d0414a2da6529e381c6c1a50893" }
lldp_protocol = { git = "https://github.com/oxidecomputer/lldp", package = "protocol", rev = "01b79698257c8d0414a2da6529e381c6c1a50893" }
macaddr = { version = "1.0.1", features = ["serde_std"] }
maplit = "1.0.2"
newtype_derive = "0.1.6"
ntp-admin-api = { path = "ntp-admin/api" }
ntp-admin-client = { path = "clients/ntp-admin-client" }
ntp-admin-types = { path = "ntp-admin/types" }
ntp-admin-types-versions = { path = "ntp-admin/types/versions" }
mg-admin-client = { git = "https://github.com/oxidecomputer/maghemite", rev = "205b3ccf75b527ac7a565285fdcc0c78f4fcee95" }
ddm-admin-client = { git = "https://github.com/oxidecomputer/maghemite", rev = "205b3ccf75b527ac7a565285fdcc0c78f4fcee95" }
mg-admin-client = { git = "https://github.com/oxidecomputer/maghemite", rev = "9e94d6b79560c2e4639cba432fb0ed600e9a3ff8" }
ddm-admin-client = { git = "https://github.com/oxidecomputer/maghemite", rev = "9e94d6b79560c2e4639cba432fb0ed600e9a3ff8" }
multimap = "0.10.1"
nexus-auth = { path = "nexus/auth" }
nexus-background-task-interface = { path = "nexus/background-task-interface" }
Expand Down Expand Up @@ -698,7 +698,7 @@ rats-corim = { git = "https://github.com/oxidecomputer/rats-corim.git", rev = "f
raw-cpuid = { git = "https://github.com/oxidecomputer/rust-cpuid.git", rev = "a4cf01df76f35430ff5d39dc2fe470bcb953503b" }
rayon = "1.10"
rcgen = "0.12.1"
rdb-types = { git = "https://github.com/oxidecomputer/maghemite", rev = "205b3ccf75b527ac7a565285fdcc0c78f4fcee95" }
rdb-types = { git = "https://github.com/oxidecomputer/maghemite", rev = "9e94d6b79560c2e4639cba432fb0ed600e9a3ff8" }
reconfigurator-cli = { path = "dev-tools/reconfigurator-cli" }
reedline = "0.40.0"
ref-cast = "1.0"
Expand Down
78 changes: 78 additions & 0 deletions dev-tools/downloader/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ enum Target {

/// Transceiver Control binary
TransceiverControl,

/// LLDP binary
LLDP,
}

#[derive(Parser)]
Expand Down Expand Up @@ -136,6 +139,7 @@ pub async fn run_cmd(args: DownloadArgs) -> Result<()> {
Target::Cockroach => downloader.download_cockroach().await,
Target::Console => downloader.download_console().await,
Target::DendriteStub => downloader.download_dendrite_stub().await,
Target::LLDP => downloader.download_lldp().await,
Target::MaghemiteMgd => downloader.download_maghemite_mgd().await,
Target::Softnpu => downloader.download_softnpu().await,
Target::TransceiverControl => {
Expand Down Expand Up @@ -870,6 +874,80 @@ impl Downloader<'_> {
Ok(())
}

async fn download_lldp(&self) -> std::result::Result<(), anyhow::Error> {
let download_dir = self.output_dir.join("downloads");
tokio::fs::create_dir_all(&download_dir).await?;

let checksums_path = self.versions_dir.join("lldp_checksums");
let [lldp_sha2, lldp_linux_sha2] = get_values_from_file(
["CIDL_SHA256", "LINUX_SHA256"],
&checksums_path,
)
.await?;
let commit_path = self.versions_dir.join("lldp_openapi_version");
let [commit] = get_values_from_file(["COMMIT"], &commit_path).await?;

let repo = "oxidecomputer/lldp";
let base_url = format!("{BUILDOMAT_URL}/{repo}/image/{commit}");

let filename = "lldp.tar.gz";
let tarball_path = download_dir.join(filename);
download_file_and_verify(
&self.log,
&tarball_path,
&format!("{base_url}/{filename}"),
ChecksumAlgorithm::Sha2,
&lldp_sha2,
)
.await?;
unpack_tarball(&self.log, &tarball_path, &download_dir).await?;

let destination_dir = self.output_dir.join("lldp");
let _ = tokio::fs::remove_dir_all(&destination_dir).await;
tokio::fs::create_dir_all(&destination_dir).await?;
copy_dir_all(
&download_dir.join("root"),
&destination_dir.join("root"),
)?;

let binary_dir = destination_dir.join("root/opt/oxide/bin");

match os_name()? {
Os::Linux => {
let filename = "lldpd";
let path = download_dir.join(filename);
download_file_and_verify(
&self.log,
&path,
&format!(
"{BUILDOMAT_URL}/{repo}/linux/{commit}/{filename}"
),
ChecksumAlgorithm::Sha2,
&lldp_linux_sha2,
)
.await?;
set_permissions(&path, 0o755).await?;
tokio::fs::copy(path, binary_dir.join(filename)).await?;
}
Os::Mac => {
info!(self.log, "Building lldp from source for macOS");

let binaries = [("lldpd", &["--no-default-features"][..])];

let built_binaries =
self.build_from_git("lldp", &commit, &binaries).await?;

// Copy built binary to binary_dir
let dest = binary_dir.join("lldp");
tokio::fs::copy(&built_binaries[0], &dest).await?;
set_permissions(&dest, 0o755).await?;
}
Os::Illumos => (),
}

Ok(())
}

async fn download_maghemite_mgd(&self) -> Result<()> {
let download_dir = self.output_dir.join("downloads");
tokio::fs::create_dir_all(&download_dir).await?;
Expand Down
2 changes: 2 additions & 0 deletions dev-tools/ls-apis/tests/api_dependencies.out
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ Downstairs Controller (debugging only) (client: dsc-client)

Management Gateway Service (client: gateway-client)
consumed by: dpd (dendrite/dpd) via 1 path
consumed by: lldpd (lldp/lldpd) via 1 path
consumed by: mgd (maghemite/mgd) via 1 path
consumed by: omicron-nexus (omicron/nexus) via 4 paths
consumed by: omicron-sled-agent (omicron/sled-agent) via 1 path
consumed by: wicketd (omicron/wicketd) via 3 paths
Expand Down
4 changes: 2 additions & 2 deletions dev-tools/omdb/tests/successes.out
Original file line number Diff line number Diff line change
Expand Up @@ -573,7 +573,7 @@ task: "bfd_manager"
configured period: every <REDACTED_DURATION>s
last completed activation: <REDACTED ITERATIONS>, triggered by <TRIGGERED_BY_REDACTED>
started at <REDACTED_TIMESTAMP> (<REDACTED DURATION>s ago) and ran for <REDACTED DURATION>ms
last completion reported error: failed to resolve addresses for Dendrite services: proto error: no records found for Query { name: Name("_dendrite._tcp.control-plane.oxide.internal."), query_type: SRV, query_class: IN }
last completion reported error: failed to resolve addresses for Maghemite: proto error: no records found for Query { name: Name("_mgd._tcp.control-plane.oxide.internal."), query_type: SRV, query_class: IN }

task: "blueprint_planner"
configured period: every <REDACTED_DURATION>m
Expand Down Expand Up @@ -1141,7 +1141,7 @@ task: "bfd_manager"
configured period: every <REDACTED_DURATION>s
last completed activation: <REDACTED ITERATIONS>, triggered by <TRIGGERED_BY_REDACTED>
started at <REDACTED_TIMESTAMP> (<REDACTED DURATION>s ago) and ran for <REDACTED DURATION>ms
last completion reported error: failed to resolve addresses for Dendrite services: proto error: no records found for Query { name: Name("_dendrite._tcp.control-plane.oxide.internal."), query_type: SRV, query_class: IN }
last completion reported error: failed to resolve addresses for Maghemite: proto error: no records found for Query { name: Name("_mgd._tcp.control-plane.oxide.internal."), query_type: SRV, query_class: IN }

task: "blueprint_planner"
configured period: every <REDACTED_DURATION>m
Expand Down
Loading
Loading