-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCargo.toml
More file actions
94 lines (88 loc) · 3.86 KB
/
Cargo.toml
File metadata and controls
94 lines (88 loc) · 3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
[workspace]
resolver = "2"
members = [
"crates/common",
"crates/cli",
"crates/modules/fast-path",
"crates/modules/probe",
]
# BPF crates live at `crates/modules/*/bpf/` and are deliberately
# excluded from the workspace. They target `bpfel-unknown-none` and
# need a pinned nightly toolchain; pulling them into the workspace
# would force the rest of the tree onto nightly and break host cargo
# commands. Each parent crate's `build.rs` invokes a nested cargo.
exclude = [
"crates/modules/fast-path/bpf",
"crates/modules/probe/bpf",
]
[workspace.package]
# Bumped from 0.0.1 with the Option F custom-FIB rollout. The 0.2.0
# release follows the rc1 → rc5 cutover series on the reference EFG
# (custom-fib forwarding live, BGP route source, symmetric attach +
# detach pacing for bridge members, integrity-check Total-line parse
# fix). See SPEC.md §11.14 for the rollout history and
# `docs/runbooks/custom-fib.md` for operations.
version = "0.2.5"
edition = "2021"
# MSRV. Deliberately behind the rust-toolchain.toml pin (which is the
# latest stable) so a contributor with a slightly older toolchain still
# builds. CI always runs against the latest stable — see
# `.github/workflows/ci.yml` `RUST_STABLE`.
rust-version = "1.85"
license = "GPL-3.0-or-later"
repository = "https://github.com/unredacted/packetframe"
[workspace.dependencies]
packetframe-common = { path = "crates/common" }
packetframe-fast-path = { path = "crates/modules/fast-path" }
packetframe-probe = { path = "crates/modules/probe" }
anyhow = "1.0"
thiserror = "2.0"
clap = { version = "4.5", features = ["derive"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["json", "env-filter"] }
libc = "0.2"
flate2 = "1.0"
signal-hook = "0.4"
# aya stack — userspace + BPF + build integration. Pinned tight per
# SPEC.md §7.1: aya has had breaking API changes across minor versions.
# Bump via reviewed PR rather than caret ranges.
aya = "=0.13.1"
aya-log = "=0.2.1"
aya-build = "=0.1.3"
# Option F control plane (Phase 2+). Tokio is scoped to the minimum
# feature set needed by NeighborResolver + RouteController: async TCP
# for BMP (Phase 3), netlink I/O for neighbor events, bounded mpsc
# channels between subsystems, cooperative shutdown. `full` pulls in
# tokio-fs and process machinery we don't need; keeping this lean keeps
# build times and binary size reasonable on cross targets.
tokio = { version = "1.52", default-features = false, features = ["rt-multi-thread", "net", "sync", "time", "macros", "io-util"] }
tokio-util = { version = "0.7", default-features = false }
# rtnetlink is our async netlink client for RTM_NEWNEIGH / RTM_DELNEIGH
# and link-state events. It layers on netlink-packet-route which we also
# pull directly for message parsing where rtnetlink's helpers don't
# cover what we need. Both pinned tight — rtnetlink has had message-
# shape changes across minor versions and we rely on specific constants.
rtnetlink = "0.21"
netlink-packet-route = "0.30"
netlink-packet-core = "0.8"
futures = "0.3"
# BMP parser for Option F Phase 3's RouteSource. Supports RFC 7854
# (classic BMP) and RFC 9069 (Loc-RIB / peer type 3) natively, which
# is what bird 2.17's `monitoring rib local` emits. Cross-platform;
# no OS gate needed. Features: `parser` and `bytes` are the minimum
# for offline BMP byte-stream parsing — no TLS fetcher, no MRT
# downloader. Default features pull in rustls/chrono/regex/zerocopy
# that we don't need.
bgpkit-parser = { version = "0.16", default-features = false, features = ["parser", "bytes"] }
bytes = "1.11"
# ipnet: IPv4/IPv6 prefix types used by bgpkit-parser's NetworkPrefix.
# We pattern-match on `IpNet::{V4,V6}` directly to extract addr +
# prefix_len, which requires the type to be in scope.
ipnet = "2.12"
[profile.release]
lto = "thin"
codegen-units = 1
strip = true
panic = "abort"