diff --git a/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelService.kt b/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelService.kt index 8a990179f..9e676eca5 100644 --- a/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelService.kt +++ b/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelService.kt @@ -144,6 +144,9 @@ class TunnelService: VpnService() { token = config.token, deviceId = deviceId(), logDir = getLogDir(), + // TODO: make logging string depend on build config #2067 + // Docs on filter strings: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html + logFilter = "connlib_android=info,firezone_tunnel=info,libs_common=info,firezone_client_connlib=info,warn", callback = callback ) Log.d(TAG, "connlib session started! sessionPtr: $sessionPtr") diff --git a/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelSession.kt b/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelSession.kt index 2ba65769a..1e9050a15 100644 --- a/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelSession.kt +++ b/kotlin/android/app/src/main/java/dev/firezone/android/tunnel/TunnelSession.kt @@ -1,6 +1,6 @@ package dev.firezone.android.tunnel object TunnelSession { - external fun connect(controlPlaneUrl: String, token: String, deviceId: String, logDir: String, callback: Any): Long + external fun connect(controlPlaneUrl: String, token: String, deviceId: String, logDir: String, logFilter: String, callback: Any): Long external fun disconnect(session: Long): Boolean } diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 18b56f3b8..16440666a 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -126,18 +126,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.6.10" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5" -dependencies = [ - "memchr", -] - -[[package]] -name = "aho-corasick" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" +checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab" dependencies = [ "memchr", ] @@ -179,9 +170,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea" +checksum = "b84bf0a05bbb2a83e5eb6fa36bb6e87baa08193c35ff52bbf6b38d8af2890e46" [[package]] name = "anstyle-parse" @@ -309,7 +300,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -320,7 +311,7 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -553,9 +544,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "bytecodec" @@ -734,7 +725,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -960,7 +951,7 @@ checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -1065,7 +1056,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -1079,19 +1070,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "dmidecode" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bbcc83e06814bcafa454ec0586c41d3000db69c0451208119270c05b840247" -dependencies = [ - "aho-corasick 0.6.10", - "bitflags 1.3.2", - "failure", - "failure_derive", - "lazy_static", -] - [[package]] name = "domain" version = "0.8.1" @@ -1177,28 +1155,6 @@ dependencies = [ "libc", ] -[[package]] -name = "failure" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" -dependencies = [ - "backtrace", - "failure_derive", -] - -[[package]] -name = "failure_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", -] - [[package]] name = "fastrand" version = "2.0.0" @@ -1360,7 +1316,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -1398,12 +1354,10 @@ name = "gateway" version = "0.1.0" dependencies = [ "anyhow", - "ctrlc", + "clap", "firezone-gateway-connlib", - "ip_network", + "headless-utils", "tracing", - "tracing-subscriber", - "url", ] [[package]] @@ -1505,13 +1459,21 @@ name = "headless" version = "0.1.0" dependencies = [ "anyhow", + "clap", + "firezone-client-connlib", + "headless-utils", + "tracing", +] + +[[package]] +name = "headless-utils" +version = "0.1.0" +dependencies = [ "clap", "ctrlc", - "dmidecode", "firezone-client-connlib", "ip_network", "tracing", - "tracing-appender", "tracing-subscriber", "url", ] @@ -1524,9 +1486,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -1945,9 +1907,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" [[package]] name = "lock_api" @@ -2488,7 +2450,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -2537,7 +2499,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -2592,9 +2554,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" dependencies = [ "unicode-ident", ] @@ -2743,7 +2705,7 @@ version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ - "aho-corasick 1.0.5", + "aho-corasick", "memchr", "regex-automata 0.3.8", "regex-syntax 0.7.5", @@ -2764,7 +2726,7 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" dependencies = [ - "aho-corasick 1.0.5", + "aho-corasick", "memchr", "regex-syntax 0.7.5", ] @@ -2920,9 +2882,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.12" +version = "0.38.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf14a7a466ce88b5eac3da815b53aefc208ce7e74d1c263aabb04d88c4abeb1" +checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f" dependencies = [ "bitflags 2.4.0", "errno", @@ -2952,7 +2914,7 @@ checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" dependencies = [ "log", "ring", - "rustls-webpki 0.101.4", + "rustls-webpki 0.101.6", "sct 0.7.0", ] @@ -2979,9 +2941,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.100.2" +version = "0.100.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab" +checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3" dependencies = [ "ring", "untrusted 0.7.1", @@ -2989,9 +2951,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.101.4" +version = "0.101.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" +checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe" dependencies = [ "ring", "untrusted 0.7.1", @@ -3136,7 +3098,7 @@ checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -3158,9 +3120,9 @@ checksum = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -3223,9 +3185,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" [[package]] name = "smbios-lib" @@ -3303,7 +3265,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -3314,7 +3276,7 @@ checksum = "a60bcaff7397072dca0017d1db428e30d5002e00b6847703e2e42005c95fbe00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -3422,9 +3384,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.31" +version = "2.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" +checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" dependencies = [ "proc-macro2", "quote", @@ -3464,9 +3426,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" dependencies = [ "winapi-util", ] @@ -3480,7 +3442,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -3500,7 +3462,7 @@ checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -3593,7 +3555,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -3635,9 +3597,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" dependencies = [ "bytes", "futures-core", @@ -3754,7 +3716,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] [[package]] @@ -3853,6 +3815,7 @@ dependencies = [ "matchers", "nu-ansi-term", "once_cell", + "parking_lot", "regex", "serde", "serde_json", @@ -3914,7 +3877,7 @@ dependencies = [ "log", "rand", "rustls 0.21.7", - "sha1 0.10.5", + "sha1 0.10.6", "thiserror", "url", "utf-8", @@ -3941,9 +3904,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unarray" @@ -3959,9 +3922,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -3974,9 +3937,9 @@ dependencies = [ [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -4121,7 +4084,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", "wasm-bindgen-shared", ] @@ -4143,7 +4106,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4190,7 +4153,7 @@ version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" dependencies = [ - "rustls-webpki 0.100.2", + "rustls-webpki 0.100.3", ] [[package]] @@ -4273,7 +4236,7 @@ dependencies = [ "rustls 0.19.1", "sec1", "serde", - "sha1 0.10.5", + "sha1 0.10.6", "sha2", "subtle", "thiserror", @@ -4362,7 +4325,7 @@ dependencies = [ "log", "rtcp", "rtp", - "sha1 0.10.5", + "sha1 0.10.6", "subtle", "thiserror", "tokio", @@ -4419,9 +4382,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -4679,5 +4642,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.31", + "syn 2.0.37", ] diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 986826490..8d5dc43d2 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -2,6 +2,7 @@ members = [ "relay", "phoenix-channel", + "connlib/headless-utils", "connlib/clients/android", "connlib/clients/apple", "connlib/clients/headless", @@ -17,11 +18,12 @@ boringtun = { git = "https://github.com/firezone/boringtun", branch = "master", chrono = { version = "0.4", default-features = false, features = ["std", "clock", "oldtime", "serde"] } swift-bridge = "0.1.52" backoff = { version = "0.4", features = ["tokio"] } +tracing = { version = "0.1.37" } +tracing-subscriber = { version = "0.3.17", features = ["parking_lot"] } # Patched to use https://github.com/rust-lang/cc-rs/pull/708 # (the `patch` section can't be used for build deps...) [patch.crates-io] -webrtc = { git = "https://github.com/firezone/webrtc", branch = "master" } # It seems that this contains a dependency that no longer points to a valid ref, so we'll try our luck with # the mainline versions. The error from GH actions build pipeline copied here: @@ -36,3 +38,7 @@ webrtc = { git = "https://github.com/firezone/webrtc", branch = "master" } # object not found - no match for id (4ca92100c25ac2df679f0cce11c4c3e830f2e455); class=Odb (9); code=NotFound (-3) # # ring = { git = "https://github.com/firezone/ring", branch = "v0.16.20-cc-fix" } +webrtc = { git = "https://github.com/firezone/webrtc", branch = "master" } + +[profile.release] +strip = true diff --git a/rust/connlib/clients/android/Cargo.toml b/rust/connlib/clients/android/Cargo.toml index 529e57728..8bd5dd0e5 100644 --- a/rust/connlib/clients/android/Cargo.toml +++ b/rust/connlib/clients/android/Cargo.toml @@ -13,8 +13,8 @@ mock = ["firezone-client-connlib/mock"] [dependencies] tracing-android = "0.2" -tracing = { version = "0.1", features = ["std", "attributes"] } -tracing-subscriber = "0.3" +tracing = { workspace = true, features = ["std", "attributes"] } +tracing-subscriber = { workspace = true } tracing-appender = "0.2" firezone-client-connlib = { path = "../../libs/client" } jni = { version = "0.21.1", features = ["invocation"] } @@ -22,3 +22,6 @@ ip_network = "0.4" log = "0.4" serde_json = "1" thiserror = "1" + +[target.'cfg(target_os = "android")'.dependencies] +tracing-android = "0.2" diff --git a/rust/connlib/clients/android/src/lib.rs b/rust/connlib/clients/android/src/lib.rs index 3bd3bf680..1bcd4b8c9 100644 --- a/rust/connlib/clients/android/src/lib.rs +++ b/rust/connlib/clients/android/src/lib.rs @@ -81,9 +81,23 @@ fn call_method( .map_err(|source| CallbackError::CallMethodFailed { name, source }) } -fn init_logging(log_dir: PathBuf) { - static LOGGING_GUARD: OnceLock = OnceLock::new(); +#[cfg(target_os = "android")] +fn android_layer() -> impl tracing_subscriber::Layer +where + S: tracing::Subscriber + for<'span> tracing_subscriber::registry::LookupSpan<'span>, +{ + tracing_android::layer("connlib").unwrap() +} +#[cfg(not(target_os = "android"))] +fn android_layer() -> impl tracing_subscriber::Layer +where + S: tracing::Subscriber, +{ + tracing_subscriber::layer::Identity::new() +} + +fn init_logging(log_dir: PathBuf, log_filter: String) { // On Android, logging state is persisted indefinitely after the System.loadLibrary // call, which means that a disconnect and tunnel process restart will not // reinitialize the guard. This is a problem because the guard remains tied to @@ -92,11 +106,12 @@ fn init_logging(log_dir: PathBuf) { // // So we use a static variable to track whether the guard has been initialized and avoid // re-initialized it if so. + static LOGGING_GUARD: OnceLock = OnceLock::new(); if LOGGING_GUARD.get().is_some() { return; } - let (file_layer, guard) = file_logger::layer(log_dir); + let (file_layer, guard) = file_logger::layer(log_dir, log_filter); LOGGING_GUARD .set(guard) @@ -104,7 +119,7 @@ fn init_logging(log_dir: PathBuf) { let _ = tracing_subscriber::registry() .with(file_layer) - .with(tracing_android::layer("connlib").unwrap()) + .with(android_layer()) .try_init(); } @@ -304,48 +319,39 @@ enum ConnectError { ConnectFailed(#[from] Error), } +macro_rules! string_from_jstring { + ($env:expr, $j:ident) => { + String::from( + ($env) + .get_string(&($j)) + .map_err(|source| ConnectError::StringInvalid { + name: stringify!($j), + source, + })?, + ) + }; +} + fn connect( env: &mut JNIEnv, portal_url: JString, portal_token: JString, device_id: JString, log_dir: JString, + log_filter: JString, callback_handler: GlobalRef, ) -> Result, ConnectError> { - let portal_url = String::from(env.get_string(&portal_url).map_err(|source| { - ConnectError::StringInvalid { - name: "portal_url", - source, - } - })?); - let portal_token = String::from(env.get_string(&portal_token).map_err(|source| { - ConnectError::StringInvalid { - name: "portal_token", - source, - } - })?); - let device_id = - String::from( - env.get_string(&device_id) - .map_err(|source| ConnectError::StringInvalid { - name: "device_id", - source, - })?, - ); - let log_dir = - String::from( - env.get_string(&log_dir) - .map_err(|source| ConnectError::StringInvalid { - name: "log_dir", - source, - })?, - ); + let portal_url = string_from_jstring!(env, portal_url); + let portal_token = string_from_jstring!(env, portal_token); + let device_id = string_from_jstring!(env, device_id); + let log_dir = string_from_jstring!(env, log_dir); + let log_filter = string_from_jstring!(env, log_filter); let callback_handler = CallbackHandler { vm: env.get_java_vm().map_err(ConnectError::GetJavaVmFailed)?, callback_handler, }; - init_logging(log_dir.into()); + init_logging(log_dir.into(), log_filter.into()); Session::connect( portal_url.as_str(), @@ -368,6 +374,7 @@ pub unsafe extern "system" fn Java_dev_firezone_android_tunnel_TunnelSession_con portal_token: JString, device_id: JString, log_dir: JString, + log_filter: JString, callback_handler: JObject, ) -> *const Session { let Ok(callback_handler) = env.new_global_ref(callback_handler) else { @@ -381,6 +388,7 @@ pub unsafe extern "system" fn Java_dev_firezone_android_tunnel_TunnelSession_con portal_token, device_id, log_dir, + log_filter, callback_handler, ) }) { diff --git a/rust/connlib/clients/apple/Cargo.toml b/rust/connlib/clients/apple/Cargo.toml index d9d45732a..e52c0c573 100644 --- a/rust/connlib/clients/apple/Cargo.toml +++ b/rust/connlib/clients/apple/Cargo.toml @@ -18,7 +18,7 @@ libc = "0.2" swift-bridge = { workspace = true } firezone-client-connlib = { path = "../../libs/client" } serde_json = "1" -tracing = "0.1" +tracing = { workspace = true } # TODO: https://github.com/Absolucy/tracing-oslog/pull/9 tracing-oslog = { git = "https://github.com/sbag13/tracing-oslog", rev = "0f82b8051c65de86191e1350afc7a26d5c670c29" } tracing-subscriber = "0.3" diff --git a/rust/connlib/clients/apple/src/lib.rs b/rust/connlib/clients/apple/src/lib.rs index 70cec2d15..69b44a49c 100644 --- a/rust/connlib/clients/apple/src/lib.rs +++ b/rust/connlib/clients/apple/src/lib.rs @@ -23,6 +23,7 @@ mod ffi { token: String, device_id: String, log_dir: String, + log_filter: String, callback_handler: CallbackHandler, ) -> Result; @@ -136,8 +137,8 @@ impl Callbacks for CallbackHandler { } } -fn init_logging(log_dir: PathBuf) -> WorkerGuard { - let (file_layer, guard) = file_logger::layer(log_dir.clone()); +fn init_logging(log_dir: PathBuf, log_filter: String) -> WorkerGuard { + let (file_layer, guard) = file_logger::layer(log_dir.clone(), log_filter); let _ = tracing_subscriber::registry() .with(tracing_oslog::OsLogger::new( @@ -156,9 +157,10 @@ impl WrappedSession { token: String, device_id: String, log_dir: String, + log_filter: String, callback_handler: ffi::CallbackHandler, ) -> Result { - let _guard = init_logging(log_dir.into()); + let _guard = init_logging(log_dir.into(), log_filter); let session = Session::connect( portal_url.as_str(), diff --git a/rust/connlib/clients/headless/Cargo.toml b/rust/connlib/clients/headless/Cargo.toml index 22c585e86..41bfbe710 100644 --- a/rust/connlib/clients/headless/Cargo.toml +++ b/rust/connlib/clients/headless/Cargo.toml @@ -6,13 +6,8 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -dmidecode = "0.7" firezone-client-connlib = { path = "../../libs/client" } -ip_network = "0.4" -url = { version = "2.4.1", default-features = false } -tracing-subscriber = { version = "0.3" } -tracing = { version = "0.1" } -tracing-appender = "0.2" +headless-utils = { path = "../../headless-utils" } anyhow = { version = "1.0" } -clap = { version = "4.4", features = ["derive"] } -ctrlc = "3.4" +tracing = { workspace = true } +clap = { version = "4.4", features = ["derive", "env"] } diff --git a/rust/connlib/clients/headless/src/main.rs b/rust/connlib/clients/headless/src/main.rs index 0ca9d0b24..6be3f1aa2 100644 --- a/rust/connlib/clients/headless/src/main.rs +++ b/rust/connlib/clients/headless/src/main.rs @@ -1,134 +1,20 @@ -use anyhow::{Context, Result}; +use anyhow::Result; use clap::Parser; -use ip_network::IpNetwork; -use std::{ - net::{Ipv4Addr, Ipv6Addr}, - os::fd::RawFd, - path::PathBuf, - str::FromStr, -}; -use tracing_appender::non_blocking::WorkerGuard; -use tracing_subscriber::{fmt, prelude::*}; - -use firezone_client_connlib::{ - file_logger, get_device_id, get_user_agent, Callbacks, Error, ResourceDescription, Session, -}; -use url::Url; - -#[derive(Clone)] -pub struct CallbackHandler; - -impl Callbacks for CallbackHandler { - type Error = std::convert::Infallible; - - fn on_set_interface_config( - &self, - _tunnel_address_v4: Ipv4Addr, - _tunnel_address_v6: Ipv6Addr, - _dns_address: Ipv4Addr, - _dns_fallback_strategy: String, - ) -> Result { - Ok(-1) - } - - fn on_tunnel_ready(&self) -> Result<(), Self::Error> { - tracing::trace!("Tunnel connected"); - Ok(()) - } - - fn on_add_route(&self, _route: IpNetwork) -> Result<(), Self::Error> { - Ok(()) - } - - fn on_remove_route(&self, _route: IpNetwork) -> Result<(), Self::Error> { - Ok(()) - } - - fn on_update_resources( - &self, - resource_list: Vec, - ) -> Result<(), Self::Error> { - tracing::trace!(message = "Resources updated", ?resource_list); - Ok(()) - } - - fn on_disconnect(&self, error: Option<&Error>) -> Result<(), Self::Error> { - tracing::trace!("Tunnel disconnected: {error:?}"); - // Note that we can't panic here, since we already hooked the panic to this function. - std::process::exit(0); - } - - fn on_error(&self, error: &Error) -> Result<(), Self::Error> { - tracing::warn!("Encountered recoverable error: {error}"); - Ok(()) - } -} - -const URL_ENV_VAR: &str = "FZ_URL"; -const SECRET_ENV_VAR: &str = "FZ_SECRET"; -const LOG_DIR_ENV_VAR: &str = "FZ_LOG_DIR"; -const DEFAULT_LOG_DIR: &str = "/var/log/firezone"; - -fn block_on_ctrl_c() { - let (tx, rx) = std::sync::mpsc::channel(); - ctrlc::set_handler(move || tx.send(()).expect("Could not send stop signal on channel.")) - .expect("Error setting Ctrl-C handler"); - rx.recv().expect("Could not receive ctrl-c signal"); -} - -fn init_logging(log_dir: PathBuf) -> WorkerGuard { - let (file_layer, guard) = file_logger::layer(log_dir); - - // Calling init twice causes a panic; instead use try_init which will fail - // gracefully if this is called more than once. - let _ = tracing_subscriber::registry() - .with(fmt::layer()) - .with(file_layer) - .try_init(); - - guard -} +use firezone_client_connlib::{get_device_id, Session}; +use headless_utils::{block_on_ctrl_c, setup_global_subscriber, Cli, HeadlessCallbackHandler}; fn main() -> Result<()> { let cli = Cli::parse(); - if cli.print_agent { - println!("{}", get_user_agent()); - return Ok(()); - } + let _guard = setup_global_subscriber(cli.log_dir); - // TODO: allow passing as arg vars - let url = parse_env_var::(URL_ENV_VAR)?; - let secret = parse_env_var::(SECRET_ENV_VAR)?; let device_id = get_device_id(); - let log_dir = parse_env_var::(LOG_DIR_ENV_VAR).unwrap_or(DEFAULT_LOG_DIR.into()); - let _guard = init_logging(log_dir); - let mut session = Session::connect(url, secret, device_id, CallbackHandler).unwrap(); - tracing::info!("Started new session"); + let mut session = + Session::connect(cli.url, cli.secret, device_id, HeadlessCallbackHandler).unwrap(); + tracing::info!("new_session"); block_on_ctrl_c(); session.disconnect(None); Ok(()) } - -fn parse_env_var(key: &str) -> Result -where - T: FromStr, - T::Err: std::error::Error + Send + Sync + 'static, -{ - let res = std::env::var(key) - .with_context(|| format!("`{key}` env variable is unset"))? - .parse() - .with_context(|| format!("failed to parse {key} env variable"))?; - - Ok(res) -} - -// probably will change this to a subcommand in the future -#[derive(Parser)] -#[command(author, version, about, long_about = None)] -struct Cli { - #[arg(short, long)] - print_agent: bool, -} diff --git a/rust/connlib/gateway/Cargo.toml b/rust/connlib/gateway/Cargo.toml index 84382c953..96745e79e 100644 --- a/rust/connlib/gateway/Cargo.toml +++ b/rust/connlib/gateway/Cargo.toml @@ -7,9 +7,7 @@ edition = "2021" [dependencies] firezone-gateway-connlib = { path = "../libs/gateway" } -ip_network = "0.4" -url = { version = "2.4.1", default-features = false } -tracing-subscriber = { version = "0.3" } -tracing = { version = "0.1" } +headless-utils = { path = "../headless-utils" } anyhow = { version = "1.0" } -ctrlc = "3.4" +tracing = { workspace = true } +clap = { version = "4.3", features = ["derive", "env"] } diff --git a/rust/connlib/gateway/src/main.rs b/rust/connlib/gateway/src/main.rs index 95df94156..fe04f81e0 100644 --- a/rust/connlib/gateway/src/main.rs +++ b/rust/connlib/gateway/src/main.rs @@ -1,92 +1,19 @@ -use anyhow::{Context, Result}; -use ip_network::IpNetwork; -use std::os::fd::RawFd; -use std::{ - net::{Ipv4Addr, Ipv6Addr}, - str::FromStr, -}; - -use firezone_gateway_connlib::{get_device_id, Callbacks, Error, ResourceDescription, Session}; -use url::Url; - -#[derive(Clone)] -pub struct CallbackHandler; - -impl Callbacks for CallbackHandler { - type Error = std::convert::Infallible; - - fn on_set_interface_config( - &self, - _tunnel_address_v4: Ipv4Addr, - _tunnel_address_v6: Ipv6Addr, - _dns_address: Ipv4Addr, - _dns_fallback_strategy: String, - ) -> Result { - Ok(-1) - } - - fn on_tunnel_ready(&self) -> Result<(), Self::Error> { - tracing::trace!("Tunnel connected with address"); - Ok(()) - } - - fn on_add_route(&self, _route: IpNetwork) -> Result<(), Self::Error> { - Ok(()) - } - - fn on_remove_route(&self, _route: IpNetwork) -> Result<(), Self::Error> { - Ok(()) - } - - fn on_update_resources( - &self, - resource_list: Vec, - ) -> Result<(), Self::Error> { - tracing::trace!("Resources updated, current list: {resource_list:?}"); - Ok(()) - } - - fn on_disconnect(&self, error: Option<&Error>) -> Result<(), Self::Error> { - tracing::warn!("Tunnel disconnected: {error:?}"); - // Note that we can't panic here, since we already hooked the panic to this function. - std::process::exit(0); - } - - fn on_error(&self, error: &Error) -> Result<(), Self::Error> { - tracing::warn!("Encountered recoverable error: {error}"); - Ok(()) - } -} - -const URL_ENV_VAR: &str = "FZ_URL"; -const SECRET_ENV_VAR: &str = "FZ_SECRET"; +use anyhow::Result; +use clap::Parser; +use firezone_gateway_connlib::{get_device_id, Session}; +use headless_utils::{block_on_ctrl_c, setup_global_subscriber, Cli, HeadlessCallbackHandler}; fn main() -> Result<()> { - tracing_subscriber::fmt::init(); - // TODO: allow passing as arg vars - let url = parse_env_var::(URL_ENV_VAR)?; - let secret = parse_env_var::(SECRET_ENV_VAR)?; - let device_id = get_device_id(); - let mut session = Session::connect(url, secret, device_id, CallbackHandler).unwrap(); + let cli = Cli::parse(); + let _guard = setup_global_subscriber(cli.log_dir); - let (tx, rx) = std::sync::mpsc::channel(); - ctrlc::set_handler(move || tx.send(()).expect("Could not send stop signal on channel.")) - .expect("Error setting Ctrl-C handler"); - rx.recv().expect("Could not receive ctrl-c signal"); + let device_id = get_device_id(); + let mut session = + Session::connect(cli.url, cli.secret, device_id, HeadlessCallbackHandler).unwrap(); + tracing::info!("new_session"); + + block_on_ctrl_c(); session.disconnect(None); Ok(()) } - -fn parse_env_var(key: &str) -> Result -where - T: FromStr, - T::Err: std::error::Error + Send + Sync + 'static, -{ - let res = std::env::var(key) - .with_context(|| format!("`{key}` env variable is unset"))? - .parse() - .with_context(|| format!("failed to parse {key} env variable"))?; - - Ok(res) -} diff --git a/rust/connlib/headless-utils/Cargo.toml b/rust/connlib/headless-utils/Cargo.toml new file mode 100644 index 000000000..8fc8d31ea --- /dev/null +++ b/rust/connlib/headless-utils/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "headless-utils" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +firezone-client-connlib = { path = "../libs/client" } +ip_network = "0.4" +url = { version = "2.3.1", default-features = false } +tracing-subscriber = { workspace = true } +tracing = { workspace = true } +clap = { version = "4.3", features = ["derive", "env"] } +ctrlc = "3.4" diff --git a/rust/connlib/headless-utils/src/lib.rs b/rust/connlib/headless-utils/src/lib.rs new file mode 100644 index 000000000..c60f6dbe5 --- /dev/null +++ b/rust/connlib/headless-utils/src/lib.rs @@ -0,0 +1,100 @@ +use clap::Parser; +use ip_network::IpNetwork; +use std::{ + net::{Ipv4Addr, Ipv6Addr}, + os::fd::RawFd, + path::PathBuf, +}; +use tracing_subscriber::{prelude::__tracing_subscriber_SubscriberExt, EnvFilter, Layer, Registry}; + +use firezone_client_connlib::{file_logger, Callbacks, Error, ResourceDescription, WorkerGuard}; +use url::Url; + +#[derive(Clone)] +pub struct HeadlessCallbackHandler; + +impl Callbacks for HeadlessCallbackHandler { + type Error = std::convert::Infallible; + + fn on_set_interface_config( + &self, + _tunnel_address_v4: Ipv4Addr, + _tunnel_address_v6: Ipv6Addr, + _dns_address: Ipv4Addr, + _dns_fallback_strategy: String, + ) -> Result { + Ok(-1) + } + + fn on_tunnel_ready(&self) -> Result<(), Self::Error> { + tracing::trace!("tunnel_connected"); + Ok(()) + } + + fn on_add_route(&self, _route: IpNetwork) -> Result<(), Self::Error> { + Ok(()) + } + + fn on_remove_route(&self, _route: IpNetwork) -> Result<(), Self::Error> { + Ok(()) + } + + fn on_update_resources( + &self, + resource_list: Vec, + ) -> Result<(), Self::Error> { + tracing::trace!(?resource_list, "resource_updated"); + Ok(()) + } + + fn on_disconnect(&self, error: Option<&Error>) -> Result<(), Self::Error> { + tracing::trace!(error = ?error, "tunnel_disconnected"); + // Note that we can't panic here, since we already hooked the panic to this function. + std::process::exit(0); + } + + fn on_error(&self, error: &Error) -> Result<(), Self::Error> { + tracing::warn!(error = ?error); + Ok(()) + } +} + +pub fn block_on_ctrl_c() { + let (tx, rx) = std::sync::mpsc::channel(); + ctrlc::set_handler(move || tx.send(()).expect("Could not send stop signal on channel.")) + .expect("Error setting Ctrl-C handler"); + rx.recv().expect("Could not receive ctrl-c signal"); +} + +pub fn setup_global_subscriber(log_dir: Option) -> Option { + let fmt_subscriber = + tracing_subscriber::fmt::layer().with_filter(EnvFilter::from_default_env()); + let guard = if let Some(log_dir) = log_dir { + let (file_logger, guard) = file_logger::layer(log_dir, EnvFilter::from_default_env()); + + let subscriber = Registry::default().with(fmt_subscriber).with(file_logger); + tracing::subscriber::set_global_default(subscriber).expect("Could not set global default"); + + Some(guard) + } else { + let subscriber = Registry::default().with(fmt_subscriber); + tracing::subscriber::set_global_default(subscriber).expect("Could not set global default"); + None + }; + + guard +} + +#[derive(Parser)] +#[command(author, version, about, long_about = None)] +pub struct Cli { + /// Portal's websocket url + #[arg(short, long, env = "FZ_URL")] + pub url: Url, + /// Service token + #[arg(short, long, env = "FZ_SECRET")] + pub secret: String, + /// File logging directory optionally + #[arg(short, long, env = "FZ_LOG_DIR")] + pub log_dir: Option, +} diff --git a/rust/connlib/libs/client/Cargo.toml b/rust/connlib/libs/client/Cargo.toml index 8922db5bd..88914038e 100644 --- a/rust/connlib/libs/client/Cargo.toml +++ b/rust/connlib/libs/client/Cargo.toml @@ -8,10 +8,10 @@ mock = ["libs-common/mock"] [dependencies] tokio = { version = "1.32", default-features = false, features = ["sync"] } -tracing = { version = "0.1", default-features = false, features = ["std", "attributes"] } -tracing-appender = "0.2" -tracing-stackdriver = "0.7.2" -tracing-subscriber = { version = "0.3", features = ["env-filter"] } +tracing = { workspace = true } +tracing-subscriber = { workspace = true, features = ["env-filter"] } +tracing-appender = { version = "0.2.2" } +tracing-stackdriver = { version = "0.7.2" } async-trait = { version = "0.1", default-features = false } libs-common = { path = "../common" } firezone-tunnel = { path = "../tunnel" } @@ -20,9 +20,9 @@ boringtun = { workspace = true } backoff = { workspace = true } [target.'cfg(target_os = "android")'.dependencies] -tracing = { version = "0.1", default-features = false, features = ["std", "attributes"] } +tracing = { workspace = true, features = ["std", "attributes"] } tracing-android = "0.2" [dev-dependencies] -serde_json = { version = "1.0", default-features = false, features = ["std"] } +serde_json = { version = "1.0", features = ["std"] } chrono = { workspace = true } diff --git a/rust/connlib/libs/client/src/control.rs b/rust/connlib/libs/client/src/control.rs index 3f1a874ef..d3dfb7cb6 100644 --- a/rust/connlib/libs/client/src/control.rs +++ b/rust/connlib/libs/client/src/control.rs @@ -70,7 +70,7 @@ impl ControlPlane { Ok(()) } - #[tracing::instrument(level = "trace", skip_all)] + #[tracing::instrument(level = "trace", skip(self))] async fn init( &mut self, InitClient { @@ -252,7 +252,7 @@ impl ControlPlane { } pub(super) async fn stats_event(&mut self) { - tracing::debug!(target: "tunnel_state", "{:#?}", self.tunnel.stats()); + tracing::debug!(target: "tunnel_state", stats = ?self.tunnel.stats()); } } diff --git a/rust/connlib/libs/client/src/file_logger.rs b/rust/connlib/libs/client/src/file_logger.rs index 29d018056..67c9a45f2 100644 --- a/rust/connlib/libs/client/src/file_logger.rs +++ b/rust/connlib/libs/client/src/file_logger.rs @@ -14,14 +14,15 @@ //! - MAC addresses use std::path::PathBuf; -use tracing::{level_filters::LevelFilter, Subscriber}; -use tracing_subscriber::Layer; +use tracing::Subscriber; +use tracing_subscriber::{EnvFilter, Layer}; const LOG_FILE_BASE_NAME: &str = "connlib.log"; /// Create a new file logger layer. pub fn layer( log_dir: PathBuf, + env_filter: impl Into, ) -> ( Box + Send + Sync + 'static>, tracing_appender::non_blocking::WorkerGuard, @@ -29,12 +30,6 @@ pub fn layer( where T: Subscriber + for<'a> tracing_subscriber::registry::LookupSpan<'a>, { - #[cfg(debug_assertions)] - let level = LevelFilter::DEBUG; - - #[cfg(not(debug_assertions))] - let level = LevelFilter::WARN; - let (writer, guard) = tracing_appender::non_blocking(tracing_appender::rolling::hourly( log_dir, LOG_FILE_BASE_NAME, @@ -42,7 +37,7 @@ where let layer = tracing_stackdriver::layer() .with_writer(writer) - .with_filter(level) + .with_filter(env_filter.into()) .boxed(); // Return the guard so that the caller maintains a handle to it. Otherwise, diff --git a/rust/connlib/libs/client/src/lib.rs b/rust/connlib/libs/client/src/lib.rs index b8c832068..bfbd80773 100644 --- a/rust/connlib/libs/client/src/lib.rs +++ b/rust/connlib/libs/client/src/lib.rs @@ -19,8 +19,7 @@ pub type Session = libs_common::Session< CB, >; -pub use libs_common::{ - get_device_id, get_user_agent, messages::ResourceDescription, Callbacks, Error, -}; +pub use libs_common::{get_device_id, messages::ResourceDescription, Callbacks, Error}; use messages::Messages; use messages::ReplyMessages; +pub use tracing_appender::non_blocking::WorkerGuard; diff --git a/rust/connlib/libs/common/Cargo.toml b/rust/connlib/libs/common/Cargo.toml index 54fa528a1..a8e9ef821 100644 --- a/rust/connlib/libs/common/Cargo.toml +++ b/rust/connlib/libs/common/Cargo.toml @@ -17,7 +17,7 @@ tokio-tungstenite = { version = "0.19", default-features = false, features = ["c webrtc = { version = "0.8" } uuid = { version = "1.4", default-features = false, features = ["std", "v4", "serde"] } thiserror = { version = "1.0", default-features = false } -tracing = { version = "0.1", default-features = false, features = ["std", "attributes"] } +tracing = { workspace = true } serde_json = { version = "1.0", default-features = false, features = ["std"] } tokio = { version = "1.32", default-features = false, features = ["rt", "rt-multi-thread"]} url = { version = "2.4.1", default-features = false } diff --git a/rust/connlib/libs/common/src/session.rs b/rust/connlib/libs/common/src/session.rs index 39a32eaaf..d4d61d30c 100644 --- a/rust/connlib/libs/common/src/session.rs +++ b/rust/connlib/libs/common/src/session.rs @@ -319,6 +319,7 @@ where // `connection.start` calls the callback only after connecting tracing::debug!("Attempting connection to portal..."); let result = connection.start(vec![topic.clone()], || exponential_backoff.reset()).await; + tracing::warn!("Disconnected from the portal"); if let Err(e) = &result { tracing::warn!(error = ?e, "Portal connection error"); } diff --git a/rust/connlib/libs/gateway/Cargo.toml b/rust/connlib/libs/gateway/Cargo.toml index 70c2e7526..be1676b7a 100644 --- a/rust/connlib/libs/gateway/Cargo.toml +++ b/rust/connlib/libs/gateway/Cargo.toml @@ -8,7 +8,7 @@ libs-common = { path = "../common" } async-trait = { version = "0.1", default-features = false } firezone-tunnel = { path = "../tunnel" } tokio = { version = "1.32", default-features = false, features = ["sync"] } -tracing = { version = "0.1", default-features = false, features = ["std", "attributes"] } +tracing = { workspace = true } serde = { version = "1.0", default-features = false, features = ["std", "derive"] } boringtun = { workspace = true } chrono = { workspace = true } diff --git a/rust/connlib/libs/gateway/src/control.rs b/rust/connlib/libs/gateway/src/control.rs index a720936c1..16067a4bc 100644 --- a/rust/connlib/libs/gateway/src/control.rs +++ b/rust/connlib/libs/gateway/src/control.rs @@ -63,7 +63,7 @@ impl ControlPlane { Ok(()) } - #[tracing::instrument(level = "trace", skip_all)] + #[tracing::instrument(level = "trace", skip(self))] async fn init(&mut self, init: InitGateway) -> Result<()> { if let Err(e) = self.tunnel.set_interface(&init.interface).await { tracing::error!("Couldn't initialize interface: {e}"); diff --git a/rust/connlib/libs/tunnel/Cargo.toml b/rust/connlib/libs/tunnel/Cargo.toml index 41a25caa3..d25067c6f 100644 --- a/rust/connlib/libs/tunnel/Cargo.toml +++ b/rust/connlib/libs/tunnel/Cargo.toml @@ -11,7 +11,7 @@ rand_core = { version = "0.6", default-features = false, features = ["getrandom" serde = { version = "1.0", default-features = false, features = ["derive", "std"] } futures = { version = "0.3", default-features = false, features = ["std", "async-await", "executor"] } futures-util = { version = "0.3", default-features = false, features = ["std", "async-await", "async-await-macro"] } -tracing = { version = "0.1", default-features = false, features = ["std", "attributes"] } +tracing = { workspace = true } parking_lot = { version = "0.12", default-features = false } bytes = { version = "1.4", default-features = false, features = ["std"] } itertools = { version = "0.11", default-features = false, features = ["use_std"] } diff --git a/rust/docker-init.sh b/rust/docker-init.sh index 14848ec18..88bcf6768 100755 --- a/rust/docker-init.sh +++ b/rust/docker-init.sh @@ -1,7 +1,7 @@ #!/bin/bash if [[ "${ENABLE_MASQUERADE}" == "1" ]]; then - IFACE="utun" + IFACE="tun-firezone" iptables -A FORWARD -i $IFACE -j ACCEPT iptables -A FORWARD -o $IFACE -j ACCEPT iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE diff --git a/rust/phoenix-channel/Cargo.toml b/rust/phoenix-channel/Cargo.toml index 4840a0ad5..648a73ab9 100644 --- a/rust/phoenix-channel/Cargo.toml +++ b/rust/phoenix-channel/Cargo.toml @@ -10,7 +10,7 @@ tokio-tungstenite = { version = "0.19.0", features = ["rustls-tls-native-roots"] futures = "0.3.28" base64 = "0.21.4" serde = { version = "1.0.188", features = ["derive"] } -tracing = "0.1.37" +tracing = { workspace = true } rand_core = "0.6.4" url = "2.4.1" serde_json = "1.0.107" diff --git a/rust/relay/Cargo.toml b/rust/relay/Cargo.toml index fb0bb8412..d3eabea2c 100644 --- a/rust/relay/Cargo.toml +++ b/rust/relay/Cargo.toml @@ -13,8 +13,8 @@ hex-literal = "0.4.1" rand = "0.8.5" stun_codec = "0.3.3" tokio = { version = "1.32.0", features = ["macros", "rt-multi-thread", "net", "time"] } -tracing = { version = "0.1.37", features = ["log"] } -tracing-subscriber = { version = "0.3", features = ["env-filter", "json", "fmt"] } +tracing = { workspace = true, features = ["log"] } +tracing-subscriber = { workspace = true, features = ["env-filter", "json", "fmt"] } tracing-stackdriver = { version = "0.7.2", features = ["opentelemetry"] } tracing-opentelemetry = "0.19.0" opentelemetry = { version = "0.19.0", features = ["rt-tokio", "metrics"] } diff --git a/swift/apple/FirezoneNetworkExtension/Adapter.swift b/swift/apple/FirezoneNetworkExtension/Adapter.swift index ce2679dce..241bb80d3 100644 --- a/swift/apple/FirezoneNetworkExtension/Adapter.swift +++ b/swift/apple/FirezoneNetworkExtension/Adapter.swift @@ -148,6 +148,9 @@ public class Adapter { self.state = .startingTunnel( session: try WrappedSession.connect( self.controlPlaneURLString, self.token, self.getDeviceId(), self.logDir, + // TODO: make logging string depend on build config #2067 + // Docs on filter strings: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html + "connlib_apple=info,firezone_tunnel=info,libs_common=info,firezone_client_connlib=info,warn", self.callbackHandler), onStarted: completionHandler ) @@ -285,6 +288,8 @@ extension Adapter { self.state = .startingTunnel( session: try WrappedSession.connect( controlPlaneURLString, token, self.getDeviceId(), logDir, + // TODO: make logging string depend on build config #2067 + "connlib_apple=info,firezone_tunnel=info,libs_common=info,firezone_client_connlib=info,warn", self.callbackHandler), onStarted: { error in if let error = error {