From 157c50355b07dd24ec2a3293e2681b7826f103d7 Mon Sep 17 00:00:00 2001 From: Shuning Date: Wed, 18 Mar 2026 14:02:29 +0800 Subject: [PATCH 1/4] add gateway mac addresses to the header add gateway mac addresses to the header --- core/Cargo.lock | 180 +++++++++++++++++++++++++++++- core/domain-http/Cargo.toml | 4 +- core/domain-http/src/discovery.rs | 25 +++++ 3 files changed, 204 insertions(+), 5 deletions(-) diff --git a/core/Cargo.lock b/core/Cargo.lock index 0cb7bb35..38dc5a8d 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -1196,6 +1196,23 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "default-net" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c5a6569a908354d49b10db3c516d69aca1eccd97562fd31c98b13f00b73ca66" +dependencies = [ + "dlopen2", + "libc", + "memalloc", + "netlink-packet-core", + "netlink-packet-route", + "netlink-sys", + "once_cell", + "system-configuration 0.5.1", + "windows 0.48.0", +] + [[package]] name = "der" version = "0.7.10" @@ -1288,6 +1305,17 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "dlopen2" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b4f5f101177ff01b8ec4ecc81eead416a8aa42819a2869311b3420fa114ffa" +dependencies = [ + "libc", + "once_cell", + "winapi", +] + [[package]] name = "dotenvy" version = "0.15.7" @@ -2269,9 +2297,9 @@ dependencies = [ "netlink-proto", "netlink-sys", "rtnetlink", - "system-configuration", + "system-configuration 0.6.1", "tokio", - "windows", + "windows 0.53.0", ] [[package]] @@ -2376,6 +2404,15 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "ipnetwork" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" +dependencies = [ + "serde", +] + [[package]] name = "iri-string" version = "0.7.8" @@ -3241,6 +3278,12 @@ dependencies = [ "digest", ] +[[package]] +name = "memalloc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df39d232f5c40b0891c10216992c2f250c054105cb1e56f0fc9032db6203ecc1" + [[package]] name = "memchr" version = "2.7.5" @@ -3462,6 +3505,12 @@ dependencies = [ "pin-utils", ] +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + [[package]] name = "nohash-hasher" version = "0.2.0" @@ -3794,6 +3843,97 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +[[package]] +name = "pnet" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "682396b533413cc2e009fbb48aadf93619a149d3e57defba19ff50ce0201bd0d" +dependencies = [ + "ipnetwork", + "pnet_base", + "pnet_datalink", + "pnet_packet", + "pnet_sys", + "pnet_transport", +] + +[[package]] +name = "pnet_base" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" +dependencies = [ + "no-std-net", +] + +[[package]] +name = "pnet_datalink" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79e70ec0be163102a332e1d2d5586d362ad76b01cec86f830241f2b6452a7b7" +dependencies = [ + "ipnetwork", + "libc", + "pnet_base", + "pnet_sys", + "winapi", +] + +[[package]] +name = "pnet_macros" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.106", +] + +[[package]] +name = "pnet_macros_support" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" +dependencies = [ + "pnet_base", +] + +[[package]] +name = "pnet_packet" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" +dependencies = [ + "glob", + "pnet_base", + "pnet_macros", + "pnet_macros_support", +] + +[[package]] +name = "pnet_sys" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d4643d3d4db6b08741050c2f3afa9a892c4244c085a72fcda93c9c2c9a00f4b" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "pnet_transport" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f604d98bc2a6591cf719b58d3203fd882bdd6bf1db696c4ac97978e9f4776bf" +dependencies = [ + "libc", + "pnet_base", + "pnet_packet", + "pnet_sys", +] + [[package]] name = "polling" version = "3.10.0" @@ -3927,13 +4067,15 @@ dependencies = [ [[package]] name = "posemesh-domain-http" -version = "1.5.2" +version = "1.5.3" dependencies = [ "base64 0.22.1", "bytes", "console_error_panic_hook", + "default-net", "dotenvy", "futures", + "pnet", "posemesh-utils", "reqwest", "serde", @@ -5237,6 +5379,17 @@ dependencies = [ "syn 2.0.106", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys 0.5.0", +] + [[package]] name = "system-configuration" version = "0.6.1" @@ -5245,7 +5398,17 @@ checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.9.4", "core-foundation", - "system-configuration-sys", + "system-configuration-sys 0.6.0", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", ] [[package]] @@ -6527,6 +6690,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows" version = "0.53.0" diff --git a/core/domain-http/Cargo.toml b/core/domain-http/Cargo.toml index 0265ad8b..4fa52791 100644 --- a/core/domain-http/Cargo.toml +++ b/core/domain-http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "posemesh-domain-http" -version = "1.5.2" +version = "1.5.3" edition = "2024" repository = "https://github.com/aukilabs/posemesh/tree/main/core" description = "HTTP client library for interacting with AukiLabs domain data services, supporting both native and WebAssembly targets." @@ -19,6 +19,8 @@ bytes = "1.10.1" thiserror.workspace = true [target.'cfg(not(target_family="wasm"))'.dependencies] +pnet = "0.35.0" +default-net = "0.22.0" tokio = { workspace = true, features = ["full"] } uniffi = { workspace = true, optional = true } diff --git a/core/domain-http/src/discovery.rs b/core/domain-http/src/discovery.rs index a083694b..85fcb8a8 100644 --- a/core/domain-http/src/discovery.rs +++ b/core/domain-http/src/discovery.rs @@ -81,6 +81,25 @@ pub struct CreateDomainRequest { domain_server_url: String, } +/// Returns the gateway MAC address on native targets. On WASM/browser this always returns +/// empty string — browsers cannot access network interfaces, gateway, or MAC addresses. +fn get_mac_address() -> Result { + #[cfg(not(target_family = "wasm"))] + { + match default_net::get_default_gateway() { + Ok(gateway) => Ok(gateway.mac_addr.to_string()), + Err(_) => return Err(DomainError::InvalidRequest("No gateway found")), + } + } + + #[cfg(target_family = "wasm")] + { + // Browsers cannot access network interfaces, gateway IP, or MAC addresses. + // Return empty string so auth still works; server may use other identifiers. + Ok(String::new()) + } +} + impl DiscoveryService { pub fn new(api_url: &str, dds_url: &str, client_id: &str) -> Self { let api_client = AuthClient::new(api_url, client_id); @@ -134,6 +153,7 @@ impl DiscoveryService { .header("Content-Type", "application/json") .header("posemesh-client-id", self.api_client.client_id.clone()) .header("posemesh-sdk-version", crate::VERSION) + .header("posemesh-gateway-mac", get_mac_address().unwrap_or_default()) .send() .await?; @@ -260,12 +280,14 @@ impl DiscoveryService { let dds_url = self.dds_url.clone(); let client_id = self.api_client.client_id.clone(); async move { + let mac_address = get_mac_address().unwrap_or_default(); let response = client .post(format!("{}/api/v1/domains/{}/auth", dds_url, domain_id)) .bearer_auth(access_token) .header("Content-Type", "application/json") .header("posemesh-client-id", client_id) .header("posemesh-sdk-version", crate::VERSION) + .header("posemesh-gateway-mac", mac_address) .send() .await?; @@ -321,6 +343,7 @@ impl DiscoveryService { .header("Content-Type", "application/json") .header("posemesh-client-id", self.api_client.client_id.clone()) .header("posemesh-sdk-version", crate::VERSION) + .header("posemesh-gateway-mac", get_mac_address().unwrap_or_default()) .json(&CreateDomainRequest { name: name.to_string(), domain_server_id: domain_server_id.to_string(), @@ -384,6 +407,7 @@ impl DiscoveryService { .header("Content-Type", "application/json") .header("posemesh-client-id", self.api_client.client_id.clone()) .header("posemesh-sdk-version", crate::VERSION) + .header("posemesh-gateway-mac", get_mac_address().unwrap_or_default()) .send() .await?; if response.status().is_success() { @@ -415,6 +439,7 @@ impl DiscoveryService { .header("Content-Type", "application/json") .header("posemesh-client-id", self.api_client.client_id.clone()) .header("posemesh-sdk-version", crate::VERSION) + .header("posemesh-gateway-mac", get_mac_address().unwrap_or_default()) .send() .await?; if response.status().is_success() { From fbb5454ee27d5211e41496e9e3c57c769f7b48f9 Mon Sep 17 00:00:00 2001 From: Shuning Date: Thu, 19 Mar 2026 10:35:05 +0800 Subject: [PATCH 2/4] removed pnet and updated CHANGELOG --- core/Cargo.lock | 107 ---------------------------------- core/domain-http/CHANGELOG.md | 5 ++ core/domain-http/Cargo.toml | 1 - 3 files changed, 5 insertions(+), 108 deletions(-) diff --git a/core/Cargo.lock b/core/Cargo.lock index 38dc5a8d..f502fd84 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -2404,15 +2404,6 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" -[[package]] -name = "ipnetwork" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" -dependencies = [ - "serde", -] - [[package]] name = "iri-string" version = "0.7.8" @@ -3505,12 +3496,6 @@ dependencies = [ "pin-utils", ] -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - [[package]] name = "nohash-hasher" version = "0.2.0" @@ -3843,97 +3828,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" -[[package]] -name = "pnet" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "682396b533413cc2e009fbb48aadf93619a149d3e57defba19ff50ce0201bd0d" -dependencies = [ - "ipnetwork", - "pnet_base", - "pnet_datalink", - "pnet_packet", - "pnet_sys", - "pnet_transport", -] - -[[package]] -name = "pnet_base" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" -dependencies = [ - "no-std-net", -] - -[[package]] -name = "pnet_datalink" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79e70ec0be163102a332e1d2d5586d362ad76b01cec86f830241f2b6452a7b7" -dependencies = [ - "ipnetwork", - "libc", - "pnet_base", - "pnet_sys", - "winapi", -] - -[[package]] -name = "pnet_macros" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 2.0.106", -] - -[[package]] -name = "pnet_macros_support" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" -dependencies = [ - "pnet_base", -] - -[[package]] -name = "pnet_packet" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" -dependencies = [ - "glob", - "pnet_base", - "pnet_macros", - "pnet_macros_support", -] - -[[package]] -name = "pnet_sys" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d4643d3d4db6b08741050c2f3afa9a892c4244c085a72fcda93c9c2c9a00f4b" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "pnet_transport" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f604d98bc2a6591cf719b58d3203fd882bdd6bf1db696c4ac97978e9f4776bf" -dependencies = [ - "libc", - "pnet_base", - "pnet_packet", - "pnet_sys", -] - [[package]] name = "polling" version = "3.10.0" @@ -4075,7 +3969,6 @@ dependencies = [ "default-net", "dotenvy", "futures", - "pnet", "posemesh-utils", "reqwest", "serde", diff --git a/core/domain-http/CHANGELOG.md b/core/domain-http/CHANGELOG.md index 388167bd..65bbf24e 100644 --- a/core/domain-http/CHANGELOG.md +++ b/core/domain-http/CHANGELOG.md @@ -1,3 +1,8 @@ +## v1.5.3 + +### Features +- Set gateway mac addres to request header + ## v1.5.2 ### Features diff --git a/core/domain-http/Cargo.toml b/core/domain-http/Cargo.toml index 4fa52791..951775a0 100644 --- a/core/domain-http/Cargo.toml +++ b/core/domain-http/Cargo.toml @@ -19,7 +19,6 @@ bytes = "1.10.1" thiserror.workspace = true [target.'cfg(not(target_family="wasm"))'.dependencies] -pnet = "0.35.0" default-net = "0.22.0" tokio = { workspace = true, features = ["full"] } uniffi = { workspace = true, optional = true } From f806d521f3de98fb0b972806371a7c74e1a70ade Mon Sep 17 00:00:00 2001 From: Shuning Date: Thu, 19 Mar 2026 10:46:22 +0800 Subject: [PATCH 3/4] fmt --- core/domain-http/src/discovery.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/core/domain-http/src/discovery.rs b/core/domain-http/src/discovery.rs index 85fcb8a8..098c8ae6 100644 --- a/core/domain-http/src/discovery.rs +++ b/core/domain-http/src/discovery.rs @@ -153,7 +153,10 @@ impl DiscoveryService { .header("Content-Type", "application/json") .header("posemesh-client-id", self.api_client.client_id.clone()) .header("posemesh-sdk-version", crate::VERSION) - .header("posemesh-gateway-mac", get_mac_address().unwrap_or_default()) + .header( + "posemesh-gateway-mac", + get_mac_address().unwrap_or_default(), + ) .send() .await?; @@ -343,7 +346,10 @@ impl DiscoveryService { .header("Content-Type", "application/json") .header("posemesh-client-id", self.api_client.client_id.clone()) .header("posemesh-sdk-version", crate::VERSION) - .header("posemesh-gateway-mac", get_mac_address().unwrap_or_default()) + .header( + "posemesh-gateway-mac", + get_mac_address().unwrap_or_default(), + ) .json(&CreateDomainRequest { name: name.to_string(), domain_server_id: domain_server_id.to_string(), @@ -407,7 +413,10 @@ impl DiscoveryService { .header("Content-Type", "application/json") .header("posemesh-client-id", self.api_client.client_id.clone()) .header("posemesh-sdk-version", crate::VERSION) - .header("posemesh-gateway-mac", get_mac_address().unwrap_or_default()) + .header( + "posemesh-gateway-mac", + get_mac_address().unwrap_or_default(), + ) .send() .await?; if response.status().is_success() { @@ -439,7 +448,10 @@ impl DiscoveryService { .header("Content-Type", "application/json") .header("posemesh-client-id", self.api_client.client_id.clone()) .header("posemesh-sdk-version", crate::VERSION) - .header("posemesh-gateway-mac", get_mac_address().unwrap_or_default()) + .header( + "posemesh-gateway-mac", + get_mac_address().unwrap_or_default(), + ) .send() .await?; if response.status().is_success() { From e3b8f19d77f44e96ef6003ad90f7a98904cf97e2 Mon Sep 17 00:00:00 2001 From: Shuning Date: Thu, 19 Mar 2026 11:03:10 +0800 Subject: [PATCH 4/4] clippy --- core/domain-http/src/discovery.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/domain-http/src/discovery.rs b/core/domain-http/src/discovery.rs index 098c8ae6..06c30ed6 100644 --- a/core/domain-http/src/discovery.rs +++ b/core/domain-http/src/discovery.rs @@ -88,7 +88,7 @@ fn get_mac_address() -> Result { { match default_net::get_default_gateway() { Ok(gateway) => Ok(gateway.mac_addr.to_string()), - Err(_) => return Err(DomainError::InvalidRequest("No gateway found")), + Err(_) => Err(DomainError::InvalidRequest("No gateway found")), } }