From ec961404e63425b38f26ebc464729b690e9f53e2 Mon Sep 17 00:00:00 2001 From: Levon Tarver Date: Wed, 17 Dec 2025 23:06:53 +0000 Subject: [PATCH 1/7] enable lldp to be aware of what switch it is managing --- Cargo.lock | 891 ++++++++++++++++++++-------------------- Cargo.toml | 1 + lldpd-api/src/lib.rs | 19 + lldpd/Cargo.toml | 1 + lldpd/src/api_server.rs | 8 + lldpd/src/main.rs | 18 + lldpd/src/mgs.rs | 39 ++ 7 files changed, 522 insertions(+), 455 deletions(-) create mode 100644 lldpd/src/mgs.rs diff --git a/Cargo.lock b/Cargo.lock index 92022cd..1b53f74 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.1" @@ -109,12 +100,12 @@ checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "api_identity" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?branch=main#362c4f76bbfad42f8de1e4b70a84acc898d1bdcf" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" dependencies = [ "omicron-workspace-hack", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -148,7 +139,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -159,7 +150,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -210,21 +201,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base64" version = "0.22.1" @@ -276,9 +252,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.3" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "blake3" @@ -342,9 +318,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1de8bc0aa9e9385ceb3bf0c152e3a9b9544f6c4a912c8ae504e80c1f0368603" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" dependencies = [ "serde_core", ] @@ -486,7 +462,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -501,6 +477,15 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "colored" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "common" version = "0.1.0" @@ -634,7 +619,7 @@ checksum = "7ad40aef90652e771af668d28abcc3ef35fd0d39438706a76a61588cf8e8e84a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -658,7 +643,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -669,7 +654,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -696,18 +681,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta", - "syn 2.0.106", -] - -[[package]] -name = "derive-where" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef941ded77d15ca19b40374869ac6000af1c9f2a4c0f3d4c70926287e6364a8f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -728,7 +702,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -740,36 +714,22 @@ dependencies = [ "libdlpi-sys", "num_enum", "pretty-hex", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", ] -[[package]] -name = "dof" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558e5396321b677a59d2c43b3cc3bc44683109c63ac49275f3bbbf41c0ecd002" -dependencies = [ - "goblin 0.8.2", - "pretty-hex", - "serde", - "serde_json", - "thiserror 1.0.69", - "zerocopy 0.7.35", -] - [[package]] name = "dof" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ed9b77e3c2a83995eedff2fbf992eef44c9f319b8016254f68108e27a4d06e7" dependencies = [ - "goblin 0.10.2", + "goblin", "pretty-hex", "serde", "serde_json", - "thiserror 2.0.16", - "zerocopy 0.8.26", + "thiserror 2.0.17", + "zerocopy", ] [[package]] @@ -782,9 +742,9 @@ dependencies = [ "common", "crc8", "futures", - "http 1.3.1", + "http 1.4.0", "oxnet", - "progenitor", + "progenitor 0.11.1", "regress", "reqwest", "schemars", @@ -812,9 +772,9 @@ dependencies = [ [[package]] name = "dropshot" -version = "0.16.4" +version = "0.16.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd9bdeafc752f117ed20e659b9763695ae5900adf3a32e93f9f6f4052fd5d66" +checksum = "4d0df98c06659ab85a454f32dc36ca5dbc6500bd2a58f25ede4dc1f1d478904e" dependencies = [ "async-stream", "async-trait", @@ -826,8 +786,8 @@ dependencies = [ "dropshot_endpoint", "form_urlencoded", "futures", - "hostname 0.4.1", - "http 1.3.1", + "hostname 0.4.2", + "http 1.4.0", "http-body-util", "hyper", "hyper-util", @@ -851,11 +811,11 @@ dependencies = [ "slog-bunyan", "slog-json", "slog-term", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-rustls 0.25.0", - "toml 0.9.5", - "usdt 0.5.0", + "toml 0.9.9+spec-1.0.0", + "usdt", "uuid", "version_check", "waitgroup", @@ -888,7 +848,7 @@ dependencies = [ "similar", "supports-color", "textwrap 0.16.2", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -906,9 +866,9 @@ dependencies = [ [[package]] name = "dropshot_endpoint" -version = "0.16.4" +version = "0.16.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d09440e73a9dcf8a0f7fbd6ab889a7751d59f0fe76e5082a0a6d5623ec6da3" +checksum = "7e53aef8838e0e341485590738ab180a6dceff3565ffcb198d5f365fea650378" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -916,18 +876,7 @@ dependencies = [ "semver 1.0.27", "serde", "serde_tokenstream", - "syn 2.0.106", -] - -[[package]] -name = "dtrace-parser" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71734e3eb68cd4df338d04dffdcc024f89eb0b238150cc95b826fbfad756452b" -dependencies = [ - "pest", - "pest_derive", - "thiserror 1.0.69", + "syn 2.0.111", ] [[package]] @@ -938,7 +887,7 @@ checksum = "dc09b90bda5770641457f1c0a42c8203c48f5a3d9799dcf1bafbd84e30ccf080" dependencies = [ "pest", "pest_derive", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -968,6 +917,29 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "erased-serde" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +dependencies = [ + "serde", +] + +[[package]] +name = "ereport-types" +version = "0.1.0" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" +dependencies = [ + "dropshot", + "omicron-uuid-kinds", + "omicron-workspace-hack", + "schemars", + "serde", + "serde_json", + "thiserror 2.0.17", +] + [[package]] name = "errno" version = "0.3.13" @@ -1119,7 +1091,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -1152,6 +1124,75 @@ dependencies = [ "slab", ] +[[package]] +name = "gateway-client" +version = "0.1.0" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" +dependencies = [ + "base64", + "chrono", + "daft", + "ereport-types", + "gateway-messages", + "gateway-types", + "omicron-uuid-kinds", + "omicron-workspace-hack", + "progenitor 0.10.0", + "rand 0.9.2", + "reqwest", + "schemars", + "serde", + "serde_json", + "slog", + "thiserror 2.0.17", + "tokio", + "uuid", +] + +[[package]] +name = "gateway-messages" +version = "0.1.0" +source = "git+https://github.com/oxidecomputer/management-gateway-service?rev=ea2f39ccdea124b5affcad0ca17bc5dacf65823a#ea2f39ccdea124b5affcad0ca17bc5dacf65823a" +dependencies = [ + "bitflags 2.10.0", + "hubpack", + "serde", + "serde-big-array", + "serde_repr", + "static_assertions", + "strum 0.27.2", + "strum_macros 0.27.2", + "uuid", + "zerocopy", +] + +[[package]] +name = "gateway-types" +version = "0.1.0" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" +dependencies = [ + "gateway-types-versions", + "omicron-workspace-hack", +] + +[[package]] +name = "gateway-types-versions" +version = "0.1.0" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" +dependencies = [ + "daft", + "dropshot", + "gateway-messages", + "hex", + "omicron-uuid-kinds", + "omicron-workspace-hack", + "schemars", + "serde", + "thiserror 2.0.17", + "tufaceous-artifact", + "uuid", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1189,19 +1230,13 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "git2" version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "libc", "libgit2-sys", "log", @@ -1214,17 +1249,6 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" -[[package]] -name = "goblin" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" -dependencies = [ - "log", - "plain", - "scroll 0.12.0", -] - [[package]] name = "goblin" version = "0.10.2" @@ -1233,7 +1257,7 @@ checksum = "7be320f077239a0361c20d608b4768c62a1b77aa4946dd76395aa4cd502cba7d" dependencies = [ "log", "plain", - "scroll 0.13.0", + "scroll", ] [[package]] @@ -1247,7 +1271,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.3.1", + "http 1.4.0", "indexmap", "slab", "tokio", @@ -1268,9 +1292,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", ] @@ -1336,13 +1360,13 @@ dependencies = [ [[package]] name = "hostname" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56f203cd1c76362b69e3863fd987520ac36cf70a8c92627449b2f64a8cf7d65" +checksum = "617aaa3557aef3810a6369d0a99fac8a080891b68bd9f9812a1eeda0c0730cbd" dependencies = [ "cfg-if", "libc", - "windows-link 0.1.3", + "windows-link 0.2.1", ] [[package]] @@ -1358,12 +1382,11 @@ dependencies = [ [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -1374,7 +1397,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http 1.4.0", ] [[package]] @@ -1385,7 +1408,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http 1.4.0", "http-body", "pin-project-lite", ] @@ -1425,16 +1448,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", "h2", - "http 1.3.1", + "http 1.4.0", "http-body", "httparse", "httpdate", @@ -1452,7 +1475,7 @@ version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "http 1.3.1", + "http 1.4.0", "hyper", "hyper-util", "rustls 0.23.31", @@ -1481,16 +1504,16 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.16" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ "base64", "bytes", "futures-channel", "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body", "hyper", "ipnet", @@ -1500,6 +1523,7 @@ dependencies = [ "socket2 0.6.0", "system-configuration", "tokio", + "tower-layer", "tower-service", "tracing", "windows-registry", @@ -1615,29 +1639,17 @@ dependencies = [ "zerovec", ] -[[package]] -name = "id-map" -version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?branch=main#362c4f76bbfad42f8de1e4b70a84acc898d1bdcf" -dependencies = [ - "daft", - "derive-where", - "omicron-workspace-hack", - "schemars", - "serde", -] - [[package]] name = "iddqd" -version = "0.3.14" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bac5efd33e0c5eb0ac45cbd210541a214dac576896ca97ba08e16e3b1079cdd8" +checksum = "6b215e67ed1d1a4b1702acd787c487d16e4c977c5dcbcc4587bdb5ea26b6ce06" dependencies = [ "allocator-api2", "daft", "equivalent", "foldhash 0.2.0", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "ref-cast", "rustc-hash 2.1.1", "schemars", @@ -1680,12 +1692,12 @@ checksum = "0cfe9645a18782869361d9c8732246be7b410ad4e919d3609ebabdac00ba12c3" [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "serde", "serde_core", ] @@ -1699,17 +1711,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags 2.9.3", - "cfg-if", - "libc", -] - [[package]] name = "ipnet" version = "2.11.0" @@ -1851,7 +1852,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "libc", "redox_syscall", ] @@ -1934,6 +1935,7 @@ dependencies = [ "dlpi", "dpd-client", "dropshot", + "gateway-client", "http 0.2.12", "lldpd-api", "lldpd-common", @@ -1971,7 +1973,7 @@ dependencies = [ "chrono", "futures", "lldpd-common", - "progenitor", + "progenitor 0.11.1", "protocol 0.1.0", "reqwest", "schemars", @@ -2051,16 +2053,6 @@ version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" -[[package]] -name = "memmap" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "memmap2" version = "0.9.8" @@ -2082,17 +2074,19 @@ dependencies = [ [[package]] name = "mg-admin-client" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/maghemite?rev=08f2a34d487658e87545ffbba3add632a82baf0d#08f2a34d487658e87545ffbba3add632a82baf0d" +source = "git+https://github.com/oxidecomputer/maghemite?rev=0df320d42b356e689a3c7a7600eec9b16770237a#0df320d42b356e689a3c7a7600eec9b16770237a" dependencies = [ - "anyhow", "chrono", - "percent-encoding", - "progenitor", + "colored", + "progenitor 0.11.1", + "rdb-types", "reqwest", "schemars", "serde", "serde_json", "slog", + "tabwriter", + "uuid", ] [[package]] @@ -2136,7 +2130,7 @@ dependencies = [ "bytes", "encoding_rs", "futures-util", - "http 1.3.1", + "http 1.4.0", "httparse", "memchr", "mime", @@ -2163,9 +2157,9 @@ dependencies = [ [[package]] name = "newtype-uuid" -version = "1.3.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d1216f62e63be5fb25a9ecd1e2b37b1556a9b8c02f4831770f5d01df85c226" +checksum = "5c012d14ef788ab066a347d19e3dda699916c92293b05b85ba2c76b8c82d2830" dependencies = [ "schemars", "serde", @@ -2184,7 +2178,7 @@ dependencies = [ "quote", "serde", "serde_tokenstream", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -2202,7 +2196,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "cfg-if", "cfg_aliases", "libc", @@ -2317,7 +2311,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -2329,19 +2323,10 @@ dependencies = [ "libc", ] -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "omicron-common" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?branch=main#362c4f76bbfad42f8de1e4b70a84acc898d1bdcf" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" dependencies = [ "anyhow", "api_identity", @@ -2353,10 +2338,10 @@ dependencies = [ "dropshot", "futures", "hex", - "http 1.3.1", - "id-map", + "http 1.4.0", "iddqd", "ipnetwork", + "itertools", "macaddr", "mg-admin-client", "omicron-uuid-kinds", @@ -2377,7 +2362,7 @@ dependencies = [ "slog", "slog-error-chain", "strum 0.27.2", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tufaceous-artifact", "uuid", @@ -2386,7 +2371,7 @@ dependencies = [ [[package]] name = "omicron-uuid-kinds" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?branch=main#362c4f76bbfad42f8de1e4b70a84acc898d1bdcf" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" dependencies = [ "daft", "newtype-uuid", @@ -2462,7 +2447,7 @@ version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "cfg-if", "foreign-types", "libc", @@ -2479,7 +2464,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -2509,7 +2494,7 @@ checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e" [[package]] name = "oximeter" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?branch=main#362c4f76bbfad42f8de1e4b70a84acc898d1bdcf" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" dependencies = [ "anyhow", "chrono", @@ -2520,7 +2505,7 @@ dependencies = [ "oximeter-timeseries-macro", "oximeter-types", "prettyplease", - "syn 2.0.106", + "syn 2.0.111", "toml 0.8.23", "uuid", ] @@ -2528,18 +2513,18 @@ dependencies = [ [[package]] name = "oximeter-macro-impl" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?branch=main#362c4f76bbfad42f8de1e4b70a84acc898d1bdcf" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" dependencies = [ "omicron-workspace-hack", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] name = "oximeter-schema" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?branch=main#362c4f76bbfad42f8de1e4b70a84acc898d1bdcf" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" dependencies = [ "anyhow", "chrono", @@ -2553,27 +2538,27 @@ dependencies = [ "schemars", "serde", "slog-error-chain", - "syn 2.0.106", + "syn 2.0.111", "toml 0.8.23", ] [[package]] name = "oximeter-timeseries-macro" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?branch=main#362c4f76bbfad42f8de1e4b70a84acc898d1bdcf" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" dependencies = [ "omicron-workspace-hack", "oximeter-schema", "oximeter-types", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] name = "oximeter-types" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/omicron?branch=main#362c4f76bbfad42f8de1e4b70a84acc898d1bdcf" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" dependencies = [ "bytes", "chrono", @@ -2581,12 +2566,26 @@ dependencies = [ "num", "omicron-common", "omicron-workspace-hack", + "oximeter-types-versions", "parse-display", "regex", "schemars", "serde", "strum 0.27.2", - "thiserror 2.0.16", + "thiserror 2.0.17", + "uuid", +] + +[[package]] +name = "oximeter-types-versions" +version = "0.1.0" +source = "git+https://github.com/oxidecomputer/omicron?branch=main#79b29e0d001efc324ce0ba851379db0545ca7356" +dependencies = [ + "chrono", + "omicron-common", + "omicron-workspace-hack", + "schemars", + "serde", "uuid", ] @@ -2658,7 +2657,7 @@ dependencies = [ "regex", "regex-syntax", "structmeta", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -2686,7 +2685,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323" dependencies = [ "memchr", - "thiserror 2.0.16", + "thiserror 2.0.17", "ucd-trie", ] @@ -2710,7 +2709,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -2768,7 +2767,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.26", + "zerocopy", ] [[package]] @@ -2784,7 +2783,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -2839,7 +2838,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -2851,6 +2850,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "progenitor" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced2eadb9776a201d0585b4b072fd44d7d2104e0f3452d967b5a78966f4855cf" +dependencies = [ + "progenitor-client 0.10.0", + "progenitor-impl 0.10.0", + "progenitor-macro 0.10.0", +] + [[package]] name = "progenitor" version = "0.11.1" @@ -2858,8 +2868,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135a23fcb9ad36a46ef4be323d006e195ad5121779c9da64ef95cf0600771b77" dependencies = [ "progenitor-client 0.11.1", - "progenitor-impl", - "progenitor-macro", + "progenitor-impl 0.11.1", + "progenitor-macro 0.11.1", ] [[package]] @@ -2892,6 +2902,28 @@ dependencies = [ "serde_urlencoded", ] +[[package]] +name = "progenitor-impl" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b17e5363daa50bf1cccfade6b0fb970d2278758fd5cfa9ab69f25028e4b1afa3" +dependencies = [ + "heck 0.5.0", + "http 1.4.0", + "indexmap", + "openapiv3", + "proc-macro2", + "quote", + "regex", + "schemars", + "serde", + "serde_json", + "syn 2.0.111", + "thiserror 2.0.17", + "typify", + "unicode-ident", +] + [[package]] name = "progenitor-impl" version = "0.11.1" @@ -2899,7 +2931,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8276d558f1dfd4cc7fc4cceee0a51dab482b5a4be2e69e7eab8c57fbfb1472f4" dependencies = [ "heck 0.5.0", - "http 1.3.1", + "http 1.4.0", "indexmap", "openapiv3", "proc-macro2", @@ -2908,12 +2940,30 @@ dependencies = [ "schemars", "serde", "serde_json", - "syn 2.0.106", - "thiserror 2.0.16", + "syn 2.0.111", + "thiserror 2.0.17", "typify", "unicode-ident", ] +[[package]] +name = "progenitor-macro" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4972aec926d1e06d6abc11ab3f063d2f7063be3dd46fd2839442c14d8e48f3ed" +dependencies = [ + "openapiv3", + "proc-macro2", + "progenitor-impl 0.10.0", + "quote", + "schemars", + "serde", + "serde_json", + "serde_tokenstream", + "serde_yaml", + "syn 2.0.111", +] + [[package]] name = "progenitor-macro" version = "0.11.1" @@ -2922,14 +2972,14 @@ checksum = "5dd79317ec8ab905738484d2744d368beee6e357fc043944d985f85a0174f1f7" dependencies = [ "openapiv3", "proc-macro2", - "progenitor-impl", + "progenitor-impl 0.11.1", "quote", "schemars", "serde", "serde_json", "serde_tokenstream", "serde_yaml", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -2940,7 +2990,7 @@ checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.9.3", + "bitflags 2.10.0", "lazy_static", "num-traits", "rand 0.9.2", @@ -2965,7 +3015,7 @@ dependencies = [ [[package]] name = "protocol" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/lldp#b12d9c04ecafbb30b2c3c2d3fc03d32a14a9f6be" +source = "git+https://github.com/oxidecomputer/lldp#61479b6922f9112fbe1e722414d2b8055212cb12" dependencies = [ "anyhow", "schemars", @@ -2993,7 +3043,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls 0.23.31", "socket2 0.5.10", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -3014,7 +3064,7 @@ dependencies = [ "rustls 0.23.31", "rustls-pki-types", "slab", - "thiserror 2.0.16", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -3127,13 +3177,23 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "rdb-types" +version = "0.1.0" +source = "git+https://github.com/oxidecomputer/maghemite?rev=0df320d42b356e689a3c7a7600eec9b16770237a#0df320d42b356e689a3c7a7600eec9b16770237a" +dependencies = [ + "oxnet", + "schemars", + "serde", +] + [[package]] name = "redox_syscall" version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", ] [[package]] @@ -3153,7 +3213,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -3207,7 +3267,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http 1.3.1", + "http 1.4.0", "http-body", "http-body-util", "hyper", @@ -3271,12 +3331,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - [[package]] name = "rustc-hash" version = "1.1.0" @@ -3313,7 +3367,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.4.15", @@ -3326,7 +3380,7 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys 0.9.4", @@ -3469,7 +3523,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -3478,33 +3532,13 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scroll" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" -dependencies = [ - "scroll_derive 0.12.1", -] - [[package]] name = "scroll" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1257cd4248b4132760d6524d6dda4e053bc648c9070b960929bf50cfb1e7add" dependencies = [ - "scroll_derive 0.13.1", -] - -[[package]] -name = "scroll_derive" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", + "scroll_derive", ] [[package]] @@ -3515,7 +3549,7 @@ checksum = "ed76efe62313ab6610570951494bdaa81568026e0318eaa55f167de70eeea67d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -3524,7 +3558,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "core-foundation", "core-foundation-sys", "libc", @@ -3559,32 +3593,41 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.227" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80ece43fc6fbed4eb5392ab50c07334d3e577cbf40997ee896fe7af40bba4245" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", ] +[[package]] +name = "serde-big-array" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + [[package]] name = "serde_core" -version = "1.0.227" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a576275b607a2c86ea29e410193df32bc680303c82f31e275bbfcafe8b33be5" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.227" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e694923b8824cf0e9b382adf0f60d4e05f348f357b38833a3fa5ed7c2ede04" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -3595,7 +3638,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -3622,12 +3665,24 @@ dependencies = [ [[package]] name = "serde_path_to_error" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ "itoa", "serde", + "serde_core", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", ] [[package]] @@ -3641,11 +3696,11 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -3657,7 +3712,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -3697,7 +3752,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -3777,9 +3832,15 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slog" -version = "2.7.0" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06" +checksum = "9b3b8565691b22d2bdfc066426ed48f837fc0c5f2c8cad8d9718f7f99d6995c1" +dependencies = [ + "anyhow", + "erased-serde", + "rustversion", + "serde_core", +] [[package]] name = "slog-async" @@ -3821,7 +3882,7 @@ source = "git+https://github.com/oxidecomputer/slog-error-chain?branch=main#15f6 dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -3949,7 +4010,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -3960,7 +4021,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -4015,7 +4076,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -4027,7 +4088,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -4058,9 +4119,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -4084,7 +4145,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -4093,7 +4154,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "core-foundation", "system-configuration-sys", ] @@ -4129,7 +4190,16 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", +] + +[[package]] +name = "tabwriter" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fce91f2f0ec87dff7e6bcbbeb267439aa1188703003c6055193c821487400432" +dependencies = [ + "unicode-width 0.2.1", ] [[package]] @@ -4191,7 +4261,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -4235,11 +4305,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.17", ] [[package]] @@ -4250,28 +4320,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", -] - -[[package]] -name = "thread-id" -version = "4.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe8f25bbdd100db7e1d34acf7fd2dc59c4bf8f7483f505eaa7d4f12f76cc0ea" -dependencies = [ - "libc", - "winapi", + "syn 2.0.111", ] [[package]] @@ -4353,33 +4413,30 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "slab", "socket2 0.6.0", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -4452,14 +4509,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.5" +version = "0.9.9+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8" +checksum = "eb5238e643fc34a1d5d7e753e1532a91912d74b63b92b3ea51fde8d1b7bc79dd" dependencies = [ "indexmap", - "serde", - "serde_spanned 1.0.0", - "toml_datetime 0.7.0", + "serde_core", + "serde_spanned 1.0.4", + "toml_datetime 0.7.4+spec-1.0.0", "toml_parser", "toml_writer", "winnow 0.7.13", @@ -4476,11 +4533,11 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.0" +version = "0.7.4+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" +checksum = "fe3cea6b2aa3b910092f6abd4053ea464fab5f9c170ba5e9a6aead16ec4af2b6" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -4512,9 +4569,9 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.2" +version = "1.0.5+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" +checksum = "4c03bee5ce3696f31250db0bbaff18bc43301ce0e8db2ed1f07cbb2acf89984c" dependencies = [ "winnow 0.7.13", ] @@ -4527,9 +4584,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.2" +version = "1.0.5+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" +checksum = "a9cd6190959dce0994aa8970cd32ab116d1851ead27e866039acaf2524ce44fa" [[package]] name = "topological-sort" @@ -4558,10 +4615,10 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "bytes", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body", "iri-string", "pin-project-lite", @@ -4617,11 +4674,11 @@ dependencies = [ "slog-async", "slog-term", "tabled", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "transceiver-decode", "transceiver-messages", - "usdt 0.6.0", + "usdt", "version_check", ] @@ -4633,7 +4690,7 @@ dependencies = [ "schemars", "serde", "static_assertions", - "thiserror 2.0.16", + "thiserror 2.0.17", "transceiver-messages", ] @@ -4642,12 +4699,12 @@ name = "transceiver-messages" version = "0.1.1" source = "git+https://github.com/oxidecomputer/transceiver-control?branch=main#be885b28778b5efeb85c428bec9663c8c9b6a787" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", "clap 4.5.45", "hubpack", "schemars", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -4659,7 +4716,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tufaceous-artifact" version = "0.1.0" -source = "git+https://github.com/oxidecomputer/tufaceous?branch=main#db072743d0cfde918dcf981a064f225b0003b98d" +source = "git+https://github.com/oxidecomputer/tufaceous?branch=main#1eacfcf0cade44f77d433f31744dbee4abb96465" dependencies = [ "daft", "hex", @@ -4670,7 +4727,7 @@ dependencies = [ "serde_human_bytes", "strum 0.26.3", "test-strategy", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -4704,8 +4761,8 @@ dependencies = [ "semver 1.0.27", "serde", "serde_json", - "syn 2.0.106", - "thiserror 2.0.16", + "syn 2.0.111", + "thiserror 2.0.17", "unicode-ident", ] @@ -4722,7 +4779,7 @@ dependencies = [ "serde", "serde_json", "serde_tokenstream", - "syn 2.0.106", + "syn 2.0.111", "typify-impl", ] @@ -4797,49 +4854,19 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "usdt" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf5c47fb471a0bff3d7b17a250817bba8c6cc99b0492abaefe5b3bb99045f02" -dependencies = [ - "dof 0.3.0", - "dtrace-parser 0.2.0", - "goblin 0.8.2", - "memmap", - "serde", - "usdt-attr-macro 0.5.0", - "usdt-impl 0.5.0", - "usdt-macro 0.5.0", -] - [[package]] name = "usdt" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1953f8d8a98ac7883c230963291acb65c7ed6ae3e2e4c99d5c65f4e65cc9db38" dependencies = [ - "dof 0.4.0", - "goblin 0.10.2", + "dof", + "goblin", "memmap2", "serde", - "usdt-attr-macro 0.6.0", - "usdt-impl 0.6.0", - "usdt-macro 0.6.0", -] - -[[package]] -name = "usdt-attr-macro" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "025161fff40db24774e7757f75df74ecc47e93d7e11e0f6cdfc31b40eacfe136" -dependencies = [ - "dtrace-parser 0.2.0", - "proc-macro2", - "quote", - "serde_tokenstream", - "syn 2.0.106", - "usdt-impl 0.5.0", + "usdt-attr-macro", + "usdt-impl", + "usdt-macro", ] [[package]] @@ -4848,32 +4875,12 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55d0d673848744c556fcfe8479f87b6974459106e4c41f38375f6d559bb0ee28" dependencies = [ - "dtrace-parser 0.3.0", + "dtrace-parser", "proc-macro2", "quote", "serde_tokenstream", - "syn 2.0.106", - "usdt-impl 0.6.0", -] - -[[package]] -name = "usdt-impl" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f925814e5942ebb87af2d9fcf4c3f8665e37903f741eb11f0fa2396c6ef5f7b1" -dependencies = [ - "byteorder", - "dof 0.3.0", - "dtrace-parser 0.2.0", - "libc", - "proc-macro2", - "quote", - "serde", - "serde_json", - "syn 2.0.106", - "thiserror 1.0.69", - "thread-id 4.2.2", - "version_check", + "syn 2.0.111", + "usdt-impl", ] [[package]] @@ -4883,30 +4890,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf0085a93af1ca095d8b1dc8672cc4620fcd1db5dff8d165486067badce05555" dependencies = [ "byteorder", - "dof 0.4.0", - "dtrace-parser 0.3.0", + "dof", + "dtrace-parser", "libc", "proc-macro2", "quote", "serde", "serde_json", - "syn 2.0.106", - "thiserror 2.0.16", - "thread-id 5.0.0", -] - -[[package]] -name = "usdt-macro" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ddd86f8f3abac0b7c87f59fe82446fc96a3854a413f176dd2797ed686b7af4c" -dependencies = [ - "dtrace-parser 0.2.0", - "proc-macro2", - "quote", - "serde_tokenstream", - "syn 2.0.106", - "usdt-impl 0.5.0", + "syn 2.0.111", + "thiserror 2.0.17", + "thread-id", ] [[package]] @@ -4915,12 +4908,12 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9bf594f86b676f7e2fd3d523d50f9d0cffecff6c19729ff5dbebe86c4cb8cb2" dependencies = [ - "dtrace-parser 0.3.0", + "dtrace-parser", "proc-macro2", "quote", "serde_tokenstream", - "syn 2.0.106", - "usdt-impl 0.6.0", + "syn 2.0.111", + "usdt-impl", ] [[package]] @@ -4937,13 +4930,13 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ "getrandom 0.3.3", "js-sys", - "serde", + "serde_core", "wasm-bindgen", ] @@ -5055,7 +5048,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", "wasm-bindgen-shared", ] @@ -5090,7 +5083,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5210,7 +5203,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -5221,7 +5214,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -5292,6 +5285,15 @@ dependencies = [ "windows-targets 0.53.3", ] +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -5445,7 +5447,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.9.3", + "bitflags 2.10.0", ] [[package]] @@ -5496,49 +5498,28 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", "synstructure", ] [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ - "byteorder", - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" -dependencies = [ - "zerocopy-derive 0.8.26", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] [[package]] @@ -5558,7 +5539,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", "synstructure", ] @@ -5598,5 +5579,5 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.111", ] diff --git a/Cargo.toml b/Cargo.toml index 96cbfee..9e6fbb3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,6 +26,7 @@ protocol = { path = "protocol" } # oxide dependencies from github dpd-client = { git = "https://github.com/oxidecomputer/dendrite", branch = "main" } omicron-common = { git = "https://github.com/oxidecomputer/omicron", branch = "main" } +gateway-client = { git = "https://github.com/oxidecomputer/omicron", branch = "main" } # public dependencies from crates.io anyhow = "1.0" diff --git a/lldpd-api/src/lib.rs b/lldpd-api/src/lib.rs index b13884a..6bf9ddf 100644 --- a/lldpd-api/src/lib.rs +++ b/lldpd-api/src/lib.rs @@ -33,6 +33,7 @@ api_versions!([ // | example for the next person. // v // (next_int, IDENT), + (2, SWITCH_IDENTIFIERS), (1, INITIAL), ]); @@ -385,6 +386,24 @@ pub trait LldpdApi { async fn build_info( _rqctx: RequestContext, ) -> Result, HttpError>; + + #[endpoint { + method = GET, + path = "/switch/identifiers", + versions = VERSION_SWITCH_IDENTIFIERS.., + }] + async fn switch_identifiers( + ctx: RequestContext, + ) -> Result, HttpError>; +} + +/// Identifiers for a switch. +#[derive(Clone, Debug, JsonSchema, Serialize)] +pub struct SwitchIdentifiers { + /// The slot number of the switch being managed. + /// + /// MGS uses u16 for this internally. + pub slot: Option, } #[derive(Deserialize, Serialize, JsonSchema)] diff --git a/lldpd/Cargo.toml b/lldpd/Cargo.toml index 7406498..9c9a6ab 100644 --- a/lldpd/Cargo.toml +++ b/lldpd/Cargo.toml @@ -27,6 +27,7 @@ structopt.workspace = true thiserror.workspace = true tokio.workspace = true uuid.workspace = true +gateway-client.workspace = true [target.'cfg(target_os = "illumos")'.dependencies] dlpi = { git = "https://github.com/oxidecomputer/dlpi-sys" } diff --git a/lldpd/src/api_server.rs b/lldpd/src/api_server.rs index f0c3d13..686abad 100644 --- a/lldpd/src/api_server.rs +++ b/lldpd/src/api_server.rs @@ -37,6 +37,7 @@ use slog::debug; use slog::error; use slog::info; use slog::o; +use SwitchIdentifiers; use crate::interfaces; use crate::Global; @@ -553,6 +554,13 @@ impl LldpdApi for LldpdApiImpl { ) -> Result, HttpError> { Ok(HttpResponseOk(build_info())) } + + async fn switch_identifiers( + _rqctx: RequestContext, + ) -> Result, HttpError> { + // TODO: implement actual slot detection + Ok(HttpResponseOk(SwitchIdentifiers { slot: None })) + } } /// The API server manager is a task that is responsible for launching and diff --git a/lldpd/src/main.rs b/lldpd/src/main.rs index 664af18..13eb817 100644 --- a/lldpd/src/main.rs +++ b/lldpd/src/main.rs @@ -11,6 +11,7 @@ use std::net::SocketAddr; use std::sync::Arc; use std::sync::Mutex; +use lldpd_api::SwitchIdentifiers; use signal_hook::consts::signal::*; use signal_hook::iterator::Signals; use slog::debug; @@ -24,6 +25,7 @@ pub use types::LldpdResult; mod api_server; mod errors; mod interfaces; +mod mgs; mod types; #[cfg(feature = "dendrite")] @@ -56,6 +58,8 @@ pub struct Global { pub listen_addresses: Mutex>, /// List of interfaces we are managing pub interfaces: Mutex>>>, + /// Switch slot we are managing + pub switch_identifiers: Mutex, } unsafe impl Send for Global {} @@ -74,6 +78,7 @@ impl Global { switchinfo: Mutex::new(switchinfo), listen_addresses: Mutex::new(Vec::new()), interfaces: Mutex::new(BTreeMap::new()), + switch_identifiers: Mutex::new(SwitchIdentifiers { slot: None }), } } } @@ -138,6 +143,14 @@ pub(crate) struct Opt { about = "String to use as the SystemDescription" )] system_description: Option, + + #[structopt( + long = "mgs-addr", + short = "m", + about = "SocketAddr the MGS service is listening on.", + default_value = "[::1]:12225" + )] + mgs_addr: SocketAddr, } #[allow(unused_variables)] @@ -225,6 +238,11 @@ async fn run_lldpd(opts: Opt) -> LldpdResult<()> { _ = tokio::task::spawn(async move { dendrite::link_monitor(g).await }) } + let mgs_global = global.clone(); + _ = tokio::task::spawn(async move { + mgs::detect_switch_slot(mgs_global, opts.mgs_addr).await + }); + let (api_tx, api_rx) = tokio::sync::watch::channel(()); let api_global = global.clone(); let api_server_manager = tokio::task::spawn(async move { diff --git a/lldpd/src/mgs.rs b/lldpd/src/mgs.rs new file mode 100644 index 0000000..5c74d47 --- /dev/null +++ b/lldpd/src/mgs.rs @@ -0,0 +1,39 @@ +use std::net::SocketAddr; + +pub async fn detect_switch_slot( + global: std::sync::Arc, + mgs_socket_addr: SocketAddr, +) { + let url = format!("http://{mgs_socket_addr}"); + let client_log = global.log.new(slog::o!("unit" => "gateway-client")); + let client = gateway_client::Client::new(&url, client_log); + let g = global.clone(); + + loop { + // check in with gateway + let gateway_client::types::SpIdentifier { slot, .. } = match client + .sp_local_switch_id() + .await + { + Ok(v) => *v, + Err(e) => { + slog::error!(g.log, "failed to resolve switch slot"; "error" => %e); + tokio::time::sleep(tokio::time::Duration::from_secs(10)).await; + continue; + } + }; + + slog::info!(g.log, "we are in switch slot {slot}"); + + if let Ok(mut ids) = g.switch_identifiers.lock() { + ids.slot = Some(slot); + } else { + slog::error!( + g.log, + "failed to obtain lock for updating switch slot" + ); + continue; + } + break; + } +} From 73a628ac293c49700d30a5e55d8ae8f98cb55157 Mon Sep 17 00:00:00 2001 From: Levon Tarver Date: Wed, 17 Dec 2025 23:31:01 +0000 Subject: [PATCH 2/7] add Clone to Opt --- lldpd/src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lldpd/src/main.rs b/lldpd/src/main.rs index 13eb817..7393df5 100644 --- a/lldpd/src/main.rs +++ b/lldpd/src/main.rs @@ -99,7 +99,7 @@ enum Args { Run(Opt), } -#[derive(Debug, StructOpt)] +#[derive(Clone, Debug, StructOpt)] pub(crate) struct Opt { #[structopt(long, about = "log file")] log_file: Option, @@ -224,7 +224,7 @@ async fn run_lldpd(opts: Opt) -> LldpdResult<()> { &log, switchinfo.clone(), #[cfg(feature = "dendrite")] - dendrite::dpd_init(&log, opts).await, + dendrite::dpd_init(&log, opts.clone()).await, )); #[cfg(feature = "smf")] From 3d14906cebc07900035b1d6abb4df795f1e0efdf Mon Sep 17 00:00:00 2001 From: Levon Tarver Date: Thu, 18 Dec 2025 17:01:33 +0000 Subject: [PATCH 3/7] feed clippy --- lldpd/src/api_server.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/lldpd/src/api_server.rs b/lldpd/src/api_server.rs index 686abad..c3f8801 100644 --- a/lldpd/src/api_server.rs +++ b/lldpd/src/api_server.rs @@ -37,7 +37,6 @@ use slog::debug; use slog::error; use slog::info; use slog::o; -use SwitchIdentifiers; use crate::interfaces; use crate::Global; From 4e43f679a155c2ba9c9db2e88ac5604ed76f5873 Mon Sep 17 00:00:00 2001 From: Levon Tarver Date: Mon, 22 Dec 2025 23:48:40 +0000 Subject: [PATCH 4/7] make listen-addr configurable from cli --- lldpd/src/api_server.rs | 8 ++------ lldpd/src/main.rs | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lldpd/src/api_server.rs b/lldpd/src/api_server.rs index c3f8801..0a4c341 100644 --- a/lldpd/src/api_server.rs +++ b/lldpd/src/api_server.rs @@ -7,8 +7,6 @@ //! LLDP HTTP API types and endpoint functions. use std::collections::HashMap; -use std::net::IpAddr; -use std::net::Ipv4Addr; use std::net::SocketAddr; use std::sync::Arc; @@ -607,6 +605,7 @@ fn launch_server( // smf_rx channel, which tells us to re-evaluate the set of api_server // addresses. pub async fn api_server_manager( + listen_addr: SocketAddr, global: Arc, mut smf_rx: tokio::sync::watch::Receiver<()>, ) { @@ -619,10 +618,7 @@ pub async fn api_server_manager( let active_addrs = active.keys().cloned().collect::>(); let mut config_addrs = global.listen_addresses.lock().unwrap().to_vec(); // We always listen on localhost - config_addrs.push(SocketAddr::new( - IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), - lldpd_common::DEFAULT_LLDPD_PORT, - )); + config_addrs.push(listen_addr); // Get the list of all the addresses we should be listening on, // and compare it to the list we currently are listening on. let (add, remove) = diff --git a/lldpd/src/main.rs b/lldpd/src/main.rs index 7393df5..bb6be8f 100644 --- a/lldpd/src/main.rs +++ b/lldpd/src/main.rs @@ -7,6 +7,7 @@ use std::collections::BTreeMap; use std::collections::BTreeSet; use std::net::IpAddr; +use std::net::Ipv4Addr; use std::net::SocketAddr; use std::sync::Arc; use std::sync::Mutex; @@ -151,6 +152,13 @@ pub(crate) struct Opt { default_value = "[::1]:12225" )] mgs_addr: SocketAddr, + + #[structopt( + long = "mgs-addr", + short = "m", + about = "SocketAddr LLDPD should listening on. (default locahost:12230)" + )] + listen_addr: Option, } #[allow(unused_variables)] @@ -243,10 +251,15 @@ async fn run_lldpd(opts: Opt) -> LldpdResult<()> { mgs::detect_switch_slot(mgs_global, opts.mgs_addr).await }); + let listen_addr = opts.listen_addr.unwrap_or(SocketAddr::new( + IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), + lldpd_common::DEFAULT_LLDPD_PORT, + )); + let (api_tx, api_rx) = tokio::sync::watch::channel(()); let api_global = global.clone(); let api_server_manager = tokio::task::spawn(async move { - api_server::api_server_manager(api_global, api_rx).await + api_server::api_server_manager(listen_addr, api_global, api_rx).await }); signal_handler(global.clone(), api_tx).await; From 1f7743e5f7ce37a3315dd7d7f35dc4992c3716ff Mon Sep 17 00:00:00 2001 From: Levon Tarver Date: Tue, 23 Dec 2025 02:04:57 +0000 Subject: [PATCH 5/7] fix args --- lldpd/src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lldpd/src/main.rs b/lldpd/src/main.rs index bb6be8f..405ed40 100644 --- a/lldpd/src/main.rs +++ b/lldpd/src/main.rs @@ -154,8 +154,8 @@ pub(crate) struct Opt { mgs_addr: SocketAddr, #[structopt( - long = "mgs-addr", - short = "m", + long = "listen-addr", + short = "a", about = "SocketAddr LLDPD should listening on. (default locahost:12230)" )] listen_addr: Option, From da76bfdbb27d0dc8a6af519aa2f79c3250545a9a Mon Sep 17 00:00:00 2001 From: Levon Tarver Date: Tue, 23 Dec 2025 21:46:10 +0000 Subject: [PATCH 6/7] add binaries to buildomat uploads --- .github/buildomat/jobs/linux.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/buildomat/jobs/linux.sh b/.github/buildomat/jobs/linux.sh index 12e98ed..bda6d5b 100755 --- a/.github/buildomat/jobs/linux.sh +++ b/.github/buildomat/jobs/linux.sh @@ -18,6 +18,16 @@ #: name = "lldp-0.1.0.deb.sha256.txt" #: from_output = "lldp-0.1.0.deb.sha256.txt" #: +#: [[publish]] +#: series = "linux" +#: name = "lldpd" +#: from_output = "lldpd" +#: +#: [[publish]] +#: series = "linux" +#: name = "lldpadm" +#: from_output = "lldpadm" +#: set -o errexit set -o pipefail @@ -42,6 +52,10 @@ cargo build --release banner "Artifacts" pfexec mkdir -p /out pfexec chown "$UID" /out + +cp target/release/lldpadm /out/ +cp target/release/lldpd /out/ + cargo xtask dist --release cp lldp-0.1.0.deb /out/ sha256sum lldp-0.1.0.deb | sed "s/ .*//" > /out/lldp-0.1.0.deb.sha256.txt From 5d0d617d4c7a902aef1371efa71eae952e10dc92 Mon Sep 17 00:00:00 2001 From: Levon Tarver Date: Tue, 23 Dec 2025 23:09:43 +0000 Subject: [PATCH 7/7] use fully qualified output file path in ci job --- .github/buildomat/jobs/linux.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/buildomat/jobs/linux.sh b/.github/buildomat/jobs/linux.sh index bda6d5b..5c6a045 100755 --- a/.github/buildomat/jobs/linux.sh +++ b/.github/buildomat/jobs/linux.sh @@ -11,22 +11,22 @@ #: [[publish]] #: series = "linux" #: name = "lldp-0.1.0.deb" -#: from_output = "lldp-0.1.0.deb" +#: from_output = "/out/lldp-0.1.0.deb" #: #: [[publish]] #: series = "linux" #: name = "lldp-0.1.0.deb.sha256.txt" -#: from_output = "lldp-0.1.0.deb.sha256.txt" +#: from_output = "/out/lldp-0.1.0.deb.sha256.txt" #: #: [[publish]] #: series = "linux" #: name = "lldpd" -#: from_output = "lldpd" +#: from_output = "/out/lldpd" #: #: [[publish]] #: series = "linux" #: name = "lldpadm" -#: from_output = "lldpadm" +#: from_output = "/out/lldpadm" #: set -o errexit