On-device diagnosis (phone on adb, 5G): mesh sessions established but no packet ever entered the tunnel — Android hands the VpnService TUN fd over non-blocking, and the fips fork's dedicated blocking-read thread treats EAGAIN as fatal, dying at startup. archy-fips-core now forces the fd into blocking mode before Node::start_with_tun_fd. Verified on-device: reader survives, packets flow into the mesh, and the 30s anchor-link flap is gone (stable 8+ min on 5G). Also setMetered(false): Android 10+ defaults VPNs to metered, flipping the phone into data-restricted behaviour whenever the mesh is up. Served APK: 0.5.4 (vc24). Handoff updated with the remaining node-side blocker: phone->anchor works, phone->node ULA gets no reply — needs fipsctl introspection on Framework PT (suspect fork/daemon session or routing mismatch). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
46 lines
1.8 KiB
TOML
46 lines
1.8 KiB
TOML
# Embedded FIPS mesh node for the Archipelago companion app.
|
|
#
|
|
# Built for Android via cargo-ndk (see Android/app/build.gradle.kts, task
|
|
# buildRustArm64) into app/src/main/jniLibs/arm64-v8a/libarchy_fips_core.so.
|
|
# Also builds on the host so `cargo test` covers the non-JNI logic.
|
|
#
|
|
# `fips` is pinned to the fips-native fork rev that this integration was
|
|
# developed against — the fork carries Android support upstream lacks
|
|
# (Tun::from_fd for a VpnService-owned fd, cfg(target_os = "android") paths).
|
|
# Override with a local checkout when hacking on fips itself:
|
|
# CARGO_NET_OFFLINE=false cargo ndk ... --config 'patch."https://github.com/9qeklajc/fips-native".fips.path="/path/to/fips-native/fips"'
|
|
[package]
|
|
name = "archy-fips-core"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
license = "MIT"
|
|
publish = false
|
|
|
|
[lib]
|
|
name = "archy_fips_core"
|
|
# rlib for host tests; cdylib for the Android shared library.
|
|
crate-type = ["lib", "cdylib"]
|
|
|
|
[dependencies]
|
|
# default-features drops the ratatui TUI; tun-support enables Node::start_with_tun_fd.
|
|
fips = { git = "https://github.com/9qeklajc/fips-native", rev = "46494a74fc85b878305d275d42ab719082b06ba6", default-features = false, features = ["tun-support"] }
|
|
anyhow = "1.0"
|
|
serde_json = "1.0"
|
|
hex = "0.4"
|
|
# OS CSPRNG for identity generation (crypto rule: no thread-local RNG for keys).
|
|
getrandom = "0.2"
|
|
tokio = { version = "1", features = ["rt-multi-thread", "sync", "time", "macros"] }
|
|
tracing = "0.1"
|
|
# fcntl: force the VpnService TUN fd into blocking mode (see mesh::start).
|
|
libc = "0.2"
|
|
|
|
# The JNI surface only exists on Android; host builds skip it and drive the
|
|
# mesh module directly (tests).
|
|
[target.'cfg(target_os = "android")'.dependencies]
|
|
jni = "0.21"
|
|
# Bridge `tracing` (ours + fips) to logcat: `adb logcat -s archy-fips`.
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
paranoid-android = "0.2"
|
|
|
|
[workspace]
|