[workspace]
resolver = "2"
members = ["net-guardia", "net-guardia-abi", "macros", "ingress-ebpf", "egress-ebpf", "net-guardia-cli"]
default-members = ["net-guardia", "net-guardia-abi", "net-guardia-cli"]

[workspace.dependencies]
# Local crates
net-guardia-abi = { path = "net-guardia-abi" }
macros = { path = "macros" }

# eBPF - kernel side (pinned: aya-ebpf 0.1.2 was yanked, see aya-rs/aya#1400)
aya-ebpf = { version = "=0.1.1", default-features = false }
aya-log-ebpf = { version = "=0.1.0", default-features = false }

# eBPF - userspace side
aya = { version = "0.13.1", default-features = false }
aya-log = { version = "0.2.1", default-features = false }
network-types = { version = "0.2.0", default-features = false }

# XDP
xsk-rs = { version = "0.8.0", default-features = false }
libxdp-sys = { version = "0.2.4", features = ["use_cc_build", "use_precompiled_bpf"] }

# Serialization
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"
serde_yaml_ng = "0.10.0"

# Async runtime
tokio = { version = "1.50.0", features = ["rt-multi-thread", "macros", "sync", "time", "process", "io-util", "io-std", "fs", "signal"] }
tokio-util = { version = "0.7", features = ["io"] }

# Web framework
actix = "0.13.5"
actix-web = "4.13.0"
actix-cors = "0.7.1"
actix-ws = "0.4.0"
actix-multipart = "0.7"
actix-files = "0.6"
tokio-tungstenite = "0.29.0"
zip = "8.6.0"

# Logging / tracing
tracing = "0.1.44"
tracing-appender = "0.2.4"
tracing-subscriber = { version = "0.3.23", features = ["env-filter", "registry"] }

# ML
tract-onnx = "0.22.1"

# Utilities
parking_lot = "0.12.5"
libc = { version = "0.2.183", default-features = false }
thiserror = "2.0.18"
futures-util = "0.3.32"
crossbeam = "0.8.4"

# System
sysinfo = "0.39.0"
maxminddb = "0.28.1"
ipnetwork = "0.21.1"
lru = "0.18.0"
rusqlite = { version = "0.39", features = ["bundled-sqlcipher"] }
async-sqlite = { version = "0.5.7", default-features = false, features = ["bundled-sqlcipher"] }
argon2 = "0.5"
rand = "0.10.1"
ed25519-dalek = { version = "2", features = ["std", "rand_core"] }
base64 = "0.22"
clap = { version = "4", features = ["derive"] }
uuid = { version = "1", features = ["v4"] }
rust-embed = "8.11.0"
mime_guess = "2.0.5"
url = "2.5.8"
toml = "1.0.7"
lettre = { version = "0.11", default-features = false, features = ["builder", "hostname", "smtp-transport", "tokio1-rustls-tls"] }
chrono = { version = "0.4", default-features = false, features = ["clock", "std"] }
reqwest = { version = "0.13.3", default-features = false, features = ["json", "rustls"] }
async-trait = "0.1"
dashmap = "6"
arc-swap = "1"
moka = { version = "0.12", features = ["sync"] }
notify = "8.2.0"
sha2 = "0.11.0"
hmac = "0.13.0"
aes-gcm = "0.10"
hkdf = "0.13.0"
sd-notify = "0.5.0"

# Build dependencies
cargo_metadata = { version = "0.23.1", default-features = false }
which = "8.0.2"
dotenvy = "0.15.7"

# Proc macro
proc-macro2 = "1.0.106"
quote = "1.0.45"
syn = { version = "2.0.117", features = ["full"] }

[profile.dev]
panic = "unwind"

[profile.release]
panic = "unwind"
opt-level = 3
lto = "thin"
strip = true

[profile.release.package.ingress-ebpf]
debug = 2
codegen-units = 1

[profile.release.package.egress-ebpf]
debug = 2
codegen-units = 1
