Commit eec03bfb authored by root's avatar root

v3 start

parent 35cf976f
/target /.idea/
/import /target/
\ No newline at end of file /import/
\ No newline at end of file
# This file is automatically @generated by Cargo. # This file is automatically @generated by Cargo.
# It is not intended for manual editing. # It is not intended for manual editing.
version = 3 version = 4
[[package]] [[package]]
name = "ahash" name = "anyhow"
version = "0.7.6" version = "1.0.100"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
dependencies = [
"getrandom",
"once_cell",
"version_check",
]
[[package]] [[package]]
name = "anyhow" name = "arraydeque"
version = "1.0.70" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236"
[[package]] [[package]]
name = "async-trait" name = "async-trait"
version = "0.1.68" version = "0.1.89"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
...@@ -38,9 +33,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" ...@@ -38,9 +33,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]] [[package]]
name = "average" name = "average"
version = "0.13.1" version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "843ec791d3f24503bbf72bbd5e49a3ab4dbb4bcd0a8ef6b0c908efa73caa27b1" checksum = "75aacce61912644dbb732271789748142bc4bf7ce6382d67bb26850516b7a391"
dependencies = [ dependencies = [
"easy-cast", "easy-cast",
"float-ord", "float-ord",
...@@ -48,10 +43,24 @@ dependencies = [ ...@@ -48,10 +43,24 @@ dependencies = [
] ]
[[package]] [[package]]
name = "base64" name = "bincode"
version = "0.13.1" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740"
dependencies = [
"bincode_derive",
"serde",
"unty",
]
[[package]]
name = "bincode_derive"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09"
dependencies = [
"virtue",
]
[[package]] [[package]]
name = "bitflags" name = "bitflags"
...@@ -59,6 +68,15 @@ version = "1.3.2" ...@@ -59,6 +68,15 @@ version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
dependencies = [
"serde_core",
]
[[package]] [[package]]
name = "block-buffer" name = "block-buffer"
version = "0.10.4" version = "0.10.4"
...@@ -68,12 +86,6 @@ dependencies = [ ...@@ -68,12 +86,6 @@ dependencies = [
"generic-array", "generic-array",
] ]
[[package]]
name = "byteorder"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]] [[package]]
name = "bytes" name = "bytes"
version = "1.4.0" version = "1.4.0"
...@@ -86,23 +98,59 @@ version = "1.0.0" ...@@ -86,23 +98,59 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "cfg_aliases"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]] [[package]]
name = "config" name = "config"
version = "0.13.3" version = "0.15.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7" checksum = "b30fa8254caad766fc03cb0ccae691e14bf3bd72bfff27f72802ce729551b3d6"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"convert_case",
"json5", "json5",
"lazy_static",
"nom",
"pathdiff", "pathdiff",
"ron", "ron",
"rust-ini", "rust-ini",
"serde", "serde-untagged",
"serde_core",
"serde_json", "serde_json",
"toml", "toml",
"yaml-rust", "winnow",
"yaml-rust2",
]
[[package]]
name = "const-random"
version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359"
dependencies = [
"const-random-macro",
]
[[package]]
name = "const-random-macro"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
dependencies = [
"getrandom",
"once_cell",
"tiny-keccak",
]
[[package]]
name = "convert_case"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
dependencies = [
"unicode-segmentation",
] ]
[[package]] [[package]]
...@@ -114,6 +162,12 @@ dependencies = [ ...@@ -114,6 +162,12 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "crunchy"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
[[package]] [[package]]
name = "crypto-common" name = "crypto-common"
version = "0.1.6" version = "0.1.6"
...@@ -136,25 +190,54 @@ dependencies = [ ...@@ -136,25 +190,54 @@ dependencies = [
[[package]] [[package]]
name = "dlv-list" name = "dlv-list"
version = "0.3.0" version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f"
dependencies = [
"const-random",
]
[[package]] [[package]]
name = "easy-cast" name = "easy-cast"
version = "0.4.4" version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4bd102ee8c418348759919b83b81cdbdc933ffe29740b903df448b4bafaa348e" checksum = "23f40539c229fc2e4674bdecdf24bfcc2cb83631ca911c78a035fa9f2381c32b"
dependencies = [ dependencies = [
"libm", "libm",
] ]
[[package]]
name = "encoding_rs"
version = "0.8.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
dependencies = [
"cfg-if",
]
[[package]]
name = "erased-serde"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3"
dependencies = [
"serde",
"serde_core",
"typeid",
]
[[package]] [[package]]
name = "float-ord" name = "float-ord"
version = "0.3.2" version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d" checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d"
[[package]]
name = "foldhash"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]] [[package]]
name = "futures" name = "futures"
version = "0.3.28" version = "0.3.28"
...@@ -267,20 +350,26 @@ dependencies = [ ...@@ -267,20 +350,26 @@ dependencies = [
[[package]] [[package]]
name = "hashbrown" name = "hashbrown"
version = "0.12.3" version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
[[package]]
name = "hashbrown"
version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [ dependencies = [
"ahash", "foldhash",
] ]
[[package]] [[package]]
name = "hermit-abi" name = "hashlink"
version = "0.2.6" version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
dependencies = [ dependencies = [
"libc", "hashbrown 0.15.5",
] ]
[[package]] [[package]]
...@@ -300,17 +389,11 @@ dependencies = [ ...@@ -300,17 +389,11 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.141" version = "0.2.178"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091"
[[package]] [[package]]
name = "libm" name = "libm"
...@@ -318,12 +401,6 @@ version = "0.2.6" ...@@ -318,12 +401,6 @@ version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
[[package]]
name = "linked-hash-map"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]] [[package]]
name = "lock_api" name = "lock_api"
version = "0.4.9" version = "0.4.9"
...@@ -336,88 +413,60 @@ dependencies = [ ...@@ -336,88 +413,60 @@ dependencies = [
[[package]] [[package]]
name = "log" name = "log"
version = "0.4.17" version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
dependencies = [
"cfg-if",
]
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.5.0" version = "2.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "minimal-lexical"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
[[package]] [[package]]
name = "mio" name = "mio"
version = "0.8.6" version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc"
dependencies = [ dependencies = [
"libc", "libc",
"log",
"wasi", "wasi",
"windows-sys", "windows-sys 0.61.2",
] ]
[[package]] [[package]]
name = "netlink-packet-core" name = "netlink-packet-core"
version = "0.5.0" version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e5cf0b54effda4b91615c40ff0fd12d0d4c9a6e0f5116874f03941792ff535a" checksum = "3463cbb78394cb0141e2c926b93fc2197e473394b761986eca3b9da2c63ae0f4"
dependencies = [ dependencies = [
"anyhow", "paste",
"byteorder",
"libc",
"netlink-packet-utils",
] ]
[[package]] [[package]]
name = "netlink-packet-route" name = "netlink-packet-route"
version = "0.15.0" version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea993e32c77d87f01236c38f572ecb6c311d592e56a06262a007fd2a6e31253c" checksum = "9ea06a7cec15a9df94c58bddc472b1de04ca53bd32e72da7da2c5dd1c3885edc"
dependencies = [ dependencies = [
"anyhow", "bitflags 2.10.0",
"bitflags",
"byteorder",
"libc", "libc",
"log",
"netlink-packet-core", "netlink-packet-core",
"netlink-packet-utils",
]
[[package]]
name = "netlink-packet-utils"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34"
dependencies = [
"anyhow",
"byteorder",
"paste",
"thiserror",
] ]
[[package]] [[package]]
name = "netlink-proto" name = "netlink-proto"
version = "0.11.1" version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26305d12193227ef7b8227e7d61ae4eaf174607f79bd8eeceff07aacaefde497" checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128"
dependencies = [ dependencies = [
"bytes", "bytes",
"futures", "futures",
"log", "log",
"netlink-packet-core", "netlink-packet-core",
"netlink-sys", "netlink-sys",
"thiserror", "thiserror 2.0.17",
"tokio",
] ]
[[package]] [[package]]
...@@ -435,24 +484,14 @@ dependencies = [ ...@@ -435,24 +484,14 @@ dependencies = [
[[package]] [[package]]
name = "nix" name = "nix"
version = "0.26.2" version = "0.30.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
dependencies = [ dependencies = [
"bitflags", "bitflags 2.10.0",
"cfg-if", "cfg-if",
"cfg_aliases",
"libc", "libc",
"static_assertions",
]
[[package]]
name = "nom"
version = "7.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
dependencies = [
"memchr",
"minimal-lexical",
] ]
[[package]] [[package]]
...@@ -465,30 +504,20 @@ dependencies = [ ...@@ -465,30 +504,20 @@ dependencies = [
"libm", "libm",
] ]
[[package]]
name = "num_cpus"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
dependencies = [
"hermit-abi",
"libc",
]
[[package]] [[package]]
name = "once_cell" name = "once_cell"
version = "1.17.1" version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]] [[package]]
name = "ordered-multimap" name = "ordered-multimap"
version = "0.4.3" version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79"
dependencies = [ dependencies = [
"dlv-list", "dlv-list",
"hashbrown", "hashbrown 0.14.5",
] ]
[[package]] [[package]]
...@@ -511,7 +540,7 @@ dependencies = [ ...@@ -511,7 +540,7 @@ dependencies = [
"libc", "libc",
"redox_syscall", "redox_syscall",
"smallvec", "smallvec",
"windows-sys", "windows-sys 0.45.0",
] ]
[[package]] [[package]]
...@@ -522,9 +551,9 @@ checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" ...@@ -522,9 +551,9 @@ checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
[[package]] [[package]]
name = "pathdiff" name = "pathdiff"
version = "0.2.1" version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
[[package]] [[package]]
name = "pest" name = "pest"
...@@ -532,7 +561,7 @@ version = "2.5.7" ...@@ -532,7 +561,7 @@ version = "2.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122" checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122"
dependencies = [ dependencies = [
"thiserror", "thiserror 1.0.40",
"ucd-trie", "ucd-trie",
] ]
...@@ -572,9 +601,9 @@ dependencies = [ ...@@ -572,9 +601,9 @@ dependencies = [
[[package]] [[package]]
name = "pin-project-lite" name = "pin-project-lite"
version = "0.2.9" version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
[[package]] [[package]]
name = "pin-utils" name = "pin-utils"
...@@ -584,18 +613,18 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" ...@@ -584,18 +613,18 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.56" version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.26" version = "1.0.42"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
...@@ -604,11 +633,13 @@ dependencies = [ ...@@ -604,11 +633,13 @@ dependencies = [
name = "railgun-routing-client" name = "railgun-routing-client"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"anyhow",
"average", "average",
"bincode",
"config", "config",
"lazy_static",
"rtnetlink", "rtnetlink",
"serde", "serde",
"serde_derive",
"serde_json", "serde_json",
"tokio", "tokio",
] ]
...@@ -619,43 +650,46 @@ version = "0.2.16" ...@@ -619,43 +650,46 @@ version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
dependencies = [ dependencies = [
"bitflags", "bitflags 1.3.2",
] ]
[[package]] [[package]]
name = "ron" name = "ron"
version = "0.7.1" version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" checksum = "fd490c5b18261893f14449cbd28cb9c0b637aebf161cd77900bfdedaff21ec32"
dependencies = [ dependencies = [
"base64", "bitflags 2.10.0",
"bitflags", "once_cell",
"serde", "serde",
"serde_derive",
"typeid",
"unicode-ident",
] ]
[[package]] [[package]]
name = "rtnetlink" name = "rtnetlink"
version = "0.12.0" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed7d42da676fdf7e470e2502717587dd1089d8b48d9d1b846dcc3c01072858cb" checksum = "1f3ee907fdcec9200d13b9cdb64dfc8179cb4ac16ead6ae0ac76333dc41981fc"
dependencies = [ dependencies = [
"futures", "futures-channel",
"futures-util",
"log", "log",
"netlink-packet-core", "netlink-packet-core",
"netlink-packet-route", "netlink-packet-route",
"netlink-packet-utils",
"netlink-proto", "netlink-proto",
"netlink-sys", "netlink-sys",
"nix", "nix",
"thiserror", "thiserror 1.0.40",
"tokio", "tokio",
] ]
[[package]] [[package]]
name = "rust-ini" name = "rust-ini"
version = "0.18.0" version = "0.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"ordered-multimap", "ordered-multimap",
...@@ -675,18 +709,40 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" ...@@ -675,18 +709,40 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.159" version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
dependencies = [
"serde_core",
"serde_derive",
]
[[package]]
name = "serde-untagged"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058"
dependencies = [
"erased-serde",
"serde",
"serde_core",
"typeid",
]
[[package]]
name = "serde_core"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.159" version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
...@@ -695,13 +751,24 @@ dependencies = [ ...@@ -695,13 +751,24 @@ dependencies = [
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.95" version = "1.0.145"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
dependencies = [ dependencies = [
"itoa", "itoa",
"memchr",
"ryu", "ryu",
"serde", "serde",
"serde_core",
]
[[package]]
name = "serde_spanned"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392"
dependencies = [
"serde_core",
] ]
[[package]] [[package]]
...@@ -741,25 +808,19 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" ...@@ -741,25 +808,19 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
[[package]] [[package]]
name = "socket2" name = "socket2"
version = "0.4.9" version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
dependencies = [ dependencies = [
"libc", "libc",
"winapi", "windows-sys 0.60.2",
] ]
[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.13" version = "2.0.111"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
...@@ -772,7 +833,16 @@ version = "1.0.40" ...@@ -772,7 +833,16 @@ version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
dependencies = [ dependencies = [
"thiserror-impl", "thiserror-impl 1.0.40",
]
[[package]]
name = "thiserror"
version = "2.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
dependencies = [
"thiserror-impl 2.0.17",
] ]
[[package]] [[package]]
...@@ -786,30 +856,48 @@ dependencies = [ ...@@ -786,30 +856,48 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "thiserror-impl"
version = "2.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tiny-keccak"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
dependencies = [
"crunchy",
]
[[package]] [[package]]
name = "tokio" name = "tokio"
version = "1.27.0" version = "1.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
dependencies = [ dependencies = [
"autocfg",
"bytes", "bytes",
"libc", "libc",
"mio", "mio",
"num_cpus",
"parking_lot", "parking_lot",
"pin-project-lite", "pin-project-lite",
"signal-hook-registry", "signal-hook-registry",
"socket2", "socket2",
"tokio-macros", "tokio-macros",
"windows-sys", "windows-sys 0.61.2",
] ]
[[package]] [[package]]
name = "tokio-macros" name = "tokio-macros"
version = "2.0.0" version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
...@@ -818,13 +906,41 @@ dependencies = [ ...@@ -818,13 +906,41 @@ dependencies = [
[[package]] [[package]]
name = "toml" name = "toml"
version = "0.5.11" version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8"
dependencies = [ dependencies = [
"serde", "serde_core",
"serde_spanned",
"toml_datetime",
"toml_parser",
"winnow",
] ]
[[package]]
name = "toml_datetime"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533"
dependencies = [
"serde_core",
]
[[package]]
name = "toml_parser"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e"
dependencies = [
"winnow",
]
[[package]]
name = "typeid"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
[[package]] [[package]]
name = "typenum" name = "typenum"
version = "1.16.0" version = "1.16.0"
...@@ -843,12 +959,30 @@ version = "1.0.8" ...@@ -843,12 +959,30 @@ version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
[[package]]
name = "unicode-segmentation"
version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
[[package]]
name = "unty"
version = "0.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae"
[[package]] [[package]]
name = "version_check" name = "version_check"
version = "0.9.4" version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "virtue"
version = "0.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1"
[[package]] [[package]]
name = "wasi" name = "wasi"
version = "0.11.0+wasi-snapshot-preview1" version = "0.11.0+wasi-snapshot-preview1"
...@@ -856,34 +990,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" ...@@ -856,34 +990,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]] [[package]]
name = "winapi" name = "windows-link"
version = "0.3.9" version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]] [[package]]
name = "winapi-i686-pc-windows-gnu" name = "windows-sys"
version = "0.4.0" version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
dependencies = [
"windows-targets 0.42.2",
]
[[package]] [[package]]
name = "winapi-x86_64-pc-windows-gnu" name = "windows-sys"
version = "0.4.0" version = "0.60.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
dependencies = [
"windows-targets 0.53.5",
]
[[package]] [[package]]
name = "windows-sys" name = "windows-sys"
version = "0.45.0" version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
dependencies = [ dependencies = [
"windows-targets", "windows-link",
] ]
[[package]] [[package]]
...@@ -892,13 +1028,30 @@ version = "0.42.2" ...@@ -892,13 +1028,30 @@ version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
dependencies = [ dependencies = [
"windows_aarch64_gnullvm", "windows_aarch64_gnullvm 0.42.2",
"windows_aarch64_msvc", "windows_aarch64_msvc 0.42.2",
"windows_i686_gnu", "windows_i686_gnu 0.42.2",
"windows_i686_msvc", "windows_i686_msvc 0.42.2",
"windows_x86_64_gnu", "windows_x86_64_gnu 0.42.2",
"windows_x86_64_gnullvm", "windows_x86_64_gnullvm 0.42.2",
"windows_x86_64_msvc", "windows_x86_64_msvc 0.42.2",
]
[[package]]
name = "windows-targets"
version = "0.53.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
dependencies = [
"windows-link",
"windows_aarch64_gnullvm 0.53.1",
"windows_aarch64_msvc 0.53.1",
"windows_i686_gnu 0.53.1",
"windows_i686_gnullvm",
"windows_i686_msvc 0.53.1",
"windows_x86_64_gnu 0.53.1",
"windows_x86_64_gnullvm 0.53.1",
"windows_x86_64_msvc 0.53.1",
] ]
[[package]] [[package]]
...@@ -907,36 +1060,78 @@ version = "0.42.2" ...@@ -907,36 +1060,78 @@ version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
[[package]] [[package]]
name = "windows_aarch64_msvc" name = "windows_aarch64_msvc"
version = "0.42.2" version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_aarch64_msvc"
version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
[[package]] [[package]]
name = "windows_i686_gnu" name = "windows_i686_gnu"
version = "0.42.2" version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_gnu"
version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
[[package]]
name = "windows_i686_gnullvm"
version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
[[package]] [[package]]
name = "windows_i686_msvc" name = "windows_i686_msvc"
version = "0.42.2" version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_i686_msvc"
version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
[[package]] [[package]]
name = "windows_x86_64_gnu" name = "windows_x86_64_gnu"
version = "0.42.2" version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnu"
version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
[[package]] [[package]]
name = "windows_x86_64_gnullvm" name = "windows_x86_64_gnullvm"
version = "0.42.2" version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
[[package]] [[package]]
name = "windows_x86_64_msvc" name = "windows_x86_64_msvc"
version = "0.42.2" version = "0.42.2"
...@@ -944,10 +1139,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" ...@@ -944,10 +1139,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]] [[package]]
name = "yaml-rust" name = "windows_x86_64_msvc"
version = "0.4.5" version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
[[package]]
name = "winnow"
version = "0.7.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829"
dependencies = [
"memchr",
]
[[package]]
name = "yaml-rust2"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" checksum = "2462ea039c445496d8793d052e13787f2b90e750b833afee748e601c17621ed9"
dependencies = [ dependencies = [
"linked-hash-map", "arraydeque",
"encoding_rs",
"hashlink",
] ]
[package] [package]
name = "railgun-routing-client" name = "railgun-routing-client"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2024"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
config = "0.13.1" config = "0.15.19"
lazy_static = "1.4.0" average = "0.16.0"
average = "0.13.1" serde_json = "1.0.145"
serde_json = "1.0" serde = { version = "1.0.228", features = ["derive"] }
serde = "1.0.159" serde_derive = "1.0"
tokio = { version = "1", features = ["full"] } tokio = { version = "1.48", features = ["full"] }
rtnetlink = "0.12.0" rtnetlink = "0.19.0"
anyhow = "1.0.100"
bincode = { version = "2.0.1", features = ["derive"] }
...@@ -3,8 +3,8 @@ use std::collections::{HashMap, HashSet}; ...@@ -3,8 +3,8 @@ use std::collections::{HashMap, HashSet};
use crate::data::{GatewayGroup, Router}; use crate::data::{GatewayGroup, Router};
impl GatewayGroup { impl GatewayGroup {
pub fn routers(&self, groups: &Vec<GatewayGroup>, routers: &Vec<Router>) -> HashSet<u8> { pub fn routers(&self, groups: &[GatewayGroup], routers: &[Router]) -> HashSet<u8> {
return routers routers
.iter() .iter()
.filter(|r| self.include_routers.contains(&r.name)) .filter(|r| self.include_routers.contains(&r.name))
.chain( .chain(
...@@ -20,6 +20,6 @@ impl GatewayGroup { ...@@ -20,6 +20,6 @@ impl GatewayGroup {
.filter(|g| self.children.contains(&g.name)) .filter(|g| self.children.contains(&g.name))
.flat_map(|g1| g1.routers(groups, routers)), .flat_map(|g1| g1.routers(groups, routers)),
) )
.collect(); .collect()
} }
} }
use std::collections::{HashMap, HashSet}; use crate::data::Router as RouterData;
use crate::protocol::{Change, Hello, Report};
use crate::router::Router;
use crate::server::Server;
use crate::settings::{Settings, INTERVAL};
use anyhow::ensure;
use config::Config;
use std::collections::HashMap;
use std::fs; use std::fs;
use std::net::{IpAddr, SocketAddr}; use std::net::{IpAddr, Ipv6Addr, SocketAddr};
use std::time::SystemTime; use std::time::SystemTime;
use tokio::net::UdpSocket; use tokio::net::UdpSocket;
use tokio::time; use tokio::time;
use crate::data::{GatewayGroup, Router as RouterData};
use crate::protocol::{Change, Hello};
use crate::router::Router;
use crate::server::Server;
use crate::settings::CONFIG;
mod data; mod data;
mod gateway_group; mod gateway_group;
mod protocol; mod protocol;
...@@ -21,70 +21,78 @@ mod server; ...@@ -21,70 +21,78 @@ mod server;
mod settings; mod settings;
#[tokio::main] #[tokio::main]
async fn main() { async fn main() -> anyhow::Result<()> {
let routers_data = let config: Settings = Config::builder()
serde_json::from_slice::<Vec<RouterData>>(&fs::read("import/Router.json").unwrap()) .add_source(config::File::with_name("config/config.json"))
.unwrap(); .add_source(config::Environment::with_prefix("RAILGUN"))
let groups: Vec<GatewayGroup> = .build()?
serde_json::from_slice(&fs::read("import/GatewayGroup.json").unwrap()).unwrap(); .try_deserialize()?;
let routers_data = serde_json::from_slice::<Vec<RouterData>>(&fs::read("import/Router.json")?)?;
let mut routers: HashMap<u8, Router> = let mut routers: HashMap<u8, Router> = routers_data
serde_json::from_slice::<Vec<RouterData>>(&fs::read("import/Router.json").unwrap()) .iter()
.unwrap() .map(|r| (r.id, Router::new(r, &config)))
.iter() .collect();
.map(|r| (r.id, Router::new(r))) // let groups: Vec<GatewayGroup> = serde_json::from_slice(&fs::read("import/GatewayGroup.json")?)?;
.collect();
let mut server = Server::new( let mut server = Server::new(
&routers, // &routers,
groups // groups
.iter() // .iter()
.map(|g| (g.id, g.routers(&groups, &routers_data))) // .map(|g| (g.id, g.routers(&groups, &routers_data)))
.collect::<HashMap<u16, HashSet<u8>>>(), // .collect::<HashMap<u16, HashSet<u8>>>(),
); );
let mut self_peer = Hello { let mut hello = Hello { time: 0 };
id: CONFIG.id,
seq: 0,
time: 0,
};
let socket = UdpSocket::bind(SocketAddr::new(IpAddr::from([0, 0, 0, 0]), CONFIG.port)) let socket = UdpSocket::bind(SocketAddr::new(
.await IpAddr::V6(Ipv6Addr::UNSPECIFIED),
.unwrap(); config.port,
))
.await?;
let mut timer = time::interval(time::Duration::from_millis(CONFIG.interval)); let mut timer = time::interval(INTERVAL);
let mut buf = [0; 1500]; let mut buf = [0; 1500];
loop { loop {
tokio::select! { tokio::select! {
result = socket.recv_from(&mut buf) => { Ok((len, src)) = socket.recv_from(&mut buf) => {
let (_, src) = result.unwrap(); if src == config.server {
if src == CONFIG.server {
// from server // from server
let message: Change = serde_json::from_slice(&buf).unwrap(); let (message, _): (Change, usize) = bincode::decode_from_slice(&buf[..len], bincode::config::standard())?;
server.on_message(&socket, &message, &mut routers, &self_peer); server.on_message(&socket, &message, &mut routers, &hello);
} else { let report = Report {
id: config.id,
ack: server.ack,
peers: Vec::new()
};
let message = bincode::encode_to_vec(&report, bincode::config::standard())?;
let _ = socket.send_to(message.as_slice(), config.server);
} else if let Some(peer) = Router::get(&mut routers, src){
// from client // from client
let message: Hello = serde_json::from_slice(&buf).unwrap(); let (message, _): (Hello, usize) = bincode::decode_from_slice(&buf[..len], bincode::config::standard())?;
let peer = routers.get_mut(&message.id).unwrap();
assert_eq!(src, peer.link_address);
peer.on_message(&message); peer.on_message(&message);
} }
} }
_ = timer.tick() => { _ = timer.tick() => {
self_peer.time = SystemTime::now() // to clients
.duration_since(SystemTime::UNIX_EPOCH) hello.time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH)?.as_millis() as u16;
.unwrap() let message = bincode::encode_to_vec(&hello, bincode::config::standard())?;
.as_millis() as u64;
let message = serde_json::to_vec(&self_peer).unwrap();
for peer in routers.values() { for peer in routers.values() {
let _ = socket.send_to(message.as_slice(), peer.link_address); let _ = socket.send_to(message.as_slice(), peer.link_address);
} }
let _ = server.update(&socket, &mut routers, &self_peer);
self_peer.seq += 1; // to server
let report = Report {
id: config.id,
ack: server.ack,
peers: routers
.values_mut()
.map(|peer| peer.update(hello.time))
.collect(),
};
let message = bincode::encode_to_vec(&report, bincode::config::standard())?;
let _ = socket.send_to(message.as_slice(), config.server);
} }
} }
} }
......
use std::collections::HashMap; use bincode::{Decode, Encode};
use serde::{Deserialize, Serialize}; #[derive(Encode, Decode)]
#[derive(Serialize, Deserialize)]
pub struct Hello { pub struct Hello {
pub id: u8, pub time: u16,
pub seq: u32,
pub time: u64,
} }
#[derive(Serialize, Deserialize)] #[derive(Encode, Decode)]
pub struct Change { pub struct Report {
pub seq: u32, pub id: u8,
pub via: HashMap<u8, u8>, pub ack: u8,
pub plan: HashMap<u8, u8>, pub peers: Vec<PeerQuality>,
} }
#[derive(Serialize, Deserialize)] #[derive(Encode, Decode, Copy, Clone)]
pub struct PeerQuality { pub struct PeerQuality {
pub delay: f64, pub delay: i16,
pub jitter: f64, pub reliability: u8,
pub reliability: f64, pub jitter: u8,
} }
#[derive(Serialize, Deserialize)] #[derive(Encode, Decode)]
pub struct Report { pub struct Change {
pub id: u8, pub seq: u8,
pub ack: u32, pub via: Vec<(u8, u8)>,
pub peers: Option<HashMap<u8, PeerQuality>>, pub plan: Vec<(u8, u8)>,
} }
use rtnetlink::{new_connection, Error, Handle}; use rtnetlink::{new_connection, Error, Handle};
use std::collections::HashMap; use std::collections::HashMap;
struct RouteWriter { // struct RouteWriter {
via: HashMap<u8, u8>, // via: HashMap<u8, u8>,
plan: HashMap<u16, u8>, // plan: HashMap<u16, u8>,
} // }
//
impl RouteWriter { // impl RouteWriter {
fn new() -> Self { // fn new() -> Self {
let (connection, handle, _) = new_connection().unwrap(); // let (connection, handle, _) = new_connection().unwrap();
tokio::spawn(connection); // tokio::spawn(connection);
//
Self { // Self {
via: HashMap::new(), // via: HashMap::new(),
plan: HashMap::new(), // plan: HashMap::new(),
}; // };
} // }
//
fn set_via(&mut self, to: u8, via: u8) { // fn set_via(&mut self, to: u8, via: u8) {
self.via.insert(to, via); // self.via.insert(to, via);
} // }
//
fn set_plan(&mut self, group: u16, to: u8) { // fn set_plan(&mut self, group: u16, to: u8) {
self.plan.insert(group, to); // self.plan.insert(group, to);
} // }
//
fn commit(&mut self) { // fn commit(&mut self) {
// self.via.clear(); // // self.via.clear();
// self.plan.clear(); // // self.plan.clear();
} // }
} // }
use std::net::{IpAddr, SocketAddr};
use std::time::SystemTime;
use average::Mean;
use crate::data::Router as RouterData; use crate::data::Router as RouterData;
use crate::protocol::{Hello, PeerQuality}; use crate::protocol::{Hello, PeerQuality};
use crate::settings::CONFIG; use crate::settings::{Settings, HISTORY, INTERVAL, TIMEOUT};
use average::Mean;
use std::collections::HashMap;
use std::net::{IpAddr, SocketAddr};
use std::time::SystemTime;
pub struct Router { pub struct Router {
address: String,
pub link_address: SocketAddr, pub link_address: SocketAddr,
subnets: Vec<String>, quality: PeerQuality,
seq: u8,
delay: f64, remote_time: u16,
jitter: f64, local_time: u16,
reliability: f64, history: Vec<Option<i16>>,
seq: u32,
time: u64,
history: Vec<Option<u64>>,
} }
impl Router { impl Router {
pub fn new(data: &RouterData) -> Router { pub fn get(routers: &mut HashMap<u8, Router>, link_address: SocketAddr) -> Option<&mut Router> {
match link_address {
SocketAddr::V4(addr) => {
let id = addr.ip().octets()[3];
routers.get_mut(&id)
}
SocketAddr::V6(_) => None,
}
}
pub fn new(data: &RouterData, config: &Settings) -> Router {
Router { Router {
address: String::from(""), link_address: SocketAddr::new(
link_address: SocketAddr::new(IpAddr::from([10, 200, data.id, CONFIG.id]), CONFIG.port), IpAddr::from([169, 254, data.id, config.id]),
subnets: Vec::new(), config.port,
delay: 0.0, ),
jitter: 0.0, quality: PeerQuality {
reliability: 0.0, reliability: 0,
jitter: 0,
delay: 0,
},
seq: 0, seq: 0,
time: 0, local_time: 0,
remote_time: 0,
history: Vec::new(), history: Vec::new(),
} }
} }
pub fn reset(&mut self) { pub fn reset(&mut self) {
self.delay = 0.0; self.quality = PeerQuality {
self.jitter = 0.0; reliability: 0,
self.reliability = 0.0; jitter: 0,
self.seq = 0; delay: 0,
self.time = 0; };
self.history.clear();
} }
pub fn on_message(&mut self, data: &Hello) { pub fn on_message(&mut self, data: &Hello) {
if data.seq == 0 // 这个包发出距离上一个包
|| data.seq < self.seq - CONFIG.timeout let diff = data.time.wrapping_sub(self.remote_time) as i16;
|| data.seq > self.seq + CONFIG.timeout
{ // 收到时间略小于或相等的,可能是网络乱序或重包,忽略
// 收到 seq = 0 或 seq 与之前差距较大,就 reset if -(TIMEOUT.as_millis() as i16) < diff && diff <= 0 {
self.reset();
self.seq = data.seq - 1;
} else if data.seq <= self.seq {
// 收到 seq 比已知略小的,忽略
return; return;
} }
if 0 < diff && diff <= (TIMEOUT.as_millis() as i16) {
// 差距较小,补上中间丢的包
let step = (diff as f64 / INTERVAL.as_millis() as f64).round() as u8;
for _ in 0..step - 1 {
self.history.push(None);
}
} else {
// 差距较大,就 reset
self.reset();
}
let time = SystemTime::now() self.remote_time = data.time;
self.local_time = SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH) .duration_since(SystemTime::UNIX_EPOCH)
.unwrap() .unwrap()
.as_millis() as u64; .as_millis() as u16;
let step = data.seq - self.seq;
let delay = time - data.time; let delay = self.local_time.wrapping_sub(self.remote_time) as i16;
for _ in 0..step - 1 {
self.history.push(None);
}
self.history.push(Some(delay)); self.history.push(Some(delay));
self.history
.splice(0..self.history.len() - CONFIG.history, []);
let history: Vec<u64> = self if (self.history.len() > HISTORY as usize) {
.history self.history.drain(0..self.history.len() - HISTORY as usize);
.iter() }
.filter(|s| s.is_some())
.map(|s| s.unwrap()) let received: Vec<i16> = self.history.iter().filter_map(|&s| s).collect();
.collect(); assert!(!received.is_empty()); // 因为走到这里一定刚放过一个进去
self.reliability = history.len() as f64 / CONFIG.history as f64; self.quality.reliability = (received.len() * 255 / HISTORY as usize) as u8;
self.delay = history.iter().sum::<u64>() as f64 / history.len() as f64; self.quality.delay = received
self.jitter = (0..history.len() - 1) .iter()
.map(|i| (history[i] - history[i + 1]) as f64) .map(|&x| f64::from(x))
.collect::<Mean>()
.mean() as i16;
self.quality.jitter = (1..received.len())
.map(|i| f64::from(received[i].abs_diff(received[i - 1])))
.collect::<Mean>() .collect::<Mean>()
.mean(); .mean() as u8;
self.seq = data.seq;
self.time = time;
} }
pub(crate) fn update(&mut self, time: u64) -> PeerQuality { pub(crate) fn update(&mut self, local_time: u16) -> PeerQuality {
if self.reliability > 0.0 { if self.quality.reliability > 0 {
let diff = (local_time.wrapping_sub(self.local_time) as i16 as f64
/ INTERVAL.as_millis() as f64)
.round() as i16;
// 有几个包没到 // 有几个包没到
let step = ((time - self.time) / CONFIG.interval) as u32; if diff > TIMEOUT.as_millis() as i16 {
if step > CONFIG.timeout {
self.reset(); self.reset();
} else if diff >= (INTERVAL.as_millis() * 2) as i16 {
self.quality.reliability = self.quality.reliability.saturating_sub(255 / HISTORY);
} }
} }
let lost = (time - self.time) / CONFIG.interval - 2; self.quality
let reliability = f64::max(0.0, self.reliability - lost as f64 / CONFIG.history as f64);
PeerQuality {
delay: self.delay,
jitter: self.jitter,
reliability,
}
} }
} }
...@@ -2,19 +2,16 @@ use std::collections::{HashMap, HashSet}; ...@@ -2,19 +2,16 @@ use std::collections::{HashMap, HashSet};
use tokio::net::UdpSocket; use tokio::net::UdpSocket;
use crate::data::GatewayGroup;
use crate::protocol::{Change, Hello, Report}; use crate::protocol::{Change, Hello, Report};
use crate::router::Router; use crate::router::Router;
use crate::settings::CONFIG;
pub struct Server { pub struct Server {
ack: u32, pub(crate) ack: u8,
groups: HashMap<u16, HashSet<u8>>,
} }
impl Server { impl Server {
pub fn new(routers: &HashMap<u8, Router>, groups: HashMap<u16, HashSet<u8>>) -> Self { pub fn new() -> Self {
Server { ack: 0, groups } Server { ack: 0 }
} }
pub fn on_message( pub fn on_message(
...@@ -56,20 +53,8 @@ impl Server { ...@@ -56,20 +53,8 @@ impl Server {
&mut self, &mut self,
socket: &UdpSocket, socket: &UdpSocket,
routers: &mut HashMap<u8, Router>, routers: &mut HashMap<u8, Router>,
self_peer: &Hello, hello: &Hello,
) { ) {
let data = Report {
id: self_peer.id,
ack: self.ack,
peers: Some(
routers
.into_iter()
.map(|(&id, peer)| (id, peer.update(self_peer.time)))
.collect(),
),
};
let message = serde_json::to_vec(&data).unwrap();
let _ = socket.send_to(message.as_slice(), CONFIG.server);
} }
} }
use std::net::SocketAddr; use std::net::SocketAddr;
use std::time::Duration;
use config::Config; use config::Config;
use lazy_static::lazy_static;
use serde::Deserialize; use serde::Deserialize;
use tokio::time;
#[derive(Deserialize)] #[derive(Deserialize)]
pub struct Settings { pub struct Settings {
pub id: u8, pub id: u8,
pub server: SocketAddr, pub server: SocketAddr,
pub port: u16, pub port: u16,
pub timeout: u32, // pub TIMEOUT: u32,
pub history: usize, // pub history: usize,
pub interval: u64, // pub INTERVAL: u64,
pub table: u16, // pub table: u16,
pub proto: u16, // pub proto: u16,
} }
lazy_static! { pub const INTERVAL: Duration = Duration::from_secs(1);
pub static ref CONFIG: Settings = Config::builder() pub const TIMEOUT: Duration = Duration::from_secs(10);
.add_source(config::File::with_name("config/config.json")) pub const HISTORY: u8 = 100;
.add_source(config::Environment::with_prefix("RAILGUN"))
.build() // pub static ref CONFIG: Settings = Config::builder()
.unwrap() // .add_source(config::File::with_name("config/config.json"))
.try_deserialize() // .add_source(config::Environment::with_prefix("RAILGUN"))
.unwrap(); // .build()
} // .unwrap()
// .try_deserialize()
// .unwrap();
//
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment