Refactor: Integrate portable-atomic to transparently emulate 64-bit atomics on 32-bit router architectures like MIPS and ensure absolute hardware-independent metrics tracking

This commit is contained in:
ospab 2026-05-15 00:11:28 +03:00
parent 4e8513b597
commit 0d414e5000
7 changed files with 25 additions and 50 deletions

61
Cargo.lock generated
View File

@ -105,10 +105,10 @@ dependencies = [
]
[[package]]
name = "autocfg"
version = "1.5.0"
name = "base64"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "blake2"
@ -463,12 +463,6 @@ dependencies = [
"windows-link",
]
[[package]]
name = "libm"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
[[package]]
name = "log"
version = "0.4.29"
@ -492,16 +486,6 @@ dependencies = [
"windows-sys 0.61.2",
]
[[package]]
name = "num-traits"
version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
"libm",
]
[[package]]
name = "once_cell"
version = "1.21.4"
@ -522,9 +506,10 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
[[package]]
name = "ostp"
version = "0.1.0"
version = "0.1.20"
dependencies = [
"anyhow",
"base64",
"clap",
"ostp-client",
"ostp-server",
@ -536,12 +521,12 @@ dependencies = [
[[package]]
name = "ostp-client"
version = "0.1.0"
version = "0.1.20"
dependencies = [
"anyhow",
"bytes",
"ostp-core",
"ostp-obfuscator",
"portable-atomic",
"rand",
"serde",
"serde_json",
@ -552,7 +537,7 @@ dependencies = [
[[package]]
name = "ostp-core"
version = "0.1.0"
version = "0.1.20"
dependencies = [
"anyhow",
"async-trait",
@ -576,29 +561,19 @@ dependencies = [
"lazy_static",
"ostp-client",
"ostp-core",
"portable-atomic",
"serde",
"serde_json",
"tokio",
]
[[package]]
name = "ostp-obfuscator"
version = "0.1.0"
dependencies = [
"bytes",
"rand",
"rand_distr",
"thiserror",
]
[[package]]
name = "ostp-server"
version = "0.1.0"
version = "0.1.20"
dependencies = [
"anyhow",
"bytes",
"ostp-core",
"ostp-obfuscator",
"rand",
"serde",
"serde_json",
@ -635,6 +610,12 @@ dependencies = [
"universal-hash",
]
[[package]]
name = "portable-atomic"
version = "1.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
[[package]]
name = "ppv-lite86"
version = "0.2.21"
@ -692,16 +673,6 @@ dependencies = [
"getrandom",
]
[[package]]
name = "rand_distr"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
dependencies = [
"num-traits",
"rand",
]
[[package]]
name = "rustc_version"
version = "0.4.1"

View File

@ -25,3 +25,4 @@ tokio = { version = "1.37", features = ["rt-multi-thread", "macros", "net", "tim
tracing = "0.1"
x25519-dalek = "2"
sha2 = "0.10"
portable-atomic = "1.10"

View File

@ -13,6 +13,7 @@ ostp-core = { path = "../ostp-core" }
rand.workspace = true
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
portable-atomic.workspace = true
[target.'cfg(target_os = "windows")'.dependencies]
wintun = "0.4.0"

View File

@ -1,5 +1,6 @@
use std::time::{Duration, SystemTime};
use std::sync::atomic::{AtomicU64, Ordering};
use std::sync::atomic::Ordering;
use portable_atomic::AtomicU64;
use std::sync::Arc;
use anyhow::{Context, Result};

View File

@ -74,8 +74,8 @@ pub async fn run_client(config: crate::config::ClientConfig) -> Result<()> {
let (client_msgs_tx, client_msgs_rx) = mpsc::channel(10000);
let metrics = Arc::new(BridgeMetrics {
bytes_sent: std::sync::atomic::AtomicU64::new(0),
bytes_recv: std::sync::atomic::AtomicU64::new(0),
bytes_sent: portable_atomic::AtomicU64::new(0),
bytes_recv: portable_atomic::AtomicU64::new(0),
});
let bridge = Bridge::new(&config, metrics)?;

View File

@ -17,3 +17,4 @@ ostp-client = { path = "../ostp-client" }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
lazy_static = "1.4"
portable-atomic = { workspace = true }

View File

@ -78,8 +78,8 @@ pub extern "system" fn Java_net_ostp_client_OstpClientSdk_startClient(
let (client_msgs_tx, client_msgs_rx) = mpsc::channel(512);
let metrics = Arc::new(BridgeMetrics {
bytes_sent: std::sync::atomic::AtomicU64::new(0),
bytes_recv: std::sync::atomic::AtomicU64::new(0),
bytes_sent: portable_atomic::AtomicU64::new(0),
bytes_recv: portable_atomic::AtomicU64::new(0),
});
let bridge = match Bridge::new(&config, Arc::clone(&metrics)) {