refactor(core): migrate packet processing from pnet to smoltcp (#2456)

Replace pnet_packet parsing and mutation across gateway packet paths with the existing smoltcp wire APIs. Preserve length validation, fragmentation classification, TCP flags, and checksum behavior while removing the core pnet_packet feature dependency.
Reject stale non-initiator OSPF sync sessions: only initiator requests may create missing sessions, and a rejection clears the old initiator role only when the remote session generation is unchanged. This fixes an unbounded RPC storm caused by a delayed route sync recreating a session after both peers relinquished the initiator role, with regression tests for session creation and response reordering.
This commit is contained in:
KKRainbow
2026-08-01 10:57:23 +08:00
committed by GitHub
parent fc3914baf5
commit afbba5d928
24 changed files with 1954 additions and 1068 deletions
+12 -187
View File
@@ -981,17 +981,6 @@ dependencies = [
"thiserror 2.0.16",
]
[[package]]
name = "delegate"
version = "0.13.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.106",
]
[[package]]
name = "deranged"
version = "0.5.3"
@@ -1001,17 +990,6 @@ dependencies = [
"powerfmt",
]
[[package]]
name = "derivative"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "derive_arbitrary"
version = "1.4.2"
@@ -1151,7 +1129,6 @@ version = "2.6.4"
dependencies = [
"anyhow",
"arc-swap",
"ariadne",
"async-recursion",
"async-trait",
"atomic-shim",
@@ -1192,11 +1169,10 @@ dependencies = [
"igd-next",
"indoc",
"kcp-sys",
"log",
"machine-uid",
"moka",
"natpmp",
"netlink-packet-core",
"netlink-packet-route 0.21.0",
"netlink-sys",
"network-interface",
"nix 0.29.0",
@@ -1205,16 +1181,14 @@ dependencies = [
"paste",
"percent-encoding",
"pin-project-lite",
"pnet",
"pnet_datalink",
"prost 0.14.3",
"prost-reflect 0.16.4",
"quanta",
"quinn",
"quinn-proto",
"rand 0.8.5",
"rcgen",
"regex",
"ring",
"rust-i18n",
"rustls",
"seahash",
@@ -1222,6 +1196,7 @@ dependencies = [
"serde_json",
"service-manager",
"shellexpand",
"smoltcp",
"socket2 0.5.10",
"strum",
"sys-locale",
@@ -1229,14 +1204,12 @@ dependencies = [
"terminal_size",
"thiserror 1.0.69",
"thunk-rs",
"time",
"tokio",
"tokio-rustls",
"tokio-util",
"tokio-websockets",
"toml",
"tracing",
"tracing-subscriber",
"tun-easytier",
"unicode-width 0.1.11",
"url",
@@ -1253,7 +1226,6 @@ dependencies = [
name = "easytier-core"
version = "2.6.4"
dependencies = [
"aes-gcm",
"anyhow",
"arc-swap",
"ariadne",
@@ -1265,7 +1237,7 @@ dependencies = [
"bitflags 2.9.4",
"bytecodec",
"bytes",
"chacha20poly1305",
"chrono",
"cidr",
"crossbeam",
"dashmap",
@@ -1283,13 +1255,12 @@ dependencies = [
"percent-encoding",
"petgraph",
"pin-project-lite",
"pnet_packet",
"prefix-trie",
"prost 0.14.3",
"prost-reflect 0.16.4",
"prost-wkt-types",
"prost-types 0.14.3",
"quanta",
"rand 0.8.5",
"ring",
"rustls",
"serde",
"serde_json",
@@ -1327,7 +1298,7 @@ dependencies = [
"napi-derive-ohos",
"napi-ohos",
"once_cell",
"prost-reflect 0.14.7",
"prost-reflect",
"rusqlite",
"serde",
"serde_json",
@@ -1350,9 +1321,6 @@ dependencies = [
"bytes",
"chrono",
"cidr",
"delegate",
"derivative",
"derive_more",
"hmac",
"indoc",
"pbjson",
@@ -1360,8 +1328,7 @@ dependencies = [
"proc-macro2",
"prost 0.14.3",
"prost-build",
"prost-reflect 0.16.4",
"prost-reflect-build",
"prost-types 0.14.3",
"prost-wkt-types",
"quote",
"reqwest",
@@ -2989,7 +2956,7 @@ dependencies = [
"ipnet",
"libc",
"netlink-packet-core",
"netlink-packet-route 0.17.1",
"netlink-packet-route",
"netlink-sys",
"once_cell",
"system-configuration",
@@ -3021,21 +2988,6 @@ dependencies = [
"netlink-packet-utils",
]
[[package]]
name = "netlink-packet-route"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "483325d4bfef65699214858f097d504eb812c38ce7077d165f301ec406c3066e"
dependencies = [
"anyhow",
"bitflags 2.9.4",
"byteorder",
"libc",
"log",
"netlink-packet-core",
"netlink-packet-utils",
]
[[package]]
name = "netlink-packet-utils"
version = "0.5.2"
@@ -3061,9 +3013,9 @@ dependencies = [
[[package]]
name = "network-interface"
version = "2.0.3"
version = "2.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07709a6d4eba90ab10ec170a0530b3aafc81cb8a2d380e4423ae41fc55fe5745"
checksum = "4ddcb8865ad3d9950f22f42ffa0ef0aecbfbf191867b3122413602b0a360b2a6"
dependencies = [
"cc",
"libc",
@@ -3166,15 +3118,6 @@ dependencies = [
"autocfg",
]
[[package]]
name = "num_threads"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
dependencies = [
"libc",
]
[[package]]
name = "once_cell"
version = "1.21.3"
@@ -3247,15 +3190,6 @@ dependencies = [
"vcpkg",
]
[[package]]
name = "ordered-float"
version = "2.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
dependencies = [
"num-traits",
]
[[package]]
name = "ordered_hash_map"
version = "0.5.0"
@@ -3402,20 +3336,6 @@ dependencies = [
"time",
]
[[package]]
name = "pnet"
version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "682396b533413cc2e009fbb48aadf93619a149d3e57defba19ff50ce0201bd0d"
dependencies = [
"ipnetwork",
"pnet_base",
"pnet_datalink",
"pnet_packet",
"pnet_sys",
"pnet_transport",
]
[[package]]
name = "pnet_base"
version = "0.35.0"
@@ -3423,7 +3343,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7"
dependencies = [
"no-std-net",
"serde",
]
[[package]]
@@ -3436,43 +3355,9 @@ dependencies = [
"libc",
"pnet_base",
"pnet_sys",
"serde",
"winapi",
]
[[package]]
name = "pnet_macros"
version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863"
dependencies = [
"proc-macro2",
"quote",
"regex",
"syn 2.0.106",
]
[[package]]
name = "pnet_macros_support"
version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab"
dependencies = [
"pnet_base",
]
[[package]]
name = "pnet_packet"
version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f"
dependencies = [
"glob",
"pnet_base",
"pnet_macros",
"pnet_macros_support",
]
[[package]]
name = "pnet_sys"
version = "0.35.0"
@@ -3483,18 +3368,6 @@ dependencies = [
"winapi",
]
[[package]]
name = "pnet_transport"
version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f604d98bc2a6591cf719b58d3203fd882bdd6bf1db696c4ac97978e9f4776bf"
dependencies = [
"libc",
"pnet_base",
"pnet_packet",
"pnet_sys",
]
[[package]]
name = "poly1305"
version = "0.8.0"
@@ -3721,34 +3594,10 @@ checksum = "7b5edd582b62f5cde844716e66d92565d7faf7ab1445c8cebce6e00fba83ddb2"
dependencies = [
"once_cell",
"prost 0.13.5",
"prost-reflect-derive 0.14.0",
"prost-reflect-derive",
"prost-types 0.13.5",
]
[[package]]
name = "prost-reflect"
version = "0.16.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "590aa145fee8f7a26b5a6055365e7c5e89a5c1caae9869de76ec0ee73181a2f9"
dependencies = [
"base64 0.22.1",
"prost 0.14.3",
"prost-reflect-derive 0.16.0",
"prost-types 0.14.3",
"serde",
"serde-value",
]
[[package]]
name = "prost-reflect-build"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8214ae2c30bbac390db0134d08300e770ef89b6d4e5abf855e8d300eded87e28"
dependencies = [
"prost-build",
"prost-reflect 0.16.4",
]
[[package]]
name = "prost-reflect-derive"
version = "0.14.0"
@@ -3760,17 +3609,6 @@ dependencies = [
"syn 2.0.106",
]
[[package]]
name = "prost-reflect-derive"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b6d90e29fa6c0d13c2c19ba5e4b3fb0efbf5975d27bcf4e260b7b15455bcabe"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.106",
]
[[package]]
name = "prost-types"
version = "0.13.5"
@@ -4449,16 +4287,6 @@ dependencies = [
"serde_derive",
]
[[package]]
name = "serde-value"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
dependencies = [
"ordered-float",
"serde",
]
[[package]]
name = "serde_core"
version = "1.0.226"
@@ -4935,9 +4763,7 @@ checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
dependencies = [
"deranged",
"itoa",
"libc",
"num-conv",
"num_threads",
"powerfmt",
"serde",
"time-core",
@@ -5252,7 +5078,6 @@ dependencies = [
"sharded-slab",
"smallvec",
"thread_local",
"time",
"tracing",
"tracing-core",
"tracing-log",