Files
firezone/rust/Cargo.toml
Thomas Eizinger a41395a165 feat(eBPF): embed BTF information in eBPF kernel (#8842)
It turns out that the Rust compiler doesn't always say that it is adding
debug information to a binary even when it does! The build output only
displays `[optimized]` when in fact it does actually emit debug
information. Adding an additional linker flag configures `bpf-linker` to
include the necessary BTF information in our kernel.

This makes debugging verifier errors much easier as the program output
contains source code annotiations. It also should make it easier to
debug issues using `xdpdump` which relies on BTF information.

Resolves: #8503
2025-04-19 12:38:59 +00:00

240 lines
7.5 KiB
TOML

[workspace]
members = [
"bin-shared",
"connlib/clients/android",
"connlib/clients/apple",
"connlib/clients/shared",
"connlib/l4-tcp-dns-server",
"connlib/l4-udp-dns-server",
"connlib/model",
"connlib/snownet",
"connlib/tunnel",
"dns-over-tcp",
"dns-types",
"etherparse-ext",
"gateway",
"gui-client/src-common",
"gui-client/src-tauri",
"headless-client",
"ip-packet",
"logging",
"phoenix-channel",
"relay/ebpf-shared",
"relay/ebpf-turn-router",
"relay/server",
"socket-factory",
"telemetry",
"tests/gui-smoke-test",
"tests/http-test-server",
"tun",
]
resolver = "2"
[workspace.package]
license = "Apache-2.0"
edition = "2024"
[workspace.dependencies]
anyhow = "1.0.97"
arboard = { version = "3.5.0", default-features = false }
async-trait = { version = "0.1", default-features = false }
atomicwrites = "0.4.4"
axum = { version = "0.7.7", default-features = false }
aya = { git = "https://github.com/aya-rs/aya" }
aya-build = { git = "https://github.com/aya-rs/aya" }
aya-ebpf = { git = "https://github.com/aya-rs/aya" }
aya-log = { git = "https://github.com/aya-rs/aya" }
aya-log-ebpf = { git = "https://github.com/aya-rs/aya" }
backoff = { version = "0.4", features = ["tokio"] }
base64 = { version = "0.22.1", default-features = false }
bimap = "0.6"
boringtun = { version = "0.6", default-features = false }
bytecodec = "0.4.15"
bytes = { version = "1.9.0", default-features = false }
caps = "0.5.5"
chrono = { version = "0.4", default-features = false, features = ["std", "clock", "oldtime", "serde"] }
clap = "4.5.34"
connlib-client-android = { path = "connlib/clients/android" }
connlib-client-apple = { path = "connlib/clients/apple" }
connlib-client-shared = { path = "connlib/clients/shared" }
connlib-model = { path = "connlib/model" }
derive_more = "1.0.0"
difference = "2.0.0"
dirs = "5.0.1"
divan = "0.1.17"
dns-lookup = "2.0"
dns-over-tcp = { path = "dns-over-tcp" }
dns-types = { path = "dns-types" }
ebpf-shared = { path = "relay/ebpf-shared" }
either = "1"
env_logger = "0.11.6"
etherparse = { version = "0.17", default-features = false }
etherparse-ext = { path = "etherparse-ext" }
firezone-bin-shared = { path = "bin-shared" }
firezone-gui-client-common = { path = "gui-client/src-common" }
firezone-headless-client = { path = "headless-client" }
firezone-logging = { path = "logging" }
firezone-relay = { path = "relay/server" }
firezone-telemetry = { path = "telemetry" }
firezone-tunnel = { path = "connlib/tunnel" }
flume = { version = "0.11.1", features = ["async"] }
futures = { version = "0.3.31" }
futures-bounded = "0.2.1"
gat-lending-iterator = "0.1.6"
glob = "0.3.2"
hex = "0.4.3"
hex-display = "0.3.0"
hex-literal = "0.4.1"
humantime = "2.2"
ip-packet = { path = "ip-packet" }
ip_network = { version = "0.4", default-features = false }
ip_network_table = { version = "0.2", default-features = false }
itertools = "0.13"
jemallocator = "0.5.4"
jni = "0.21.1"
keyring = "3.6.1"
known-folders = "1.2.0"
l4-tcp-dns-server = { path = "connlib/l4-tcp-dns-server" }
l4-udp-dns-server = { path = "connlib/l4-udp-dns-server" }
libc = "0.2.171"
lockfree-object-pool = "0.1.6"
log = "0.4"
lru = "0.12.5"
mio = "1.0.3"
moka = "0.12.10"
native-dialog = "0.7.0"
network-types = "0.0.8"
nix = "0.29.0"
nu-ansi-term = "0.50"
num_cpus = "1.16.0"
once_cell = "1.17.1"
opentelemetry = "0.26.0"
opentelemetry-otlp = "0.26.0"
opentelemetry-stdout = "0.26.0"
opentelemetry_sdk = "0.26.0"
os_info = { version = "3", default-features = false }
output_vt100 = "0.1"
parking_lot = "0.12.3"
phoenix-channel = { path = "phoenix-channel" }
png = "0.17.16"
proptest = "1.6.0"
proptest-state-machine = "0.3.1"
quinn-udp = { version = "0.5.8", features = ["fast-apple-datapath"] }
rand = "0.8.5"
rand_core = "0.6.4"
rangemap = "1.5.1"
rayon = "1.10.0"
reqwest = { version = "0.12.9", default-features = false }
resolv-conf = "0.7.1"
ringbuffer = "0.15.0"
rtnetlink = { version = "0.14.1", default-features = false, features = ["tokio_socket"] }
rustls = { version = "0.23.21", default-features = false, features = ["ring"] }
sadness-generator = "0.6.0"
secrecy = "0.8"
semver = "1.0.26"
sentry = { version = "0.36.0", default-features = false }
sentry-tracing = "0.36.0"
serde = "1.0.217"
serde_json = "1.0.135"
serde_variant = "0.1.3"
sha2 = "0.10.8"
smallvec = "1.13.2"
smbios-lib = "0.9.2"
smoltcp = { version = "0.12", default-features = false }
snownet = { path = "connlib/snownet" }
socket-factory = { path = "socket-factory" }
socket2 = { version = "0.5" }
static_assertions = "1.1.0"
str0m = { version = "0.7.0", default-features = false, features = ["sha1"] }
strum = { version = "0.27.1", features = ["derive"] }
stun_codec = "0.3.4"
subprocess = "0.2.9"
subtle = "2.5.0"
supports-color = "3.0.2"
swift-bridge = "0.1.57"
swift-bridge-build = "0.1.57"
tauri = "2.5.0"
tauri-build = "2.1.0"
tauri-plugin-dialog = "2.2.1"
tauri-plugin-notification = "2.2.2"
tauri-plugin-opener = "2.2.6"
tauri-plugin-shell = "2.2.1"
tauri-runtime = "2.5.0"
tauri-utils = "2.2.0"
tempfile = "3.13.0"
test-case = "3.3.1"
test-strategy = "0.4.0"
thiserror = "1.0.68"
time = "0.3.37"
tokio = "1.44"
tokio-stream = "0.1.17"
tokio-tungstenite = "0.23.1"
tokio-util = "0.7.13"
tracing = { version = "0.1.40" }
tracing-appender = "0.2.3"
tracing-core = "0.1.31"
tracing-journald = "0.3.1"
tracing-log = "0.2.0"
tracing-macros = { git = "https://github.com/tokio-rs/tracing", branch = "v0.1.x" } # Contains `dbg!` but for `tracing`.
tracing-opentelemetry = "0.27.0"
tracing-stackdriver = "0.11.0"
tracing-subscriber = { version = "0.3.19", features = ["parking_lot"] }
trackable = "1.3.0"
tun = { path = "tun" }
url = "2.5.2"
uuid = "1.16.0"
which = "4.4.2"
windows = "0.58.0"
winreg = "0.52.0"
zbus = "5.5.0"
zip = { version = "2", default-features = false }
[workspace.lints.clippy]
dbg_macro = "warn"
print_stdout = "warn"
print_stderr = "warn"
unnecessary_wraps = "warn"
unused_async = "warn"
wildcard_enum_match_arm = "warn" # Ensures we match on all combinations of `Poll`, preventing erroneous suspensions.
redundant_else = "warn"
redundant_clone = "warn"
unwrap_in_result = "warn"
unwrap_used = "warn"
[workspace.lints.rustdoc]
private-intra-doc-links = "allow" # We don't publish any of our docs but want to catch dead links.
[patch.crates-io]
boringtun = { git = "https://github.com/firezone/boringtun", branch = "master" }
ip_network = { git = "https://github.com/JakubOnderka/ip_network", branch = "master" } # Waiting for release.
ip_network_table = { git = "https://github.com/edmonds/ip_network_table", branch = "some-useful-traits" } # For `Debug` and `Clone`
tracing-stackdriver = { git = "https://github.com/thomaseizinger/tracing-stackdriver", branch = "bump-otel-0.26" } # Waiting for release.
softbuffer = { git = "https://github.com/rust-windowing/softbuffer" } # Waiting for release.
quinn-udp = { git = "https://github.com/quinn-rs/quinn", branch = "main" } # Waiting for release.
# Enforce `tracing-macros` to have released `tracing` version.
[patch.'https://github.com/tokio-rs/tracing']
tracing = "0.1.41"
[profile.release]
# Full link-time optimization. Reduces binaries by up to 3x on some platforms.
lto = "fat"
# Increases the compiler's ability to produce smaller, optimized code
# at the expense of compilation time
codegen-units = 1
# Override build settings just for the GUI client, so we get a pdb/dwp
# Cargo ignores profile settings if they're not in the workspace's Cargo.toml
[profile.dev.package.firezone-gui-client]
debug = "full"
split-debuginfo = "packed"
[profile.release.package.firezone-gui-client]
debug = "full"
split-debuginfo = "packed"
[profile.release.package.ebpf-turn-router]
debug = 2