[INFO] fetching crate vcl-protocol 1.5.0...
[INFO] testing vcl-protocol-1.5.0 against 1.99.0-beta.8 for beta-1.100-2
[INFO] extracting crate vcl-protocol 1.5.0 into /workspace/builds/worker-0-tc1/source
[INFO] started tweaking crates.io crate vcl-protocol 1.5.0
[INFO] removed 0 missing examples
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate vcl-protocol 1.5.0
[INFO] tweaked toml for crates.io crate vcl-protocol 1.5.0 written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate vcl-protocol 1.5.0 on toolchain 1.99.0-beta.8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate vcl-protocol 1.5.0 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded zeroize_derive v1.4.3
[INFO] [stderr]   Downloaded windows-core v0.51.1
[INFO] [stderr]   Downloaded libloading v0.8.9
[INFO] [stderr]   Downloaded c2rust-bitfields v0.21.0
[INFO] [stderr]   Downloaded c2rust-bitfields-derive v0.21.0
[INFO] [stderr]   Downloaded rustls-platform-verifier-android v0.1.1
[INFO] [stderr]   Downloaded rustls-native-certs v0.8.3
[INFO] [stderr]   Downloaded c2rust-bitfields v0.18.0
[INFO] [stderr]   Downloaded fastbloom v0.14.1
[INFO] [stderr]   Downloaded windows-targets v0.42.2
[INFO] [stderr]   Downloaded jni-sys-macros v0.4.1
[INFO] [stderr]   Downloaded jni-sys v0.3.1
[INFO] [stderr]   Downloaded siphasher v1.0.2
[INFO] [stderr]   Downloaded pqcrypto-traits v0.3.5
[INFO] [stderr]   Downloaded libloading v0.9.0
[INFO] [stderr]   Downloaded rustls-platform-verifier v0.6.2
[INFO] [stderr]   Downloaded jni-sys v0.4.1
[INFO] [stderr]   Downloaded cesu8 v1.1.0
[INFO] [stderr]   Downloaded is-terminal v0.4.17
[INFO] [stderr]   Downloaded c2rust-bitfields-derive v0.18.0
[INFO] [stderr]   Downloaded tun v0.7.22
[INFO] [stderr]   Downloaded jobserver v0.1.34
[INFO] [stderr]   Downloaded glob v0.3.3
[INFO] [stderr]   Downloaded criterion-plot v0.5.0
[INFO] [stderr]   Downloaded winreg v0.55.0
[INFO] [stderr]   Downloaded yasna v0.5.2
[INFO] [stderr]   Downloaded chacha20 v0.9.1
[INFO] [stderr]   Downloaded rcgen v0.13.2
[INFO] [stderr]   Downloaded poly1305 v0.8.0
[INFO] [stderr]   Downloaded procfs v0.16.0
[INFO] [stderr]   Downloaded procfs-core v0.16.0
[INFO] [stderr]   Downloaded pqcrypto-internals v0.2.11
[INFO] [stderr]   Downloaded cc v1.2.60
[INFO] [stderr]   Downloaded rustls-webpki v0.103.12
[INFO] [stderr]   Downloaded prometheus v0.13.4
[INFO] [stderr]   Downloaded criterion v0.5.1
[INFO] [stderr]   Downloaded jni v0.21.1
[INFO] [stderr]   Downloaded chacha20poly1305 v0.10.1
[INFO] [stderr]   Downloaded webpki-root-certs v1.0.6
[INFO] [stderr]   Downloaded combine v4.6.7
[INFO] [stderr]   Downloaded protobuf v2.28.0
[INFO] [stderr]   Downloaded rayon v1.11.0
[INFO] [stderr]   Downloaded nix v0.30.1
[INFO] [stderr]   Downloaded windows_aarch64_gnullvm v0.42.2
[INFO] [stderr]   Downloaded rustls v0.23.38
[INFO] [stderr]   Downloaded windows_x86_64_gnullvm v0.42.2
[INFO] [stderr]   Downloaded etherparse v0.15.0
[INFO] [stderr]   Downloaded windows_x86_64_msvc v0.42.2
[INFO] [stderr]   Downloaded windows_aarch64_msvc v0.42.2
[INFO] [stderr]   Downloaded windows_x86_64_gnu v0.42.2
[INFO] [stderr]   Downloaded windows_i686_msvc v0.42.2
[INFO] [stderr]   Downloaded windows_i686_gnu v0.42.2
[INFO] [stderr]   Downloaded wintun v0.3.2
[INFO] [stderr]   Downloaded wintun-bindings v0.7.34
[INFO] [stderr]   Downloaded pqcrypto-kyber v0.8.1
[INFO] [stderr]   Downloaded windows v0.51.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762
[INFO] running `Command { std: "docker" "start" "502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.183
[INFO] [stderr]    Compiling version_check v0.9.5
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling scopeguard v1.2.0
[INFO] [stderr]    Compiling zerocopy v0.8.48
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling semver v1.0.27
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling bytes v1.11.1
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling cfg_aliases v0.2.1
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling nix v0.30.1
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling protobuf v2.28.0
[INFO] [stderr]    Compiling rustc_version v0.4.1
[INFO] [stderr]    Compiling hex v0.4.3
[INFO] [stderr]    Compiling procfs v0.16.0
[INFO] [stderr]    Compiling linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling data-encoding v2.10.0
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling prometheus v0.13.4
[INFO] [stderr]    Compiling signature v2.2.0
[INFO] [stderr]    Compiling procfs-core v0.16.0
[INFO] [stderr]    Compiling utf-8 v0.7.6
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling opaque-debug v0.3.1
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling ed25519 v2.2.3
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling curve25519-dalek v4.1.3
[INFO] [stderr]    Compiling fnv v1.0.7
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling arrayvec v0.7.6
[INFO] [stderr]    Compiling etherparse v0.15.0
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling inout v0.1.4
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling universal-hash v0.5.1
[INFO] [stderr]    Compiling aead v0.5.2
[INFO] [stderr]    Compiling poly1305 v0.8.0
[INFO] [stderr]    Compiling sha1 v0.10.6
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling zeroize_derive v1.4.3
[INFO] [stderr]    Compiling tokio-macros v2.6.1
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling curve25519-dalek-derive v0.1.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling tokio v1.50.0
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling cipher v0.4.4
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling chacha20 v0.9.1
[INFO] [stderr]    Compiling chacha20poly1305 v0.10.1
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling tungstenite v0.24.0
[INFO] [stderr]    Compiling ed25519-dalek v2.2.0
[INFO] [stderr]    Compiling x25519-dalek v2.0.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling bincode v1.3.3
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tokio-tungstenite v0.24.0
[INFO] [stderr]    Compiling tun v0.7.22
[INFO] [stderr]    Compiling vcl-protocol v1.5.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `KeepaliveConfig`
[INFO] [stdout]   --> src/tunnel.rs:23:24
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::keepalive::{KeepaliveConfig, KeepaliveManager, KeepaliveAction, KeepalivePreset};
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tunnel.rs:230:13
[INFO] [stdout]     |
[INFO] [stdout] 230 |         let mut dns_config = DnsConfig {
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rr_weights` is never read
[INFO] [stdout]    --> src/multipath.rs:153:5
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub struct MultipathSender {
[INFO] [stdout]     |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 153 |     rr_weights: Vec<u32>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `KeepaliveConfig`
[INFO] [stdout]   --> src/tunnel.rs:23:24
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::keepalive::{KeepaliveConfig, KeepaliveManager, KeepaliveAction, KeepalivePreset};
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tunnel.rs:230:13
[INFO] [stdout]     |
[INFO] [stdout] 230 |         let mut dns_config = DnsConfig {
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sequence` and `size` are never read
[INFO] [stdout]   --> src/event.rs:52:9
[INFO] [stdout]    |
[INFO] [stdout] 50 |     PacketReceived {
[INFO] [stdout]    |     -------------- fields in this variant
[INFO] [stdout] 51 |         /// Sequence number of the received packet.
[INFO] [stdout] 52 |         sequence: u64,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 53 |         /// Size of the decrypted payload in bytes.
[INFO] [stdout] 54 |         size: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `latency` is never read
[INFO] [stdout]   --> src/event.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 61 |     PongReceived {
[INFO] [stdout]    |     ------------ field in this variant
[INFO] [stdout] 62 |         /// Measured round-trip time from `ping()` to pong receipt.
[INFO] [stdout] 63 |         latency: Duration,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Disconnected` and `Error` are never constructed
[INFO] [stdout]   --> src/event.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub enum VCLEvent {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 47 |     Disconnected,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     Error(String),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/packet.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | impl VCLPacket {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 61 |     /// Create a new [`PacketType::Data`] packet.
[INFO] [stdout] 62 |     pub fn new(sequence: u64, prev_hash: Vec<u8>, payload: Vec<u8>, nonce: [u8; 24]) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/connection.rs:167:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | impl VCLConnection {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn subscribe(&mut self) -> mpsc::Receiver<VCLEvent> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn set_timeout(&mut self, secs: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn get_timeout(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn last_activity(&self) -> Instant {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub fn get_config(&self) -> &VCLConfig {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     pub fn flow(&self) -> &FlowController {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn ack_packet(&mut self, sequence: u64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub async fn ping(&mut self) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub async fn rotate_keys(&mut self) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 685 |     pub fn close(&mut self) -> Result<(), VCLError> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 706 |     pub fn is_closed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 711 |     pub fn get_public_key(&self) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 717 |     pub fn get_shared_secret(&self) -> Option<[u8; 32]> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `ConnectionId` is never used
[INFO] [stdout]   --> src/pool.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub type ConnectionId = u64;
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VCLPool` is never constructed
[INFO] [stdout]   --> src/pool.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct VCLPool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/pool.rs:56:12
[INFO] [stdout]     |
[INFO] [stdout]  48 | impl VCLPool {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn new(max_connections: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub async fn bind(&mut self, addr: &str) -> Result<ConnectionId, VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub async fn connect(&mut self, id: ConnectionId, addr: &str) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub async fn accept_handshake(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub async fn send(&mut self, id: ConnectionId, data: &[u8]) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub async fn recv(&mut self, id: ConnectionId) -> Result<VCLPacket, VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub async fn ping(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub async fn rotate_keys(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn close(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn close_all(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub fn is_full(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn connection_ids(&self) -> Vec<ConnectionId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn contains(&self, id: ConnectionId) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn get(&self, id: ConnectionId) -> Result<&VCLConnection, VCLError> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     fn get_mut(&mut self, id: ConnectionId) -> Result<&mut VCLConnection, VCLError> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Tcp` and `Udp` are never constructed
[INFO] [stdout]   --> src/config.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub enum TransportMode {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 35 |     Tcp,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     Udp,
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TransportMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Reliable`, `Partial`, and `Unreliable` are never constructed
[INFO] [stdout]   --> src/config.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub enum ReliabilityMode {
[INFO] [stdout]    |          --------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 56 |     Reliable,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     Partial,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     Unreliable,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ReliabilityMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `transport`, `max_retries`, and `retry_interval_ms` are never read
[INFO] [stdout]    --> src/config.rs:89:9
[INFO] [stdout]     |
[INFO] [stdout]  87 | pub struct VCLConfig {
[INFO] [stdout]     |            --------- fields in this struct
[INFO] [stdout]  88 |     /// Transport protocol to use.
[INFO] [stdout]  89 |     pub transport: TransportMode,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub max_retries: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub retry_interval_ms: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `VCLConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `vpn`, `gaming`, `streaming`, `is_tcp`, and `has_retransmission` are never used
[INFO] [stdout]    --> src/config.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl VCLConfig {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn vpn() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn gaming() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn streaming() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub fn is_tcp(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn has_retransmission(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UDP_MAX_SIZE` is never used
[INFO] [stdout]   --> src/transport.rs:55:7
[INFO] [stdout]    |
[INFO] [stdout] 55 | const UDP_MAX_SIZE: usize = 65535;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TCP_HEADER_SIZE` is never used
[INFO] [stdout]   --> src/transport.rs:56:7
[INFO] [stdout]    |
[INFO] [stdout] 56 | const TCP_HEADER_SIZE: usize = 4;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `VCLTransport` is never used
[INFO] [stdout]   --> src/transport.rs:67:10
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub enum VCLTransport {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/transport.rs:118:18
[INFO] [stdout]     |
[INFO] [stdout] 114 | impl VCLTransport {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub async fn bind_udp(addr: &str) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub async fn bind_tcp(addr: &str) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub async fn connect_tcp(addr: &str) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub async fn bind_ws(addr: &str) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub async fn connect_ws(url: &str) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub async fn accept(&self) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub async fn from_config_client(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 304 |     pub async fn from_config_server(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub async fn send_raw(&mut self, data: &[u8]) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     pub async fn recv_raw(&mut self) -> Result<(Vec<u8>, SocketAddr), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 489 |     pub fn local_addr(&self) -> Option<SocketAddr> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 505 |     pub fn peer_addr(&self) -> Option<SocketAddr> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 521 |     pub fn set_peer_addr(&mut self, addr: SocketAddr) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 528 |     pub fn mode(&self) -> TransportMode {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 543 |     pub fn is_tcp(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     pub fn is_udp(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 556 |     pub fn is_websocket(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_last` is never used
[INFO] [stdout]   --> src/fragment.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 45 | impl Fragment {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] 46 |     /// Returns `true` if this is the last fragment in the message.
[INFO] [stdout] 47 |     pub fn is_last(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `needs_split` is never used
[INFO] [stdout]   --> src/fragment.rs:99:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | impl Fragmenter {
[INFO] [stdout]    | --------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 99 |     pub fn needs_split(data: &[u8], fragment_size: usize) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `with_max_pending`, `pending_count`, and `cleanup` are never used
[INFO] [stdout]    --> src/fragment.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 122 | impl Reassembler {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn with_max_pending(max_pending: usize) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn pending_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub fn cleanup(&mut self) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AIMD_DECREASE_FACTOR` is never used
[INFO] [stdout]   --> src/flow.rs:49:7
[INFO] [stdout]    |
[INFO] [stdout] 49 | const AIMD_DECREASE_FACTOR: f64 = 0.5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CWND_MIN` is never used
[INFO] [stdout]   --> src/flow.rs:50:7
[INFO] [stdout]    |
[INFO] [stdout] 50 | const CWND_MIN: f64 = 1.0;
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `retransmit_count` and `data` are never read
[INFO] [stdout]   --> src/flow.rs:60:9
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub struct InFlightPacket {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub retransmit_count: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 61 |     /// Original data payload — stored for retransmission.
[INFO] [stdout] 62 |     pub data: Vec<u8>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InFlightPacket` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_timed_out` is never used
[INFO] [stdout]   --> src/flow.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 65 | impl InFlightPacket {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn is_timed_out(&self, rto: Duration) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RetransmitRequest` is never constructed
[INFO] [stdout]   --> src/flow.rs:83:12
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub struct RetransmitRequest {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `total_lost` and `total_retransmits` are never read
[INFO] [stdout]    --> src/flow.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout]  94 | pub struct FlowController {
[INFO] [stdout]     |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 106 |     total_lost: u64,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 107 |     total_retransmits: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/flow.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 110 | impl FlowController {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn with_rto(window_size: usize, rto_ms: u64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn available_slots(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub fn cwnd(&self) -> f64 {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn in_slow_start(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn set_window_size(&mut self, size: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn timed_out_packets(&mut self) -> Vec<RetransmitRequest> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 293 |     fn on_loss_cwnd(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 334 |     pub fn srtt(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn rttvar(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 344 |     pub fn rto(&self) -> Duration {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     pub fn total_sent(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 354 |     pub fn total_acked(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 359 |     pub fn total_lost(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     pub fn total_retransmits(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 369 |     pub fn loss_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 375 |     pub fn is_acked(&self, sequence: u64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VCLMetrics` is never constructed
[INFO] [stdout]   --> src/metrics.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct VCLMetrics {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/metrics.rs:65:12
[INFO] [stdout]     |
[INFO] [stdout]  63 | impl VCLMetrics {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  64 |     /// Create a new zeroed metrics instance.
[INFO] [stdout]  65 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn record_sent(&mut self, bytes: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub fn record_received(&mut self, bytes: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn record_retransmit(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn record_drop_replay(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn record_drop_chain(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn record_drop_signature(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn record_fragment_sent(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn record_fragment_reassembled(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn record_key_rotation(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn record_handshake(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn record_rtt_sample(&mut self, rtt: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn record_cwnd(&mut self, cwnd: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn loss_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn avg_rtt(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn min_rtt(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub fn max_rtt(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub fn current_cwnd(&self) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn avg_cwnd(&self) -> Option<f64> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub fn total_dropped(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub fn throughput_sent_bps(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn throughput_recv_bps(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn uptime(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 238 |     pub fn merge(&mut self, other: &VCLMetrics) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TunConfig` is never constructed
[INFO] [stdout]   --> src/tun_device.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct TunConfig {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `IpVersion` is never used
[INFO] [stdout]   --> src/tun_device.rs:90:10
[INFO] [stdout]    |
[INFO] [stdout] 90 | pub enum IpVersion {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IpPacket` is never constructed
[INFO] [stdout]   --> src/tun_device.rs:98:12
[INFO] [stdout]    |
[INFO] [stdout] 98 | pub struct IpPacket {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VCLTun` is never constructed
[INFO] [stdout]    --> src/tun_device.rs:116:12
[INFO] [stdout]     |
[INFO] [stdout] 116 | pub struct VCLTun {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/tun_device.rs:136:12
[INFO] [stdout]     |
[INFO] [stdout] 126 | impl VCLTun {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn create(config: TunConfig) -> Result<Self, VCLError> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub async fn read_packet(&mut self) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub async fn write_packet(&mut self, packet: &[u8]) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn mtu(&self) -> u16 {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 269 |     pub fn address(&self) -> Ipv4Addr {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 274 |     pub fn destination(&self) -> Ipv4Addr {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn config(&self) -> &TunConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_ip_packet` is never used
[INFO] [stdout]    --> src/tun_device.rs:293:8
[INFO] [stdout]     |
[INFO] [stdout] 293 | pub fn parse_ip_packet(raw: Vec<u8>) -> Result<IpPacket, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_ipv4` is never used
[INFO] [stdout]    --> src/tun_device.rs:318:4
[INFO] [stdout]     |
[INFO] [stdout] 318 | fn parse_ipv4(raw: Vec<u8>, len: usize) -> Result<IpPacket, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_ipv6` is never used
[INFO] [stdout]    --> src/tun_device.rs:346:4
[INFO] [stdout]     |
[INFO] [stdout] 346 | fn parse_ipv6(raw: Vec<u8>, len: usize) -> Result<IpPacket, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_ipv4` is never used
[INFO] [stdout]    --> src/tun_device.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn is_ipv4(raw: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_ipv6` is never used
[INFO] [stdout]    --> src/tun_device.rs:372:8
[INFO] [stdout]     |
[INFO] [stdout] 372 | pub fn is_ipv6(raw: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `ip_version` is never used
[INFO] [stdout]    --> src/tun_device.rs:377:8
[INFO] [stdout]     |
[INFO] [stdout] 377 | pub fn ip_version(raw: &[u8]) -> Option<IpVersion> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `IpVersion` is never used
[INFO] [stdout]   --> src/ip_packet.rs:38:10
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub enum IpVersion {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TransportProtocol` is never used
[INFO] [stdout]   --> src/ip_packet.rs:45:10
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub enum TransportProtocol {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `src_port`, `dst_port`, `is_syn`, `is_fin`, `is_rst`, and `protocol_number` are never used
[INFO] [stdout]    --> src/ip_packet.rs:80:12
[INFO] [stdout]     |
[INFO] [stdout]  78 | impl TransportProtocol {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout]  79 |     /// Returns the source port if this is TCP or UDP.
[INFO] [stdout]  80 |     pub fn src_port(&self) -> Option<u16> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn dst_port(&self) -> Option<u16> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn is_syn(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn is_fin(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn is_rst(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn protocol_number(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ParsedPacket` is never constructed
[INFO] [stdout]    --> src/ip_packet.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub struct ParsedPacket {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/ip_packet.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 145 | impl ParsedPacket {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn parse(raw: Vec<u8>) -> Result<Self, VCLError> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     fn parse_ipv4(raw: Vec<u8>) -> Result<Self, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     fn parse_ipv6(raw: Vec<u8>) -> Result<Self, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     pub fn is_ipv4(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 239 |     pub fn is_ipv6(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn is_destined_for(&self, ip: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn is_from(&self, ip: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 254 |     pub fn ip_payload(&self) -> &[u8] {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     pub fn is_dns(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn is_ping(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 276 |     pub fn summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_transport` is never used
[INFO] [stdout]    --> src/ip_packet.rs:303:4
[INFO] [stdout]     |
[INFO] [stdout] 303 | fn parse_transport(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_tcp` is never used
[INFO] [stdout]    --> src/ip_packet.rs:317:4
[INFO] [stdout]     |
[INFO] [stdout] 317 | fn parse_tcp(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_udp` is never used
[INFO] [stdout]    --> src/ip_packet.rs:335:4
[INFO] [stdout]     |
[INFO] [stdout] 335 | fn parse_udp(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_icmp` is never used
[INFO] [stdout]    --> src/ip_packet.rs:349:4
[INFO] [stdout]     |
[INFO] [stdout] 349 | fn parse_icmp(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_icmpv6` is never used
[INFO] [stdout]    --> src/ip_packet.rs:359:4
[INFO] [stdout]     |
[INFO] [stdout] 359 | fn parse_icmpv6(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PathInfo` is never constructed
[INFO] [stdout]   --> src/multipath.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub struct PathInfo {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `score`, `loss_rate`, `update_srtt`, `record_sent`, and `record_loss` are never used
[INFO] [stdout]    --> src/multipath.rs:73:12
[INFO] [stdout]     |
[INFO] [stdout]  71 | impl PathInfo {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout]  72 |     /// Create a new path with name, local address, bandwidth, and latency.
[INFO] [stdout]  73 |     pub fn new(name: &str, local_addr: &str, bandwidth_mbps: u32, latency_ms: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub fn loss_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn update_srtt(&mut self, rtt: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn record_sent(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn record_loss(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SchedulingPolicy` is never used
[INFO] [stdout]    --> src/multipath.rs:132:10
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub enum SchedulingPolicy {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultipathSender` is never constructed
[INFO] [stdout]    --> src/multipath.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub struct MultipathSender {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/multipath.rs:163:12
[INFO] [stdout]     |
[INFO] [stdout] 158 | impl MultipathSender {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn new(paths: Vec<PathInfo>, policy: SchedulingPolicy) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn select_path_index(&mut self, data_len: usize) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn select_all_paths(&mut self) -> Vec<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn path(&self, index: usize) -> Option<&PathInfo> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 269 |     pub fn path_mut(&mut self, index: usize) -> Option<&mut PathInfo> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 274 |     pub fn paths(&self) -> &[PathInfo] {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn active_path_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn deactivate_path(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn activate_path(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn record_loss(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn update_rtt(&mut self, index: usize, rtt: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn total_scheduled(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 319 |     pub fn set_policy(&mut self, policy: SchedulingPolicy) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn policy(&self) -> &SchedulingPolicy {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultipathReceiver` is never constructed
[INFO] [stdout]    --> src/multipath.rs:334:12
[INFO] [stdout]     |
[INFO] [stdout] 334 | pub struct MultipathReceiver {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/multipath.rs:351:12
[INFO] [stdout]     |
[INFO] [stdout] 349 | impl MultipathReceiver {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout] 350 |     /// Create a new receiver with default buffer size (256).
[INFO] [stdout] 351 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |     pub fn with_buffer_size(max_buffer: usize) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub fn add(&mut self, seq: u64, path_id: &str, data: Vec<u8>) -> Option<(String, Vec<u8>)> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 425 |     pub fn drain_ordered(&mut self) -> Vec<(u64, String, Vec<u8>)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 437 |     pub fn next_seq(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 442 |     pub fn pending_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 447 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 456 |     pub fn total_received(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 461 |     pub fn total_delivered(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 466 |     pub fn total_duplicates(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VCL_HEADER_OVERHEAD` is never used
[INFO] [stdout]   --> src/mtu.rs:44:11
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub const VCL_HEADER_OVERHEAD: usize = 149;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ETHERNET_MTU` is never used
[INFO] [stdout]   --> src/mtu.rs:47:11
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub const ETHERNET_MTU: usize = 1500;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `IPV4_HEADER` is never used
[INFO] [stdout]   --> src/mtu.rs:50:11
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub const IPV4_HEADER: usize = 20;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `IPV6_HEADER` is never used
[INFO] [stdout]   --> src/mtu.rs:53:11
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub const IPV6_HEADER: usize = 40;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UDP_HEADER` is never used
[INFO] [stdout]   --> src/mtu.rs:56:11
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub const UDP_HEADER: usize = 8;
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MIN_MTU` is never used
[INFO] [stdout]   --> src/mtu.rs:59:11
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub const MIN_MTU: usize = 576;
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_MTU` is never used
[INFO] [stdout]   --> src/mtu.rs:62:11
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub const MAX_MTU: usize = 9000; // jumbo frames
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MtuConfig` is never constructed
[INFO] [stdout]   --> src/mtu.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct MtuConfig {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `ipv4_udp`, `ipv6_udp`, and `inside_wireguard` are never used
[INFO] [stdout]    --> src/mtu.rs:99:12
[INFO] [stdout]     |
[INFO] [stdout]  97 | impl MtuConfig {
[INFO] [stdout]     | -------------- associated functions in this implementation
[INFO] [stdout]  98 |     /// Config for a connection running over IPv4/UDP.
[INFO] [stdout]  99 |     pub fn ipv4_udp() -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn ipv6_udp() -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn inside_wireguard() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PathMtu` is never constructed
[INFO] [stdout]    --> src/mtu.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub struct PathMtu {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `is_stale` are never used
[INFO] [stdout]    --> src/mtu.rs:137:12
[INFO] [stdout]     |
[INFO] [stdout] 135 | impl PathMtu {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] 136 |     /// Create a new PathMtu.
[INFO] [stdout] 137 |     pub fn new(mtu: usize, fragment_size: usize, is_probed: bool) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn is_stale(&self, max_age: Duration) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MtuState` is never used
[INFO] [stdout]    --> src/mtu.rs:154:10
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub enum MtuState {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MtuNegotiator` is never constructed
[INFO] [stdout]    --> src/mtu.rs:173:12
[INFO] [stdout]     |
[INFO] [stdout] 173 | pub struct MtuNegotiator {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/mtu.rs:190:12
[INFO] [stdout]     |
[INFO] [stdout] 188 | impl MtuNegotiator {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 189 |     /// Create a new negotiator with the given config.
[INFO] [stdout] 190 |     pub fn new(config: MtuConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn start_discovery(&mut self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn record_probe(&mut self, size: usize, success: bool) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn check_probe_timeout(&self) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn current_mtu(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn state(&self) -> &MtuState {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn is_complete(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 310 |     pub fn recommended_fragment_size(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     pub fn set_mtu(&mut self, mtu: usize) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 340 |     pub fn fallback_to_min(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 347 |     pub fn path_mtu(&self) -> PathMtu {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 356 |     pub fn total_probes(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn successful_probes(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     pub fn probe_history(&self) -> &[(usize, bool)] {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fragment_size_for_mtu` is never used
[INFO] [stdout]    --> src/mtu.rs:381:8
[INFO] [stdout]     |
[INFO] [stdout] 381 | pub fn fragment_size_for_mtu(mtu: usize, ipv6: bool, extra_overhead: usize) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `KeepalivePreset` is never used
[INFO] [stdout]   --> src/keepalive.rs:44:10
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub enum KeepalivePreset {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeepaliveConfig` is never constructed
[INFO] [stdout]   --> src/keepalive.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct KeepaliveConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/keepalive.rs:79:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl KeepaliveConfig {
[INFO] [stdout]     | -------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn mobile() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn home() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn corporate() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn datacenter() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn aggressive() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn disabled() -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn from_preset(preset: KeepalivePreset) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `KeepaliveAction` is never used
[INFO] [stdout]    --> src/keepalive.rs:158:10
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub enum KeepaliveAction {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeepaliveManager` is never constructed
[INFO] [stdout]    --> src/keepalive.rs:170:12
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub struct KeepaliveManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/keepalive.rs:196:12
[INFO] [stdout]     |
[INFO] [stdout] 194 | impl KeepaliveManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 195 |     /// Create a new keepalive manager with the given config.
[INFO] [stdout] 196 |     pub fn new(config: KeepaliveConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn from_preset(preset: KeepalivePreset) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     pub fn check(&mut self) -> KeepaliveAction {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn should_send_keepalive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn record_keepalive_sent(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 306 |     pub fn record_pong_received(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     pub fn record_pong_missed(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 338 |     pub fn record_activity(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     pub fn reset_misses(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 359 |     fn update_srtt(&mut self, rtt: Duration) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 370 |     fn adjust_interval(&mut self, rtt: Duration) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     pub fn srtt(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 397 |     pub fn current_interval(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 402 |     pub fn missed_pongs(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 407 |     pub fn is_waiting_for_pong(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 412 |     pub fn is_dead(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 417 |     pub fn total_sent(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 422 |     pub fn total_pongs(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 427 |     pub fn last_pong(&self) -> Option<Instant> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 432 |     pub fn config(&self) -> &KeepaliveConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReconnectConfig` is never constructed
[INFO] [stdout]   --> src/reconnect.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct ReconnectConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `mobile`, `stable`, and `instant` are never used
[INFO] [stdout]    --> src/reconnect.rs:89:12
[INFO] [stdout]     |
[INFO] [stdout]  86 | impl ReconnectConfig {
[INFO] [stdout]     | -------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn mobile() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn stable() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn instant() -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ReconnectState` is never used
[INFO] [stdout]    --> src/reconnect.rs:127:10
[INFO] [stdout]     |
[INFO] [stdout] 127 | pub enum ReconnectState {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReconnectManager` is never constructed
[INFO] [stdout]    --> src/reconnect.rs:141:12
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub struct ReconnectManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/reconnect.rs:162:12
[INFO] [stdout]     |
[INFO] [stdout] 160 | impl ReconnectManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 161 |     /// Create a new reconnect manager.
[INFO] [stdout] 162 |     pub fn new(config: ReconnectConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn mobile() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn stable() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn on_disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn on_connect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn on_failure(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn on_attempt_start(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 288 |     pub fn should_reconnect(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn time_until_reconnect(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn check_stability(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 341 |     pub fn state(&self) -> &ReconnectState {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 346 |     pub fn is_connected(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 351 |     pub fn is_giving_up(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 356 |     pub fn attempts(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn total_reconnects(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     pub fn current_interval(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 371 |     pub fn total_downtime(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 376 |     pub fn config(&self) -> &ReconnectConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CLOUDFLARE_DNS` is never used
[INFO] [stdout]   --> src/dns.rs:39:11
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub const CLOUDFLARE_DNS:  &str = "1.1.1.1:53";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CLOUDFLARE_DNS2` is never used
[INFO] [stdout]   --> src/dns.rs:40:11
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub const CLOUDFLARE_DNS2: &str = "1.0.0.1:53";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GOOGLE_DNS` is never used
[INFO] [stdout]   --> src/dns.rs:41:11
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub const GOOGLE_DNS:      &str = "8.8.8.8:53";
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GOOGLE_DNS2` is never used
[INFO] [stdout]   --> src/dns.rs:42:11
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub const GOOGLE_DNS2:     &str = "8.8.4.4:53";
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `QUAD9_DNS` is never used
[INFO] [stdout]   --> src/dns.rs:43:11
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub const QUAD9_DNS:       &str = "9.9.9.9:53";
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DnsQueryType` is never used
[INFO] [stdout]   --> src/dns.rs:47:10
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub enum DnsQueryType {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_u16` and `to_u16` are never used
[INFO] [stdout]   --> src/dns.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | impl DnsQueryType {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 59 |     pub fn from_u16(v: u16) -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub fn to_u16(&self) -> u16 {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DnsPacket` is never constructed
[INFO] [stdout]   --> src/dns.rs:88:12
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct DnsPacket {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `parse` and `is_query` are never used
[INFO] [stdout]    --> src/dns.rs:105:12
[INFO] [stdout]     |
[INFO] [stdout] 101 | impl DnsPacket {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn parse(raw: Vec<u8>) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn is_query(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_dns_name` is never used
[INFO] [stdout]    --> src/dns.rs:151:4
[INFO] [stdout]     |
[INFO] [stdout] 151 | fn parse_dns_name(data: &[u8], mut offset: usize) -> Option<(String, usize)> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DnsAction` is never used
[INFO] [stdout]    --> src/dns.rs:185:10
[INFO] [stdout]     |
[INFO] [stdout] 185 | pub enum DnsAction {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheEntry` is never constructed
[INFO] [stdout]    --> src/dns.rs:198:8
[INFO] [stdout]     |
[INFO] [stdout] 198 | struct CacheEntry {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_expired` is never used
[INFO] [stdout]    --> src/dns.rs:204:8
[INFO] [stdout]     |
[INFO] [stdout] 203 | impl CacheEntry {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 204 |     fn is_expired(&self) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DnsConfig` is never constructed
[INFO] [stdout]    --> src/dns.rs:211:12
[INFO] [stdout]     |
[INFO] [stdout] 211 | pub struct DnsConfig {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `cloudflare`, `google`, `quad9`, `with_split_domain`, and `with_blocked_domain` are never used
[INFO] [stdout]    --> src/dns.rs:244:12
[INFO] [stdout]     |
[INFO] [stdout] 242 | impl DnsConfig {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 243 |     /// Config using Cloudflare DNS (1.1.1.1).
[INFO] [stdout] 244 |     pub fn cloudflare() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn google() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn quad9() -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn with_split_domain(mut self, domain: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 274 |     pub fn with_blocked_domain(mut self, domain: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DnsFilter` is never constructed
[INFO] [stdout]    --> src/dns.rs:284:12
[INFO] [stdout]     |
[INFO] [stdout] 284 | pub struct DnsFilter {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/dns.rs:299:12
[INFO] [stdout]     |
[INFO] [stdout] 297 | impl DnsFilter {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 298 |     /// Create a new DNS filter with the given config.
[INFO] [stdout] 299 |     pub fn new(config: DnsConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 318 |     pub fn is_dns_packet(data: &[u8]) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn decide(&mut self, domain: &str, query_type: &DnsQueryType) -> DnsAction {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 369 |     pub fn cache_response(&mut self, domain: &str, addr: IpAddr) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     pub fn is_blocked(&self, domain: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 401 |     pub fn is_split_dns(&self, domain: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 410 |     pub fn block_domain(&mut self, domain: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 416 |     pub fn add_split_domain(&mut self, domain: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 422 |     pub fn primary_upstream(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 427 |     pub fn evict_expired(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 437 |     pub fn clear_cache(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn cache_size(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn total_intercepted(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn total_blocked(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub fn total_cache_hits(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 463 |     pub fn total_forwarded(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 468 |     pub fn config(&self) -> &DnsConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TLS_RECORD_HEADER` is never used
[INFO] [stdout]   --> src/obfuscation.rs:35:7
[INFO] [stdout]    |
[INFO] [stdout] 35 | const TLS_RECORD_HEADER: [u8; 3] = [0x17, 0x03, 0x03];
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HTTP2_DATA_FRAME_TYPE` is never used
[INFO] [stdout]   --> src/obfuscation.rs:38:7
[INFO] [stdout]    |
[INFO] [stdout] 38 | const HTTP2_DATA_FRAME_TYPE: u8 = 0x00;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `COMMON_SIZES` is never used
[INFO] [stdout]   --> src/obfuscation.rs:41:7
[INFO] [stdout]    |
[INFO] [stdout] 41 | const COMMON_SIZES: &[usize] = &[64, 128, 256, 512, 1024, 1280, 1400, 1460];
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ObfuscationMode` is never used
[INFO] [stdout]   --> src/obfuscation.rs:45:10
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub enum ObfuscationMode {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ObfuscationConfig` is never constructed
[INFO] [stdout]   --> src/obfuscation.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct ObfuscationConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `none`, `padding`, `tls_mimicry`, `http2_mimicry`, `size_normalization`, and `full` are never used
[INFO] [stdout]    --> src/obfuscation.rs:72:12
[INFO] [stdout]     |
[INFO] [stdout]  70 | impl ObfuscationConfig {
[INFO] [stdout]     | ---------------------- associated functions in this implementation
[INFO] [stdout]  71 |     /// No obfuscation.
[INFO] [stdout]  72 |     pub fn none() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn padding() -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn tls_mimicry() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn http2_mimicry() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn size_normalization() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn full() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Obfuscator` is never constructed
[INFO] [stdout]    --> src/obfuscation.rs:145:12
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub struct Obfuscator {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/obfuscation.rs:155:12
[INFO] [stdout]     |
[INFO] [stdout] 153 | impl Obfuscator {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 154 |     /// Create a new obfuscator with the given config.
[INFO] [stdout] 155 |     pub fn new(config: ObfuscationConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn obfuscate(&mut self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn deobfuscate(&mut self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub fn jitter_ms(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 239 |     fn apply_padding(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     fn strip_padding(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     fn apply_size_normalization(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 312 |     fn strip_size_normalization(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 335 |     fn apply_tls_mimicry(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 350 |     fn strip_tls_mimicry(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 381 |     fn apply_http2_mimicry(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 403 |     fn strip_http2_mimicry(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 435 |     pub fn overhead_ratio(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn total_obfuscated(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn total_overhead(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn config(&self) -> &ObfuscationConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub fn mode(&self) -> &ObfuscationMode {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `looks_like_tls` is never used
[INFO] [stdout]    --> src/obfuscation.rs:464:8
[INFO] [stdout]     |
[INFO] [stdout] 464 | pub fn looks_like_tls(data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `looks_like_http2` is never used
[INFO] [stdout]    --> src/obfuscation.rs:472:8
[INFO] [stdout]     |
[INFO] [stdout] 472 | pub fn looks_like_http2(data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `recommended_mode` is never used
[INFO] [stdout]    --> src/obfuscation.rs:479:8
[INFO] [stdout]     |
[INFO] [stdout] 479 | pub fn recommended_mode(network_hint: &str) -> ObfuscationMode {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TunnelConfig` is never constructed
[INFO] [stdout]   --> src/tunnel.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct TunnelConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/tunnel.rs:61:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl TunnelConfig {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  61 |     pub fn mobile(local_ip: &str, remote_ip: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub fn home(local_ip: &str, remote_ip: &str) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn corporate(local_ip: &str, remote_ip: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn auto(local_ip: &str, remote_ip: &str, network_hint: &str) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn block_domain(mut self, domain: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn split_domain(mut self, domain: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn with_dns(mut self, servers: Vec<&str>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TunnelState` is never used
[INFO] [stdout]    --> src/tunnel.rs:158:10
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub enum TunnelState {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TunnelStats` is never constructed
[INFO] [stdout]    --> src/tunnel.rs:173:12
[INFO] [stdout]     |
[INFO] [stdout] 173 | pub struct TunnelStats {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VCLTunnel` is never constructed
[INFO] [stdout]    --> src/tunnel.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub struct VCLTunnel {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/tunnel.rs:217:12
[INFO] [stdout]     |
[INFO] [stdout] 215 | impl VCLTunnel {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 216 |     /// Create a new tunnel with the given configuration.
[INFO] [stdout] 217 |     pub fn new(config: TunnelConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     pub fn on_connecting(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn on_connected(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 298 |     pub fn on_disconnected(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub fn on_failed(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 321 |     pub fn check_keepalive(&mut self) -> KeepaliveAction {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 326 |     pub fn keepalive_sent(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 331 |     pub fn keepalive_pong_received(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn record_activity(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 346 |     pub fn should_reconnect(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 351 |     pub fn reconnect_attempt_start(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 358 |     pub fn reconnect_failed(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     pub fn is_giving_up(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 371 |     pub fn time_until_reconnect(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     pub fn obfuscate(&mut self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 385 |     pub fn deobfuscate(&mut self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     pub fn jitter_ms(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 399 |     pub fn dns_decide(&mut self, domain: &str) -> DnsAction {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 404 |     pub fn dns_cache(&mut self, domain: &str, addr: IpAddr) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 409 |     pub fn is_dns_packet(data: &[u8]) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 414 |     pub fn block_domain(&mut self, domain: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 419 |     pub fn add_split_domain(&mut self, domain: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 426 |     pub fn fragment_size(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 431 |     pub fn current_mtu(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 436 |     pub fn set_mtu(&mut self, mtu: usize) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 444 |     pub fn record_retransmit(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 449 |     pub fn stats(&self) -> TunnelStats {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 466 |     pub fn state(&self) -> &TunnelState {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 471 |     pub fn is_connected(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 476 |     pub fn config(&self) -> &TunnelConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 481 |     pub fn metrics(&self) -> &VCLMetrics {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VCLPrometheusExporter` is never constructed
[INFO] [stdout]   --> src/prometheus_metrics.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct VCLPrometheusExporter {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/prometheus_metrics.rs:76:12
[INFO] [stdout]     |
[INFO] [stdout]  74 | impl VCLPrometheusExporter {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout]  75 |     /// Create a new exporter with its own Prometheus registry.
[INFO] [stdout]  76 |     pub fn new() -> Result<Self, VCLError> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn update_bytes_sent(&self, bytes: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn update_bytes_received(&self, bytes: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn update_packets_sent(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn update_packets_received(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn update_retransmit(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn update_dropped(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn set_connections_active(&self, count: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn update_reconnect(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn update_handshake(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn update_key_rotation(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 188 |     pub fn set_loss_rate(&self, rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     pub fn set_rtt_seconds(&self, rtt: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn set_cwnd(&self, cwnd: f64) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub fn set_obfuscation_overhead(&self, ratio: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn set_mtu(&self, mtu: u16) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn update_dns_queries(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub fn update_dns_blocked(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 224 |     pub fn update_dns_cache_hits(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub fn update_fragments_sent(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     pub fn update_fragments_reassembled(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 239 |     pub fn set_tunnel_state(&self, state: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn update_from_metrics(&self, m: &VCLMetrics) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn update_from_tunnel_stats(&self, stats: &TunnelStats) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn render(&self) -> String {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn registry(&self) -> &Registry {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 37.98s
[INFO] running `Command { std: "docker" "inspect" "502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling zerocopy v0.8.48
[INFO] [stderr]    Compiling zerocopy-derive v0.8.48
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling tokio v1.50.0
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling plotters-backend v0.3.7
[INFO] [stderr]    Compiling ciborium-io v0.2.2
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling cast v0.3.0
[INFO] [stderr]    Compiling is-terminal v0.4.17
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling oorandom v11.1.5
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]    Compiling plotters-svg v0.3.7
[INFO] [stderr]    Compiling rayon v1.11.0
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling criterion-plot v0.5.0
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling clap v4.6.0
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling bincode v1.3.3
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling criterion v0.5.1
[INFO] [stderr]    Compiling tungstenite v0.24.0
[INFO] [stderr]    Compiling tun v0.7.22
[INFO] [stderr]    Compiling tokio-tungstenite v0.24.0
[INFO] [stderr]    Compiling vcl-protocol v1.5.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `KeepaliveConfig`
[INFO] [stdout]   --> src/tunnel.rs:23:24
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::keepalive::{KeepaliveConfig, KeepaliveManager, KeepaliveAction, KeepalivePreset};
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tunnel.rs:230:13
[INFO] [stdout]     |
[INFO] [stdout] 230 |         let mut dns_config = DnsConfig {
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rr_weights` is never read
[INFO] [stdout]    --> src/multipath.rs:153:5
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub struct MultipathSender {
[INFO] [stdout]     |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 153 |     rr_weights: Vec<u32>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `KeepaliveConfig`
[INFO] [stdout]   --> src/tunnel.rs:23:24
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::keepalive::{KeepaliveConfig, KeepaliveManager, KeepaliveAction, KeepalivePreset};
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `KeepaliveConfig`
[INFO] [stdout]   --> src/tunnel.rs:23:24
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::keepalive::{KeepaliveConfig, KeepaliveManager, KeepaliveAction, KeepalivePreset};
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `KeepaliveConfig`
[INFO] [stdout]   --> src/tunnel.rs:23:24
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::keepalive::{KeepaliveConfig, KeepaliveManager, KeepaliveAction, KeepalivePreset};
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tunnel.rs:230:13
[INFO] [stdout]     |
[INFO] [stdout] 230 |         let mut dns_config = DnsConfig {
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sequence` and `size` are never read
[INFO] [stdout]   --> src/event.rs:52:9
[INFO] [stdout]    |
[INFO] [stdout] 50 |     PacketReceived {
[INFO] [stdout]    |     -------------- fields in this variant
[INFO] [stdout] 51 |         /// Sequence number of the received packet.
[INFO] [stdout] 52 |         sequence: u64,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 53 |         /// Size of the decrypted payload in bytes.
[INFO] [stdout] 54 |         size: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `latency` is never read
[INFO] [stdout]   --> src/event.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 61 |     PongReceived {
[INFO] [stdout]    |     ------------ field in this variant
[INFO] [stdout] 62 |         /// Measured round-trip time from `ping()` to pong receipt.
[INFO] [stdout] 63 |         latency: Duration,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Disconnected` and `Error` are never constructed
[INFO] [stdout]   --> src/event.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub enum VCLEvent {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 47 |     Disconnected,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     Error(String),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/packet.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | impl VCLPacket {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 61 |     /// Create a new [`PacketType::Data`] packet.
[INFO] [stdout] 62 |     pub fn new(sequence: u64, prev_hash: Vec<u8>, payload: Vec<u8>, nonce: [u8; 24]) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/connection.rs:167:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | impl VCLConnection {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn subscribe(&mut self) -> mpsc::Receiver<VCLEvent> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn set_timeout(&mut self, secs: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn get_timeout(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn last_activity(&self) -> Instant {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub fn get_config(&self) -> &VCLConfig {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 206 |     pub fn flow(&self) -> &FlowController {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn ack_packet(&mut self, sequence: u64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub async fn ping(&mut self) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub async fn rotate_keys(&mut self) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 685 |     pub fn close(&mut self) -> Result<(), VCLError> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 706 |     pub fn is_closed(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 711 |     pub fn get_public_key(&self) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 717 |     pub fn get_shared_secret(&self) -> Option<[u8; 32]> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `ConnectionId` is never used
[INFO] [stdout]   --> src/pool.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub type ConnectionId = u64;
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VCLPool` is never constructed
[INFO] [stdout]   --> src/pool.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct VCLPool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/pool.rs:56:12
[INFO] [stdout]     |
[INFO] [stdout]  48 | impl VCLPool {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn new(max_connections: usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub async fn bind(&mut self, addr: &str) -> Result<ConnectionId, VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub async fn connect(&mut self, id: ConnectionId, addr: &str) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub async fn accept_handshake(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub async fn send(&mut self, id: ConnectionId, data: &[u8]) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub async fn recv(&mut self, id: ConnectionId) -> Result<VCLPacket, VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub async fn ping(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub async fn rotate_keys(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn close(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn close_all(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub fn is_full(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn connection_ids(&self) -> Vec<ConnectionId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn contains(&self, id: ConnectionId) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn get(&self, id: ConnectionId) -> Result<&VCLConnection, VCLError> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     fn get_mut(&mut self, id: ConnectionId) -> Result<&mut VCLConnection, VCLError> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Tcp` and `Udp` are never constructed
[INFO] [stdout]   --> src/config.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub enum TransportMode {
[INFO] [stdout]    |          ------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 35 |     Tcp,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     Udp,
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TransportMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Reliable`, `Partial`, and `Unreliable` are never constructed
[INFO] [stdout]   --> src/config.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub enum ReliabilityMode {
[INFO] [stdout]    |          --------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 56 |     Reliable,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     Partial,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     Unreliable,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ReliabilityMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `transport`, `max_retries`, and `retry_interval_ms` are never read
[INFO] [stdout]    --> src/config.rs:89:9
[INFO] [stdout]     |
[INFO] [stdout]  87 | pub struct VCLConfig {
[INFO] [stdout]     |            --------- fields in this struct
[INFO] [stdout]  88 |     /// Transport protocol to use.
[INFO] [stdout]  89 |     pub transport: TransportMode,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub max_retries: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub retry_interval_ms: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `VCLConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `vpn`, `gaming`, `streaming`, `is_tcp`, and `has_retransmission` are never used
[INFO] [stdout]    --> src/config.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 113 | impl VCLConfig {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn vpn() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn gaming() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn streaming() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub fn is_tcp(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn has_retransmission(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UDP_MAX_SIZE` is never used
[INFO] [stdout]   --> src/transport.rs:55:7
[INFO] [stdout]    |
[INFO] [stdout] 55 | const UDP_MAX_SIZE: usize = 65535;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TCP_HEADER_SIZE` is never used
[INFO] [stdout]   --> src/transport.rs:56:7
[INFO] [stdout]    |
[INFO] [stdout] 56 | const TCP_HEADER_SIZE: usize = 4;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `VCLTransport` is never used
[INFO] [stdout]   --> src/transport.rs:67:10
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub enum VCLTransport {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/transport.rs:118:18
[INFO] [stdout]     |
[INFO] [stdout] 114 | impl VCLTransport {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub async fn bind_udp(addr: &str) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub async fn bind_tcp(addr: &str) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub async fn connect_tcp(addr: &str) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub async fn bind_ws(addr: &str) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub async fn connect_ws(url: &str) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub async fn accept(&self) -> Result<Self, VCLError> {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub async fn from_config_client(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 304 |     pub async fn from_config_server(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub async fn send_raw(&mut self, data: &[u8]) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     pub async fn recv_raw(&mut self) -> Result<(Vec<u8>, SocketAddr), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 489 |     pub fn local_addr(&self) -> Option<SocketAddr> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 505 |     pub fn peer_addr(&self) -> Option<SocketAddr> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 521 |     pub fn set_peer_addr(&mut self, addr: SocketAddr) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 528 |     pub fn mode(&self) -> TransportMode {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 543 |     pub fn is_tcp(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     pub fn is_udp(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 556 |     pub fn is_websocket(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_last` is never used
[INFO] [stdout]   --> src/fragment.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 45 | impl Fragment {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] 46 |     /// Returns `true` if this is the last fragment in the message.
[INFO] [stdout] 47 |     pub fn is_last(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `needs_split` is never used
[INFO] [stdout]   --> src/fragment.rs:99:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | impl Fragmenter {
[INFO] [stdout]    | --------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 99 |     pub fn needs_split(data: &[u8], fragment_size: usize) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `with_max_pending`, `pending_count`, and `cleanup` are never used
[INFO] [stdout]    --> src/fragment.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 122 | impl Reassembler {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn with_max_pending(max_pending: usize) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn pending_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub fn cleanup(&mut self) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AIMD_DECREASE_FACTOR` is never used
[INFO] [stdout]   --> src/flow.rs:49:7
[INFO] [stdout]    |
[INFO] [stdout] 49 | const AIMD_DECREASE_FACTOR: f64 = 0.5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CWND_MIN` is never used
[INFO] [stdout]   --> src/flow.rs:50:7
[INFO] [stdout]    |
[INFO] [stdout] 50 | const CWND_MIN: f64 = 1.0;
[INFO] [stdout]    |       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `retransmit_count` and `data` are never read
[INFO] [stdout]   --> src/flow.rs:60:9
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub struct InFlightPacket {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub retransmit_count: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 61 |     /// Original data payload — stored for retransmission.
[INFO] [stdout] 62 |     pub data: Vec<u8>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InFlightPacket` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_timed_out` is never used
[INFO] [stdout]   --> src/flow.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 65 | impl InFlightPacket {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn is_timed_out(&self, rto: Duration) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RetransmitRequest` is never constructed
[INFO] [stdout]   --> src/flow.rs:83:12
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub struct RetransmitRequest {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `total_lost` and `total_retransmits` are never read
[INFO] [stdout]    --> src/flow.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout]  94 | pub struct FlowController {
[INFO] [stdout]     |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 106 |     total_lost: u64,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 107 |     total_retransmits: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/flow.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 110 | impl FlowController {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn with_rto(window_size: usize, rto_ms: u64) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn available_slots(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     pub fn cwnd(&self) -> f64 {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn in_slow_start(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn set_window_size(&mut self, size: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn timed_out_packets(&mut self) -> Vec<RetransmitRequest> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 293 |     fn on_loss_cwnd(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 334 |     pub fn srtt(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn rttvar(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 344 |     pub fn rto(&self) -> Duration {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     pub fn total_sent(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 354 |     pub fn total_acked(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 359 |     pub fn total_lost(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     pub fn total_retransmits(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 369 |     pub fn loss_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 375 |     pub fn is_acked(&self, sequence: u64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VCLMetrics` is never constructed
[INFO] [stdout]   --> src/metrics.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub struct VCLMetrics {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/metrics.rs:65:12
[INFO] [stdout]     |
[INFO] [stdout]  63 | impl VCLMetrics {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  64 |     /// Create a new zeroed metrics instance.
[INFO] [stdout]  65 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn record_sent(&mut self, bytes: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub fn record_received(&mut self, bytes: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn record_retransmit(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn record_drop_replay(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn record_drop_chain(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn record_drop_signature(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn record_fragment_sent(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn record_fragment_reassembled(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn record_key_rotation(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn record_handshake(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn record_rtt_sample(&mut self, rtt: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn record_cwnd(&mut self, cwnd: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn loss_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn avg_rtt(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn min_rtt(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub fn max_rtt(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub fn current_cwnd(&self) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn avg_cwnd(&self) -> Option<f64> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub fn total_dropped(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     pub fn throughput_sent_bps(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn throughput_recv_bps(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 225 |     pub fn uptime(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 238 |     pub fn merge(&mut self, other: &VCLMetrics) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TunConfig` is never constructed
[INFO] [stdout]   --> src/tun_device.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct TunConfig {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `IpVersion` is never used
[INFO] [stdout]   --> src/tun_device.rs:90:10
[INFO] [stdout]    |
[INFO] [stdout] 90 | pub enum IpVersion {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IpPacket` is never constructed
[INFO] [stdout]   --> src/tun_device.rs:98:12
[INFO] [stdout]    |
[INFO] [stdout] 98 | pub struct IpPacket {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VCLTun` is never constructed
[INFO] [stdout]    --> src/tun_device.rs:116:12
[INFO] [stdout]     |
[INFO] [stdout] 116 | pub struct VCLTun {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/tun_device.rs:136:12
[INFO] [stdout]     |
[INFO] [stdout] 126 | impl VCLTun {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn create(config: TunConfig) -> Result<Self, VCLError> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub async fn read_packet(&mut self) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub async fn write_packet(&mut self, packet: &[u8]) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn mtu(&self) -> u16 {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 269 |     pub fn address(&self) -> Ipv4Addr {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 274 |     pub fn destination(&self) -> Ipv4Addr {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn config(&self) -> &TunConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_ip_packet` is never used
[INFO] [stdout]    --> src/tun_device.rs:293:8
[INFO] [stdout]     |
[INFO] [stdout] 293 | pub fn parse_ip_packet(raw: Vec<u8>) -> Result<IpPacket, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_ipv4` is never used
[INFO] [stdout]    --> src/tun_device.rs:318:4
[INFO] [stdout]     |
[INFO] [stdout] 318 | fn parse_ipv4(raw: Vec<u8>, len: usize) -> Result<IpPacket, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_ipv6` is never used
[INFO] [stdout]    --> src/tun_device.rs:346:4
[INFO] [stdout]     |
[INFO] [stdout] 346 | fn parse_ipv6(raw: Vec<u8>, len: usize) -> Result<IpPacket, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_ipv4` is never used
[INFO] [stdout]    --> src/tun_device.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn is_ipv4(raw: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_ipv6` is never used
[INFO] [stdout]    --> src/tun_device.rs:372:8
[INFO] [stdout]     |
[INFO] [stdout] 372 | pub fn is_ipv6(raw: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `ip_version` is never used
[INFO] [stdout]    --> src/tun_device.rs:377:8
[INFO] [stdout]     |
[INFO] [stdout] 377 | pub fn ip_version(raw: &[u8]) -> Option<IpVersion> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `IpVersion` is never used
[INFO] [stdout]   --> src/ip_packet.rs:38:10
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub enum IpVersion {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TransportProtocol` is never used
[INFO] [stdout]   --> src/ip_packet.rs:45:10
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub enum TransportProtocol {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `src_port`, `dst_port`, `is_syn`, `is_fin`, `is_rst`, and `protocol_number` are never used
[INFO] [stdout]    --> src/ip_packet.rs:80:12
[INFO] [stdout]     |
[INFO] [stdout]  78 | impl TransportProtocol {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout]  79 |     /// Returns the source port if this is TCP or UDP.
[INFO] [stdout]  80 |     pub fn src_port(&self) -> Option<u16> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn dst_port(&self) -> Option<u16> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn is_syn(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn is_fin(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn is_rst(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn protocol_number(&self) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ParsedPacket` is never constructed
[INFO] [stdout]    --> src/ip_packet.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout] 126 | pub struct ParsedPacket {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/ip_packet.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 145 | impl ParsedPacket {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn parse(raw: Vec<u8>) -> Result<Self, VCLError> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     fn parse_ipv4(raw: Vec<u8>) -> Result<Self, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     fn parse_ipv6(raw: Vec<u8>) -> Result<Self, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     pub fn is_ipv4(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 239 |     pub fn is_ipv6(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn is_destined_for(&self, ip: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn is_from(&self, ip: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 254 |     pub fn ip_payload(&self) -> &[u8] {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |     pub fn is_dns(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn is_ping(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 276 |     pub fn summary(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_transport` is never used
[INFO] [stdout]    --> src/ip_packet.rs:303:4
[INFO] [stdout]     |
[INFO] [stdout] 303 | fn parse_transport(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_tcp` is never used
[INFO] [stdout]    --> src/ip_packet.rs:317:4
[INFO] [stdout]     |
[INFO] [stdout] 317 | fn parse_tcp(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_udp` is never used
[INFO] [stdout]    --> src/ip_packet.rs:335:4
[INFO] [stdout]     |
[INFO] [stdout] 335 | fn parse_udp(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_icmp` is never used
[INFO] [stdout]    --> src/ip_packet.rs:349:4
[INFO] [stdout]     |
[INFO] [stdout] 349 | fn parse_icmp(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_icmpv6` is never used
[INFO] [stdout]    --> src/ip_packet.rs:359:4
[INFO] [stdout]     |
[INFO] [stdout] 359 | fn parse_icmpv6(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PathInfo` is never constructed
[INFO] [stdout]   --> src/multipath.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub struct PathInfo {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `score`, `loss_rate`, `update_srtt`, `record_sent`, and `record_loss` are never used
[INFO] [stdout]    --> src/multipath.rs:73:12
[INFO] [stdout]     |
[INFO] [stdout]  71 | impl PathInfo {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout]  72 |     /// Create a new path with name, local address, bandwidth, and latency.
[INFO] [stdout]  73 |     pub fn new(name: &str, local_addr: &str, bandwidth_mbps: u32, latency_ms: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn score(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub fn loss_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn update_srtt(&mut self, rtt: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 119 |     pub fn record_sent(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn record_loss(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SchedulingPolicy` is never used
[INFO] [stdout]    --> src/multipath.rs:132:10
[INFO] [stdout]     |
[INFO] [stdout] 132 | pub enum SchedulingPolicy {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultipathSender` is never constructed
[INFO] [stdout]    --> src/multipath.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub struct MultipathSender {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/multipath.rs:163:12
[INFO] [stdout]     |
[INFO] [stdout] 158 | impl MultipathSender {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn new(paths: Vec<PathInfo>, policy: SchedulingPolicy) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn select_path_index(&mut self, data_len: usize) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn select_all_paths(&mut self) -> Vec<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn path(&self, index: usize) -> Option<&PathInfo> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 269 |     pub fn path_mut(&mut self, index: usize) -> Option<&mut PathInfo> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 274 |     pub fn paths(&self) -> &[PathInfo] {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn active_path_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn deactivate_path(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn activate_path(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn record_loss(&mut self, index: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn update_rtt(&mut self, index: usize, rtt: Duration) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn total_scheduled(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 319 |     pub fn set_policy(&mut self, policy: SchedulingPolicy) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn policy(&self) -> &SchedulingPolicy {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultipathReceiver` is never constructed
[INFO] [stdout]    --> src/multipath.rs:334:12
[INFO] [stdout]     |
[INFO] [stdout] 334 | pub struct MultipathReceiver {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/multipath.rs:351:12
[INFO] [stdout]     |
[INFO] [stdout] 349 | impl MultipathReceiver {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout] 350 |     /// Create a new receiver with default buffer size (256).
[INFO] [stdout] 351 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |     pub fn with_buffer_size(max_buffer: usize) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 380 |     pub fn add(&mut self, seq: u64, path_id: &str, data: Vec<u8>) -> Option<(String, Vec<u8>)> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 425 |     pub fn drain_ordered(&mut self) -> Vec<(u64, String, Vec<u8>)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 437 |     pub fn next_seq(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 442 |     pub fn pending_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 447 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 456 |     pub fn total_received(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 461 |     pub fn total_delivered(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 466 |     pub fn total_duplicates(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `VCL_HEADER_OVERHEAD` is never used
[INFO] [stdout]   --> src/mtu.rs:44:11
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub const VCL_HEADER_OVERHEAD: usize = 149;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ETHERNET_MTU` is never used
[INFO] [stdout]   --> src/mtu.rs:47:11
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub const ETHERNET_MTU: usize = 1500;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `IPV4_HEADER` is never used
[INFO] [stdout]   --> src/mtu.rs:50:11
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub const IPV4_HEADER: usize = 20;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `IPV6_HEADER` is never used
[INFO] [stdout]   --> src/mtu.rs:53:11
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub const IPV6_HEADER: usize = 40;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UDP_HEADER` is never used
[INFO] [stdout]   --> src/mtu.rs:56:11
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub const UDP_HEADER: usize = 8;
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MIN_MTU` is never used
[INFO] [stdout]   --> src/mtu.rs:59:11
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub const MIN_MTU: usize = 576;
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_MTU` is never used
[INFO] [stdout]   --> src/mtu.rs:62:11
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub const MAX_MTU: usize = 9000; // jumbo frames
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MtuConfig` is never constructed
[INFO] [stdout]   --> src/mtu.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub struct MtuConfig {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `ipv4_udp`, `ipv6_udp`, and `inside_wireguard` are never used
[INFO] [stdout]    --> src/mtu.rs:99:12
[INFO] [stdout]     |
[INFO] [stdout]  97 | impl MtuConfig {
[INFO] [stdout]     | -------------- associated functions in this implementation
[INFO] [stdout]  98 |     /// Config for a connection running over IPv4/UDP.
[INFO] [stdout]  99 |     pub fn ipv4_udp() -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn ipv6_udp() -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn inside_wireguard() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PathMtu` is never constructed
[INFO] [stdout]    --> src/mtu.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub struct PathMtu {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `is_stale` are never used
[INFO] [stdout]    --> src/mtu.rs:137:12
[INFO] [stdout]     |
[INFO] [stdout] 135 | impl PathMtu {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] 136 |     /// Create a new PathMtu.
[INFO] [stdout] 137 |     pub fn new(mtu: usize, fragment_size: usize, is_probed: bool) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn is_stale(&self, max_age: Duration) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MtuState` is never used
[INFO] [stdout]    --> src/mtu.rs:154:10
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub enum MtuState {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MtuNegotiator` is never constructed
[INFO] [stdout]    --> src/mtu.rs:173:12
[INFO] [stdout]     |
[INFO] [stdout] 173 | pub struct MtuNegotiator {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/mtu.rs:190:12
[INFO] [stdout]     |
[INFO] [stdout] 188 | impl MtuNegotiator {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 189 |     /// Create a new negotiator with the given config.
[INFO] [stdout] 190 |     pub fn new(config: MtuConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn start_discovery(&mut self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn record_probe(&mut self, size: usize, success: bool) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn check_probe_timeout(&self) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 292 |     pub fn current_mtu(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn state(&self) -> &MtuState {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn is_complete(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 310 |     pub fn recommended_fragment_size(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     pub fn set_mtu(&mut self, mtu: usize) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 340 |     pub fn fallback_to_min(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 347 |     pub fn path_mtu(&self) -> PathMtu {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 356 |     pub fn total_probes(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn successful_probes(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     pub fn probe_history(&self) -> &[(usize, bool)] {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fragment_size_for_mtu` is never used
[INFO] [stdout]    --> src/mtu.rs:381:8
[INFO] [stdout]     |
[INFO] [stdout] 381 | pub fn fragment_size_for_mtu(mtu: usize, ipv6: bool, extra_overhead: usize) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `KeepalivePreset` is never used
[INFO] [stdout]   --> src/keepalive.rs:44:10
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub enum KeepalivePreset {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeepaliveConfig` is never constructed
[INFO] [stdout]   --> src/keepalive.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct KeepaliveConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> src/keepalive.rs:79:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl KeepaliveConfig {
[INFO] [stdout]     | -------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn mobile() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn home() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn corporate() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn datacenter() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn aggressive() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn disabled() -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn from_preset(preset: KeepalivePreset) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `KeepaliveAction` is never used
[INFO] [stdout]    --> src/keepalive.rs:158:10
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub enum KeepaliveAction {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeepaliveManager` is never constructed
[INFO] [stdout]    --> src/keepalive.rs:170:12
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub struct KeepaliveManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/keepalive.rs:196:12
[INFO] [stdout]     |
[INFO] [stdout] 194 | impl KeepaliveManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 195 |     /// Create a new keepalive manager with the given config.
[INFO] [stdout] 196 |     pub fn new(config: KeepaliveConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn from_preset(preset: KeepalivePreset) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 242 |     pub fn check(&mut self) -> KeepaliveAction {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn should_send_keepalive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn record_keepalive_sent(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 306 |     pub fn record_pong_received(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     pub fn record_pong_missed(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 338 |     pub fn record_activity(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     pub fn reset_misses(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 359 |     fn update_srtt(&mut self, rtt: Duration) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 370 |     fn adjust_interval(&mut self, rtt: Duration) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     pub fn srtt(&self) -> Option<Duration> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 397 |     pub fn current_interval(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 402 |     pub fn missed_pongs(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 407 |     pub fn is_waiting_for_pong(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 412 |     pub fn is_dead(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 417 |     pub fn total_sent(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 422 |     pub fn total_pongs(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 427 |     pub fn last_pong(&self) -> Option<Instant> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 432 |     pub fn config(&self) -> &KeepaliveConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReconnectConfig` is never constructed
[INFO] [stdout]   --> src/reconnect.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct ReconnectConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `mobile`, `stable`, and `instant` are never used
[INFO] [stdout]    --> src/reconnect.rs:89:12
[INFO] [stdout]     |
[INFO] [stdout]  86 | impl ReconnectConfig {
[INFO] [stdout]     | -------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn mobile() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn stable() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn instant() -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ReconnectState` is never used
[INFO] [stdout]    --> src/reconnect.rs:127:10
[INFO] [stdout]     |
[INFO] [stdout] 127 | pub enum ReconnectState {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ReconnectManager` is never constructed
[INFO] [stdout]    --> src/reconnect.rs:141:12
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub struct ReconnectManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/reconnect.rs:162:12
[INFO] [stdout]     |
[INFO] [stdout] 160 | impl ReconnectManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 161 |     /// Create a new reconnect manager.
[INFO] [stdout] 162 |     pub fn new(config: ReconnectConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn mobile() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn stable() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn on_disconnect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn on_connect(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn on_failure(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn on_attempt_start(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 288 |     pub fn should_reconnect(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn time_until_reconnect(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn check_stability(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 341 |     pub fn state(&self) -> &ReconnectState {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 346 |     pub fn is_connected(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 351 |     pub fn is_giving_up(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 356 |     pub fn attempts(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn total_reconnects(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     pub fn current_interval(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 371 |     pub fn total_downtime(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 376 |     pub fn config(&self) -> &ReconnectConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CLOUDFLARE_DNS` is never used
[INFO] [stdout]   --> src/dns.rs:39:11
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub const CLOUDFLARE_DNS:  &str = "1.1.1.1:53";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CLOUDFLARE_DNS2` is never used
[INFO] [stdout]   --> src/dns.rs:40:11
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub const CLOUDFLARE_DNS2: &str = "1.0.0.1:53";
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GOOGLE_DNS` is never used
[INFO] [stdout]   --> src/dns.rs:41:11
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub const GOOGLE_DNS:      &str = "8.8.8.8:53";
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GOOGLE_DNS2` is never used
[INFO] [stdout]   --> src/dns.rs:42:11
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub const GOOGLE_DNS2:     &str = "8.8.4.4:53";
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `QUAD9_DNS` is never used
[INFO] [stdout]   --> src/dns.rs:43:11
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub const QUAD9_DNS:       &str = "9.9.9.9:53";
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DnsQueryType` is never used
[INFO] [stdout]   --> src/dns.rs:47:10
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub enum DnsQueryType {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_u16` and `to_u16` are never used
[INFO] [stdout]   --> src/dns.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | impl DnsQueryType {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 59 |     pub fn from_u16(v: u16) -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub fn to_u16(&self) -> u16 {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DnsPacket` is never constructed
[INFO] [stdout]   --> src/dns.rs:88:12
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct DnsPacket {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `parse` and `is_query` are never used
[INFO] [stdout]    --> src/dns.rs:105:12
[INFO] [stdout]     |
[INFO] [stdout] 101 | impl DnsPacket {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn parse(raw: Vec<u8>) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn is_query(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_dns_name` is never used
[INFO] [stdout]    --> src/dns.rs:151:4
[INFO] [stdout]     |
[INFO] [stdout] 151 | fn parse_dns_name(data: &[u8], mut offset: usize) -> Option<(String, usize)> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DnsAction` is never used
[INFO] [stdout]    --> src/dns.rs:185:10
[INFO] [stdout]     |
[INFO] [stdout] 185 | pub enum DnsAction {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheEntry` is never constructed
[INFO] [stdout]    --> src/dns.rs:198:8
[INFO] [stdout]     |
[INFO] [stdout] 198 | struct CacheEntry {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_expired` is never used
[INFO] [stdout]    --> src/dns.rs:204:8
[INFO] [stdout]     |
[INFO] [stdout] 203 | impl CacheEntry {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 204 |     fn is_expired(&self) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DnsConfig` is never constructed
[INFO] [stdout]    --> src/dns.rs:211:12
[INFO] [stdout]     |
[INFO] [stdout] 211 | pub struct DnsConfig {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `cloudflare`, `google`, `quad9`, `with_split_domain`, and `with_blocked_domain` are never used
[INFO] [stdout]    --> src/dns.rs:244:12
[INFO] [stdout]     |
[INFO] [stdout] 242 | impl DnsConfig {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 243 |     /// Config using Cloudflare DNS (1.1.1.1).
[INFO] [stdout] 244 |     pub fn cloudflare() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 249 |     pub fn google() -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn quad9() -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn with_split_domain(mut self, domain: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 274 |     pub fn with_blocked_domain(mut self, domain: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DnsFilter` is never constructed
[INFO] [stdout]    --> src/dns.rs:284:12
[INFO] [stdout]     |
[INFO] [stdout] 284 | pub struct DnsFilter {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/dns.rs:299:12
[INFO] [stdout]     |
[INFO] [stdout] 297 | impl DnsFilter {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 298 |     /// Create a new DNS filter with the given config.
[INFO] [stdout] 299 |     pub fn new(config: DnsConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 318 |     pub fn is_dns_packet(data: &[u8]) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn decide(&mut self, domain: &str, query_type: &DnsQueryType) -> DnsAction {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 369 |     pub fn cache_response(&mut self, domain: &str, addr: IpAddr) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     pub fn is_blocked(&self, domain: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 401 |     pub fn is_split_dns(&self, domain: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 410 |     pub fn block_domain(&mut self, domain: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 416 |     pub fn add_split_domain(&mut self, domain: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 422 |     pub fn primary_upstream(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 427 |     pub fn evict_expired(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 437 |     pub fn clear_cache(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn cache_size(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn total_intercepted(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn total_blocked(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub fn total_cache_hits(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 463 |     pub fn total_forwarded(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 468 |     pub fn config(&self) -> &DnsConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TLS_RECORD_HEADER` is never used
[INFO] [stdout]   --> src/obfuscation.rs:35:7
[INFO] [stdout]    |
[INFO] [stdout] 35 | const TLS_RECORD_HEADER: [u8; 3] = [0x17, 0x03, 0x03];
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HTTP2_DATA_FRAME_TYPE` is never used
[INFO] [stdout]   --> src/obfuscation.rs:38:7
[INFO] [stdout]    |
[INFO] [stdout] 38 | const HTTP2_DATA_FRAME_TYPE: u8 = 0x00;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `COMMON_SIZES` is never used
[INFO] [stdout]   --> src/obfuscation.rs:41:7
[INFO] [stdout]    |
[INFO] [stdout] 41 | const COMMON_SIZES: &[usize] = &[64, 128, 256, 512, 1024, 1280, 1400, 1460];
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ObfuscationMode` is never used
[INFO] [stdout]   --> src/obfuscation.rs:45:10
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub enum ObfuscationMode {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ObfuscationConfig` is never constructed
[INFO] [stdout]   --> src/obfuscation.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct ObfuscationConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `none`, `padding`, `tls_mimicry`, `http2_mimicry`, `size_normalization`, and `full` are never used
[INFO] [stdout]    --> src/obfuscation.rs:72:12
[INFO] [stdout]     |
[INFO] [stdout]  70 | impl ObfuscationConfig {
[INFO] [stdout]     | ---------------------- associated functions in this implementation
[INFO] [stdout]  71 |     /// No obfuscation.
[INFO] [stdout]  72 |     pub fn none() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn padding() -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn tls_mimicry() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn http2_mimicry() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn size_normalization() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn full() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Obfuscator` is never constructed
[INFO] [stdout]    --> src/obfuscation.rs:145:12
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub struct Obfuscator {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/obfuscation.rs:155:12
[INFO] [stdout]     |
[INFO] [stdout] 153 | impl Obfuscator {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 154 |     /// Create a new obfuscator with the given config.
[INFO] [stdout] 155 |     pub fn new(config: ObfuscationConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn obfuscate(&mut self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn deobfuscate(&mut self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub fn jitter_ms(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 239 |     fn apply_padding(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     fn strip_padding(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     fn apply_size_normalization(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 312 |     fn strip_size_normalization(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 335 |     fn apply_tls_mimicry(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 350 |     fn strip_tls_mimicry(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 381 |     fn apply_http2_mimicry(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 403 |     fn strip_http2_mimicry(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 435 |     pub fn overhead_ratio(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn total_obfuscated(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 448 |     pub fn total_overhead(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 453 |     pub fn config(&self) -> &ObfuscationConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub fn mode(&self) -> &ObfuscationMode {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `looks_like_tls` is never used
[INFO] [stdout]    --> src/obfuscation.rs:464:8
[INFO] [stdout]     |
[INFO] [stdout] 464 | pub fn looks_like_tls(data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `looks_like_http2` is never used
[INFO] [stdout]    --> src/obfuscation.rs:472:8
[INFO] [stdout]     |
[INFO] [stdout] 472 | pub fn looks_like_http2(data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `recommended_mode` is never used
[INFO] [stdout]    --> src/obfuscation.rs:479:8
[INFO] [stdout]     |
[INFO] [stdout] 479 | pub fn recommended_mode(network_hint: &str) -> ObfuscationMode {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TunnelConfig` is never constructed
[INFO] [stdout]   --> src/tunnel.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct TunnelConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/tunnel.rs:61:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl TunnelConfig {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  61 |     pub fn mobile(local_ip: &str, remote_ip: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub fn home(local_ip: &str, remote_ip: &str) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn corporate(local_ip: &str, remote_ip: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn auto(local_ip: &str, remote_ip: &str, network_hint: &str) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn block_domain(mut self, domain: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn split_domain(mut self, domain: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn with_dns(mut self, servers: Vec<&str>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TunnelState` is never used
[INFO] [stdout]    --> src/tunnel.rs:158:10
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub enum TunnelState {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TunnelStats` is never constructed
[INFO] [stdout]    --> src/tunnel.rs:173:12
[INFO] [stdout]     |
[INFO] [stdout] 173 | pub struct TunnelStats {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VCLTunnel` is never constructed
[INFO] [stdout]    --> src/tunnel.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub struct VCLTunnel {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/tunnel.rs:217:12
[INFO] [stdout]     |
[INFO] [stdout] 215 | impl VCLTunnel {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 216 |     /// Create a new tunnel with the given configuration.
[INFO] [stdout] 217 |     pub fn new(config: TunnelConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     pub fn on_connecting(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn on_connected(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 298 |     pub fn on_disconnected(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub fn on_failed(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 321 |     pub fn check_keepalive(&mut self) -> KeepaliveAction {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 326 |     pub fn keepalive_sent(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 331 |     pub fn keepalive_pong_received(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn record_activity(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 346 |     pub fn should_reconnect(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 351 |     pub fn reconnect_attempt_start(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 358 |     pub fn reconnect_failed(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     pub fn is_giving_up(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 371 |     pub fn time_until_reconnect(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     pub fn obfuscate(&mut self, data: &[u8]) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 385 |     pub fn deobfuscate(&mut self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 392 |     pub fn jitter_ms(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 399 |     pub fn dns_decide(&mut self, domain: &str) -> DnsAction {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 404 |     pub fn dns_cache(&mut self, domain: &str, addr: IpAddr) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 409 |     pub fn is_dns_packet(data: &[u8]) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 414 |     pub fn block_domain(&mut self, domain: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 419 |     pub fn add_split_domain(&mut self, domain: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 426 |     pub fn fragment_size(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 431 |     pub fn current_mtu(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 436 |     pub fn set_mtu(&mut self, mtu: usize) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 444 |     pub fn record_retransmit(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 449 |     pub fn stats(&self) -> TunnelStats {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 466 |     pub fn state(&self) -> &TunnelState {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 471 |     pub fn is_connected(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 476 |     pub fn config(&self) -> &TunnelConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 481 |     pub fn metrics(&self) -> &VCLMetrics {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VCLPrometheusExporter` is never constructed
[INFO] [stdout]   --> src/prometheus_metrics.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct VCLPrometheusExporter {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/prometheus_metrics.rs:76:12
[INFO] [stdout]     |
[INFO] [stdout]  74 | impl VCLPrometheusExporter {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout]  75 |     /// Create a new exporter with its own Prometheus registry.
[INFO] [stdout]  76 |     pub fn new() -> Result<Self, VCLError> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn update_bytes_sent(&self, bytes: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn update_bytes_received(&self, bytes: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn update_packets_sent(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn update_packets_received(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn update_retransmit(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn update_dropped(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn set_connections_active(&self, count: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn update_reconnect(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn update_handshake(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn update_key_rotation(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 188 |     pub fn set_loss_rate(&self, rate: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 193 |     pub fn set_rtt_seconds(&self, rtt: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn set_cwnd(&self, cwnd: f64) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub fn set_obfuscation_overhead(&self, ratio: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn set_mtu(&self, mtu: u16) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn update_dns_queries(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub fn update_dns_blocked(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 224 |     pub fn update_dns_cache_hits(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub fn update_fragments_sent(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     pub fn update_fragments_reassembled(&self, count: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 239 |     pub fn set_tunnel_state(&self, state: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn update_from_metrics(&self, m: &VCLMetrics) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn update_from_tunnel_stats(&self, stats: &TunnelStats) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn render(&self) -> String {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn registry(&self) -> &Registry {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `next`
[INFO] [stdout]    --> src/mtu.rs:436:13
[INFO] [stdout]     |
[INFO] [stdout] 436 |         let next = n.record_probe(1038, true);
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_next`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tunnel.rs:230:13
[INFO] [stdout]     |
[INFO] [stdout] 230 |         let mut dns_config = DnsConfig {
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rr_weights` is never read
[INFO] [stdout]    --> src/multipath.rs:153:5
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub struct MultipathSender {
[INFO] [stdout]     |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 153 |     rr_weights: Vec<u32>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `next`
[INFO] [stdout]    --> src/mtu.rs:436:13
[INFO] [stdout]     |
[INFO] [stdout] 436 |         let next = n.record_probe(1038, true);
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_next`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tunnel.rs:230:13
[INFO] [stdout]     |
[INFO] [stdout] 230 |         let mut dns_config = DnsConfig {
[INFO] [stdout]     |             ----^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sequence` and `size` are never read
[INFO] [stdout]   --> src/event.rs:52:9
[INFO] [stdout]    |
[INFO] [stdout] 50 |     PacketReceived {
[INFO] [stdout]    |     -------------- fields in this variant
[INFO] [stdout] 51 |         /// Sequence number of the received packet.
[INFO] [stdout] 52 |         sequence: u64,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 53 |         /// Size of the decrypted payload in bytes.
[INFO] [stdout] 54 |         size: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `latency` is never read
[INFO] [stdout]   --> src/event.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 61 |     PongReceived {
[INFO] [stdout]    |     ------------ field in this variant
[INFO] [stdout] 62 |         /// Measured round-trip time from `ping()` to pong receipt.
[INFO] [stdout] 63 |         latency: Duration,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Error` is never constructed
[INFO] [stdout]   --> src/event.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub enum VCLEvent {
[INFO] [stdout]    |          -------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 70 |     Error(String),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/connection.rs:167:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | impl VCLConnection {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn subscribe(&mut self) -> mpsc::Receiver<VCLEvent> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn set_timeout(&mut self, secs: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn get_timeout(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn last_activity(&self) -> Instant {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub async fn ping(&mut self) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 440 |     pub async fn rotate_keys(&mut self) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 711 |     pub fn get_public_key(&self) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 717 |     pub fn get_shared_secret(&self) -> Option<[u8; 32]> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/pool.rs:98:18
[INFO] [stdout]     |
[INFO] [stdout]  48 | impl VCLPool {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub async fn connect(&mut self, id: ConnectionId, addr: &str) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub async fn accept_handshake(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub async fn send(&mut self, id: ConnectionId, data: &[u8]) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub async fn recv(&mut self, id: ConnectionId) -> Result<VCLPacket, VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub async fn ping(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub async fn rotate_keys(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn get(&self, id: ConnectionId) -> Result<&VCLConnection, VCLError> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     fn get_mut(&mut self, id: ConnectionId) -> Result<&mut VCLConnection, VCLError> {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `max_retries` and `retry_interval_ms` are never read
[INFO] [stdout]    --> src/config.rs:97:9
[INFO] [stdout]     |
[INFO] [stdout]  87 | pub struct VCLConfig {
[INFO] [stdout]     |            --------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub max_retries: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub retry_interval_ms: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `VCLConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_config_client` is never used
[INFO] [stdout]    --> src/transport.rs:289:18
[INFO] [stdout]     |
[INFO] [stdout] 114 | impl VCLTransport {
[INFO] [stdout]     | ----------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub async fn from_config_client(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `with_max_pending` is never used
[INFO] [stdout]    --> src/fragment.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 122 | impl Reassembler {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn with_max_pending(max_pending: usize) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `throughput_recv_bps` is never used
[INFO] [stdout]    --> src/metrics.rs:216:12
[INFO] [stdout]     |
[INFO] [stdout]  63 | impl VCLMetrics {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn throughput_recv_bps(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `destination` and `netmask` are never read
[INFO] [stdout]   --> src/tun_device.rs:69:9
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct TunConfig {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub destination: Ipv4Addr,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 70 |     /// Netmask for the TUN interface.
[INFO] [stdout] 71 |     pub netmask: Ipv4Addr,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TunConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `raw` is never read
[INFO] [stdout]    --> src/tun_device.rs:100:9
[INFO] [stdout]     |
[INFO] [stdout]  98 | pub struct IpPacket {
[INFO] [stdout]     |            -------- field in this struct
[INFO] [stdout]  99 |     /// Raw packet bytes (including IP header).
[INFO] [stdout] 100 |     pub raw: Vec<u8>,
[INFO] [stdout]     |         ^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `IpPacket` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VCLTun` is never constructed
[INFO] [stdout]    --> src/tun_device.rs:116:12
[INFO] [stdout]     |
[INFO] [stdout] 116 | pub struct VCLTun {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/tun_device.rs:136:12
[INFO] [stdout]     |
[INFO] [stdout] 126 | impl VCLTun {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn create(config: TunConfig) -> Result<Self, VCLError> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub async fn read_packet(&mut self) -> Result<Vec<u8>, VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub async fn write_packet(&mut self, packet: &[u8]) -> Result<(), VCLError> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub fn name(&self) -> &str {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn mtu(&self) -> u16 {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 269 |     pub fn address(&self) -> Ipv4Addr {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 274 |     pub fn destination(&self) -> Ipv4Addr {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn config(&self) -> &TunConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_ipv6` is never used
[INFO] [stdout]    --> src/ip_packet.rs:239:12
[INFO] [stdout]     |
[INFO] [stdout] 145 | impl ParsedPacket {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 239 |     pub fn is_ipv6(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `local_addr` is never read
[INFO] [stdout]   --> src/multipath.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub struct PathInfo {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub local_addr: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PathInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rr_weights` is never read
[INFO] [stdout]    --> src/multipath.rs:153:5
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub struct MultipathSender {
[INFO] [stdout]     |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 153 |     rr_weights: Vec<u32>,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `path` and `path_mut` are never used
[INFO] [stdout]    --> src/multipath.rs:264:12
[INFO] [stdout]     |
[INFO] [stdout] 158 | impl MultipathSender {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn path(&self, index: usize) -> Option<&PathInfo> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 269 |     pub fn path_mut(&mut self, index: usize) -> Option<&mut PathInfo> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `ipv4_udp` is never used
[INFO] [stdout]   --> src/mtu.rs:99:12
[INFO] [stdout]    |
[INFO] [stdout] 97 | impl MtuConfig {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 98 |     /// Config for a connection running over IPv4/UDP.
[INFO] [stdout] 99 |     pub fn ipv4_udp() -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `measured_at` is never read
[INFO] [stdout]    --> src/mtu.rs:130:9
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub struct PathMtu {
[INFO] [stdout]     |            ------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub measured_at: Instant,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PathMtu` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_stale` is never used
[INFO] [stdout]    --> src/mtu.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 135 | impl PathMtu {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn is_stale(&self, max_age: Duration) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `successful_probes` is never used
[INFO] [stdout]    --> src/mtu.rs:361:12
[INFO] [stdout]     |
[INFO] [stdout] 188 | impl MtuNegotiator {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn successful_probes(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `DataCenter` and `Disabled` are never constructed
[INFO] [stdout]   --> src/keepalive.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub enum KeepalivePreset {
[INFO] [stdout]    |          --------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 56 |     DataCenter,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 57 |     /// Disabled — no automatic keepalive.
[INFO] [stdout] 58 |     Disabled,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `KeepalivePreset` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `aggressive` is never used
[INFO] [stdout]    --> src/keepalive.rs:123:12
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl KeepaliveConfig {
[INFO] [stdout]     | -------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 123 |     pub fn aggressive() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stable_threshold` is never read
[INFO] [stdout]   --> src/reconnect.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct ReconnectConfig {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub stable_threshold: Duration,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ReconnectConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `check_stability` is never used
[INFO] [stdout]    --> src/reconnect.rs:325:12
[INFO] [stdout]     |
[INFO] [stdout] 160 | impl ReconnectManager {
[INFO] [stdout]     | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn check_stability(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `raw` is never read
[INFO] [stdout]   --> src/dns.rs:98:9
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct DnsPacket {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub raw: Vec<u8>,
[INFO] [stdout]    |         ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DnsPacket` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `config` is never used
[INFO] [stdout]    --> src/dns.rs:468:12
[INFO] [stdout]     |
[INFO] [stdout] 297 | impl DnsFilter {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 468 |     pub fn config(&self) -> &DnsConfig {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_packet_size` is never read
[INFO] [stdout]   --> src/obfuscation.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct ObfuscationConfig {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub max_packet_size: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ObfuscationConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `mode` is never used
[INFO] [stdout]    --> src/obfuscation.rs:458:12
[INFO] [stdout]     |
[INFO] [stdout] 153 | impl Obfuscator {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 458 |     pub fn mode(&self) -> &ObfuscationMode {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `keepalive_rtt` and `obfuscation_overhead` are never read
[INFO] [stdout]    --> src/tunnel.rs:183:9
[INFO] [stdout]     |
[INFO] [stdout] 173 | pub struct TunnelStats {
[INFO] [stdout]     |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub keepalive_rtt: Option<Duration>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub obfuscation_overhead: f64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `TunnelStats` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/tunnel.rs:321:12
[INFO] [stdout]     |
[INFO] [stdout] 215 | impl VCLTunnel {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 321 |     pub fn check_keepalive(&mut self) -> KeepaliveAction {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 326 |     pub fn keepalive_sent(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 331 |     pub fn keepalive_pong_received(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn record_activity(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 346 |     pub fn should_reconnect(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 371 |     pub fn time_until_reconnect(&self) -> Duration {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 419 |     pub fn add_split_domain(&mut self, domain: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 444 |     pub fn record_retransmit(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `update_from_tunnel_stats` and `registry` are never used
[INFO] [stdout]    --> src/prometheus_metrics.rs:266:12
[INFO] [stdout]     |
[INFO] [stdout]  74 | impl VCLPrometheusExporter {
[INFO] [stdout]     | -------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn update_from_tunnel_stats(&self, stats: &TunnelStats) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn registry(&self) -> &Registry {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 37.21s
[INFO] running `Command { std: "docker" "inspect" "502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `KeepaliveConfig`
[INFO] [stderr]   --> src/tunnel.rs:23:24
[INFO] [stderr]    |
[INFO] [stderr] 23 | use crate::keepalive::{KeepaliveConfig, KeepaliveManager, KeepaliveAction, KeepalivePreset};
[INFO] [stderr]    |                        ^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/tunnel.rs:230:13
[INFO] [stderr]     |
[INFO] [stderr] 230 |         let mut dns_config = DnsConfig {
[INFO] [stderr]     |             ----^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `rr_weights` is never read
[INFO] [stderr]    --> src/multipath.rs:153:5
[INFO] [stderr]     |
[INFO] [stderr] 147 | pub struct MultipathSender {
[INFO] [stderr]     |            --------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 153 |     rr_weights: Vec<u32>,
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `vcl-protocol` (lib) generated 3 warnings (run `cargo fix --lib -p vcl-protocol` to apply 2 suggestions)
[INFO] [stderr] warning: fields `sequence` and `size` are never read
[INFO] [stderr]   --> src/event.rs:52:9
[INFO] [stderr]    |
[INFO] [stderr] 50 |     PacketReceived {
[INFO] [stderr]    |     -------------- fields in this variant
[INFO] [stderr] 51 |         /// Sequence number of the received packet.
[INFO] [stderr] 52 |         sequence: u64,
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr] 53 |         /// Size of the decrypted payload in bytes.
[INFO] [stderr] 54 |         size: usize,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `latency` is never read
[INFO] [stderr]   --> src/event.rs:63:9
[INFO] [stderr]    |
[INFO] [stderr] 61 |     PongReceived {
[INFO] [stderr]    |     ------------ field in this variant
[INFO] [stderr] 62 |         /// Measured round-trip time from `ping()` to pong receipt.
[INFO] [stderr] 63 |         latency: Duration,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Disconnected` and `Error` are never constructed
[INFO] [stderr]   --> src/event.rs:47:5
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub enum VCLEvent {
[INFO] [stderr]    |          -------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 47 |     Disconnected,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 70 |     Error(String),
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/packet.rs:62:12
[INFO] [stderr]    |
[INFO] [stderr] 60 | impl VCLPacket {
[INFO] [stderr]    | -------------- associated function in this implementation
[INFO] [stderr] 61 |     /// Create a new [`PacketType::Data`] packet.
[INFO] [stderr] 62 |     pub fn new(sequence: u64, prev_hash: Vec<u8>, payload: Vec<u8>, nonce: [u8; 24]) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/connection.rs:167:12
[INFO] [stderr]     |
[INFO] [stderr] 103 | impl VCLConnection {
[INFO] [stderr]     | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 167 |     pub fn subscribe(&mut self) -> mpsc::Receiver<VCLEvent> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 185 |     pub fn set_timeout(&mut self, secs: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 191 |     pub fn get_timeout(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 196 |     pub fn last_activity(&self) -> Instant {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 201 |     pub fn get_config(&self) -> &VCLConfig {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 206 |     pub fn flow(&self) -> &FlowController {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 213 |     pub fn ack_packet(&mut self, sequence: u64) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 406 |     pub async fn ping(&mut self) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 440 |     pub async fn rotate_keys(&mut self) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 685 |     pub fn close(&mut self) -> Result<(), VCLError> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 706 |     pub fn is_closed(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 711 |     pub fn get_public_key(&self) -> Vec<u8> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 717 |     pub fn get_shared_secret(&self) -> Option<[u8; 32]> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type alias `ConnectionId` is never used
[INFO] [stderr]   --> src/pool.rs:36:10
[INFO] [stderr]    |
[INFO] [stderr] 36 | pub type ConnectionId = u64;
[INFO] [stderr]    |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `VCLPool` is never constructed
[INFO] [stderr]   --> src/pool.rs:42:12
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub struct VCLPool {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/pool.rs:56:12
[INFO] [stderr]     |
[INFO] [stderr]  48 | impl VCLPool {
[INFO] [stderr]     | ------------ associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  56 |     pub fn new(max_connections: usize) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  72 |     pub async fn bind(&mut self, addr: &str) -> Result<ConnectionId, VCLError> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr]  98 |     pub async fn connect(&mut self, id: ConnectionId, addr: &str) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 109 |     pub async fn accept_handshake(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 120 |     pub async fn send(&mut self, id: ConnectionId, data: &[u8]) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 131 |     pub async fn recv(&mut self, id: ConnectionId) -> Result<VCLPacket, VCLError> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 142 |     pub async fn ping(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 153 |     pub async fn rotate_keys(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 164 |     pub fn close(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 183 |     pub fn close_all(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 194 |     pub fn len(&self) -> usize {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 199 |     pub fn is_empty(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 204 |     pub fn is_full(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 209 |     pub fn connection_ids(&self) -> Vec<ConnectionId> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 214 |     pub fn contains(&self, id: ConnectionId) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 222 |     pub fn get(&self, id: ConnectionId) -> Result<&VCLConnection, VCLError> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 228 |     fn get_mut(&mut self, id: ConnectionId) -> Result<&mut VCLConnection, VCLError> {
[INFO] [stderr]     |        ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Tcp` and `Udp` are never constructed
[INFO] [stderr]   --> src/config.rs:35:5
[INFO] [stderr]    |
[INFO] [stderr] 32 | pub enum TransportMode {
[INFO] [stderr]    |          ------------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 35 |     Tcp,
[INFO] [stderr]    |     ^^^
[INFO] [stderr] ...
[INFO] [stderr] 39 |     Udp,
[INFO] [stderr]    |     ^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TransportMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Reliable`, `Partial`, and `Unreliable` are never constructed
[INFO] [stderr]   --> src/config.rs:56:5
[INFO] [stderr]    |
[INFO] [stderr] 52 | pub enum ReliabilityMode {
[INFO] [stderr]    |          --------------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 56 |     Reliable,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 61 |     Partial,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 65 |     Unreliable,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ReliabilityMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `transport`, `max_retries`, and `retry_interval_ms` are never read
[INFO] [stderr]    --> src/config.rs:89:9
[INFO] [stderr]     |
[INFO] [stderr]  87 | pub struct VCLConfig {
[INFO] [stderr]     |            --------- fields in this struct
[INFO] [stderr]  88 |     /// Transport protocol to use.
[INFO] [stderr]  89 |     pub transport: TransportMode,
[INFO] [stderr]     |         ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  97 |     pub max_retries: u32,
[INFO] [stderr]     |         ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 101 |     pub retry_interval_ms: u64,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `VCLConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `vpn`, `gaming`, `streaming`, `is_tcp`, and `has_retransmission` are never used
[INFO] [stderr]    --> src/config.rs:126:12
[INFO] [stderr]     |
[INFO] [stderr] 113 | impl VCLConfig {
[INFO] [stderr]     | -------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 126 |     pub fn vpn() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 149 |     pub fn gaming() -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 172 |     pub fn streaming() -> Self {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 207 |     pub fn is_tcp(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 214 |     pub fn has_retransmission(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `UDP_MAX_SIZE` is never used
[INFO] [stderr]   --> src/transport.rs:55:7
[INFO] [stderr]    |
[INFO] [stderr] 55 | const UDP_MAX_SIZE: usize = 65535;
[INFO] [stderr]    |       ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `TCP_HEADER_SIZE` is never used
[INFO] [stderr]   --> src/transport.rs:56:7
[INFO] [stderr]    |
[INFO] [stderr] 56 | const TCP_HEADER_SIZE: usize = 4;
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `VCLTransport` is never used
[INFO] [stderr]   --> src/transport.rs:67:10
[INFO] [stderr]    |
[INFO] [stderr] 67 | pub enum VCLTransport {
[INFO] [stderr]    |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/transport.rs:118:18
[INFO] [stderr]     |
[INFO] [stderr] 114 | impl VCLTransport {
[INFO] [stderr]     | ----------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 118 |     pub async fn bind_udp(addr: &str) -> Result<Self, VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 128 |     pub async fn bind_tcp(addr: &str) -> Result<Self, VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 136 |     pub async fn connect_tcp(addr: &str) -> Result<Self, VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 147 |     pub async fn bind_ws(addr: &str) -> Result<Self, VCLError> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 157 |     pub async fn connect_ws(url: &str) -> Result<Self, VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 253 |     pub async fn accept(&self) -> Result<Self, VCLError> {
[INFO] [stderr]     |                  ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 289 |     pub async fn from_config_client(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 304 |     pub async fn from_config_server(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 325 |     pub async fn send_raw(&mut self, data: &[u8]) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 388 |     pub async fn recv_raw(&mut self) -> Result<(Vec<u8>, SocketAddr), VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 489 |     pub fn local_addr(&self) -> Option<SocketAddr> {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 505 |     pub fn peer_addr(&self) -> Option<SocketAddr> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 521 |     pub fn set_peer_addr(&mut self, addr: SocketAddr) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 528 |     pub fn mode(&self) -> TransportMode {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 543 |     pub fn is_tcp(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 551 |     pub fn is_udp(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 556 |     pub fn is_websocket(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `is_last` is never used
[INFO] [stderr]   --> src/fragment.rs:47:12
[INFO] [stderr]    |
[INFO] [stderr] 45 | impl Fragment {
[INFO] [stderr]    | ------------- method in this implementation
[INFO] [stderr] 46 |     /// Returns `true` if this is the last fragment in the message.
[INFO] [stderr] 47 |     pub fn is_last(&self) -> bool {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `needs_split` is never used
[INFO] [stderr]   --> src/fragment.rs:99:12
[INFO] [stderr]    |
[INFO] [stderr] 60 | impl Fragmenter {
[INFO] [stderr]    | --------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 99 |     pub fn needs_split(data: &[u8], fragment_size: usize) -> bool {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `with_max_pending`, `pending_count`, and `cleanup` are never used
[INFO] [stderr]    --> src/fragment.rs:132:12
[INFO] [stderr]     |
[INFO] [stderr] 122 | impl Reassembler {
[INFO] [stderr]     | ---------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 132 |     pub fn with_max_pending(max_pending: usize) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 199 |     pub fn pending_count(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 204 |     pub fn cleanup(&mut self) {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `AIMD_DECREASE_FACTOR` is never used
[INFO] [stderr]   --> src/flow.rs:49:7
[INFO] [stderr]    |
[INFO] [stderr] 49 | const AIMD_DECREASE_FACTOR: f64 = 0.5;
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `CWND_MIN` is never used
[INFO] [stderr]   --> src/flow.rs:50:7
[INFO] [stderr]    |
[INFO] [stderr] 50 | const CWND_MIN: f64 = 1.0;
[INFO] [stderr]    |       ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `retransmit_count` and `data` are never read
[INFO] [stderr]   --> src/flow.rs:60:9
[INFO] [stderr]    |
[INFO] [stderr] 54 | pub struct InFlightPacket {
[INFO] [stderr]    |            -------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 60 |     pub retransmit_count: u32,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^
[INFO] [stderr] 61 |     /// Original data payload — stored for retransmission.
[INFO] [stderr] 62 |     pub data: Vec<u8>,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `InFlightPacket` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `is_timed_out` is never used
[INFO] [stderr]   --> src/flow.rs:76:12
[INFO] [stderr]    |
[INFO] [stderr] 65 | impl InFlightPacket {
[INFO] [stderr]    | ------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 76 |     pub fn is_timed_out(&self, rto: Duration) -> bool {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `RetransmitRequest` is never constructed
[INFO] [stderr]   --> src/flow.rs:83:12
[INFO] [stderr]    |
[INFO] [stderr] 83 | pub struct RetransmitRequest {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `total_lost` and `total_retransmits` are never read
[INFO] [stderr]    --> src/flow.rs:106:5
[INFO] [stderr]     |
[INFO] [stderr]  94 | pub struct FlowController {
[INFO] [stderr]     |            -------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 106 |     total_lost: u64,
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] 107 |     total_retransmits: u64,
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/flow.rs:132:12
[INFO] [stderr]     |
[INFO] [stderr] 110 | impl FlowController {
[INFO] [stderr]     | ------------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 132 |     pub fn with_rto(window_size: usize, rto_ms: u64) -> Self {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 146 |     pub fn available_slots(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 156 |     pub fn cwnd(&self) -> f64 {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 166 |     pub fn in_slow_start(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 171 |     pub fn set_window_size(&mut self, size: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 244 |     pub fn timed_out_packets(&mut self) -> Vec<RetransmitRequest> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 293 |     fn on_loss_cwnd(&mut self) {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 334 |     pub fn srtt(&self) -> Option<Duration> {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 339 |     pub fn rttvar(&self) -> Option<Duration> {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 344 |     pub fn rto(&self) -> Duration {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 349 |     pub fn total_sent(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 354 |     pub fn total_acked(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 359 |     pub fn total_lost(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 364 |     pub fn total_retransmits(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 369 |     pub fn loss_rate(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 375 |     pub fn is_acked(&self, sequence: u64) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 380 |     pub fn reset(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `VCLMetrics` is never constructed
[INFO] [stderr]   --> src/metrics.rs:30:12
[INFO] [stderr]    |
[INFO] [stderr] 30 | pub struct VCLMetrics {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/metrics.rs:65:12
[INFO] [stderr]     |
[INFO] [stderr]  63 | impl VCLMetrics {
[INFO] [stderr]     | --------------- associated items in this implementation
[INFO] [stderr]  64 |     /// Create a new zeroed metrics instance.
[INFO] [stderr]  65 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  89 |     pub fn record_sent(&mut self, bytes: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  95 |     pub fn record_received(&mut self, bytes: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 101 |     pub fn record_retransmit(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 106 |     pub fn record_drop_replay(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 111 |     pub fn record_drop_chain(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 116 |     pub fn record_drop_signature(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 121 |     pub fn record_fragment_sent(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 126 |     pub fn record_fragment_reassembled(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 131 |     pub fn record_key_rotation(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 136 |     pub fn record_handshake(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 141 |     pub fn record_rtt_sample(&mut self, rtt: Duration) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 149 |     pub fn record_cwnd(&mut self, cwnd: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 159 |     pub fn loss_rate(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 167 |     pub fn avg_rtt(&self) -> Option<Duration> {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 176 |     pub fn min_rtt(&self) -> Option<Duration> {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 181 |     pub fn max_rtt(&self) -> Option<Duration> {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 186 |     pub fn current_cwnd(&self) -> Option<usize> {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 191 |     pub fn avg_cwnd(&self) -> Option<f64> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 200 |     pub fn total_dropped(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 207 |     pub fn throughput_sent_bps(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 216 |     pub fn throughput_recv_bps(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 225 |     pub fn uptime(&self) -> Duration {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 230 |     pub fn reset(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 238 |     pub fn merge(&mut self, other: &VCLMetrics) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `TunConfig` is never constructed
[INFO] [stderr]   --> src/tun_device.rs:63:12
[INFO] [stderr]    |
[INFO] [stderr] 63 | pub struct TunConfig {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `IpVersion` is never used
[INFO] [stderr]   --> src/tun_device.rs:90:10
[INFO] [stderr]    |
[INFO] [stderr] 90 | pub enum IpVersion {
[INFO] [stderr]    |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `IpPacket` is never constructed
[INFO] [stderr]   --> src/tun_device.rs:98:12
[INFO] [stderr]    |
[INFO] [stderr] 98 | pub struct IpPacket {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `VCLTun` is never constructed
[INFO] [stderr]    --> src/tun_device.rs:116:12
[INFO] [stderr]     |
[INFO] [stderr] 116 | pub struct VCLTun {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/tun_device.rs:136:12
[INFO] [stderr]     |
[INFO] [stderr] 126 | impl VCLTun {
[INFO] [stderr]     | ----------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 136 |     pub fn create(config: TunConfig) -> Result<Self, VCLError> {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 200 |     pub async fn read_packet(&mut self) -> Result<Vec<u8>, VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 232 |     pub async fn write_packet(&mut self, packet: &[u8]) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 259 |     pub fn name(&self) -> &str {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 264 |     pub fn mtu(&self) -> u16 {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 269 |     pub fn address(&self) -> Ipv4Addr {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 274 |     pub fn destination(&self) -> Ipv4Addr {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 279 |     pub fn config(&self) -> &TunConfig {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_ip_packet` is never used
[INFO] [stderr]    --> src/tun_device.rs:293:8
[INFO] [stderr]     |
[INFO] [stderr] 293 | pub fn parse_ip_packet(raw: Vec<u8>) -> Result<IpPacket, VCLError> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_ipv4` is never used
[INFO] [stderr]    --> src/tun_device.rs:318:4
[INFO] [stderr]     |
[INFO] [stderr] 318 | fn parse_ipv4(raw: Vec<u8>, len: usize) -> Result<IpPacket, VCLError> {
[INFO] [stderr]     |    ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_ipv6` is never used
[INFO] [stderr]    --> src/tun_device.rs:346:4
[INFO] [stderr]     |
[INFO] [stderr] 346 | fn parse_ipv6(raw: Vec<u8>, len: usize) -> Result<IpPacket, VCLError> {
[INFO] [stderr]     |    ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_ipv4` is never used
[INFO] [stderr]    --> src/tun_device.rs:367:8
[INFO] [stderr]     |
[INFO] [stderr] 367 | pub fn is_ipv4(raw: &[u8]) -> bool {
[INFO] [stderr]     |        ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_ipv6` is never used
[INFO] [stderr]    --> src/tun_device.rs:372:8
[INFO] [stderr]     |
[INFO] [stderr] 372 | pub fn is_ipv6(raw: &[u8]) -> bool {
[INFO] [stderr]     |        ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `ip_version` is never used
[INFO] [stderr]    --> src/tun_device.rs:377:8
[INFO] [stderr]     |
[INFO] [stderr] 377 | pub fn ip_version(raw: &[u8]) -> Option<IpVersion> {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `IpVersion` is never used
[INFO] [stderr]   --> src/ip_packet.rs:38:10
[INFO] [stderr]    |
[INFO] [stderr] 38 | pub enum IpVersion {
[INFO] [stderr]    |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `TransportProtocol` is never used
[INFO] [stderr]   --> src/ip_packet.rs:45:10
[INFO] [stderr]    |
[INFO] [stderr] 45 | pub enum TransportProtocol {
[INFO] [stderr]    |          ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `src_port`, `dst_port`, `is_syn`, `is_fin`, `is_rst`, and `protocol_number` are never used
[INFO] [stderr]    --> src/ip_packet.rs:80:12
[INFO] [stderr]     |
[INFO] [stderr]  78 | impl TransportProtocol {
[INFO] [stderr]     | ---------------------- methods in this implementation
[INFO] [stderr]  79 |     /// Returns the source port if this is TCP or UDP.
[INFO] [stderr]  80 |     pub fn src_port(&self) -> Option<u16> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  89 |     pub fn dst_port(&self) -> Option<u16> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  98 |     pub fn is_syn(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 103 |     pub fn is_fin(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 108 |     pub fn is_rst(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 113 |     pub fn protocol_number(&self) -> u8 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ParsedPacket` is never constructed
[INFO] [stderr]    --> src/ip_packet.rs:126:12
[INFO] [stderr]     |
[INFO] [stderr] 126 | pub struct ParsedPacket {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/ip_packet.rs:152:12
[INFO] [stderr]     |
[INFO] [stderr] 145 | impl ParsedPacket {
[INFO] [stderr]     | ----------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 152 |     pub fn parse(raw: Vec<u8>) -> Result<Self, VCLError> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 163 |     fn parse_ipv4(raw: Vec<u8>) -> Result<Self, VCLError> {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 202 |     fn parse_ipv6(raw: Vec<u8>) -> Result<Self, VCLError> {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 234 |     pub fn is_ipv4(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 239 |     pub fn is_ipv6(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 244 |     pub fn is_destined_for(&self, ip: &str) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 249 |     pub fn is_from(&self, ip: &str) -> bool {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 254 |     pub fn ip_payload(&self) -> &[u8] {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 263 |     pub fn is_dns(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 268 |     pub fn is_ping(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 276 |     pub fn summary(&self) -> String {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_transport` is never used
[INFO] [stderr]    --> src/ip_packet.rs:303:4
[INFO] [stderr]     |
[INFO] [stderr] 303 | fn parse_transport(
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_tcp` is never used
[INFO] [stderr]    --> src/ip_packet.rs:317:4
[INFO] [stderr]     |
[INFO] [stderr] 317 | fn parse_tcp(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stderr]     |    ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_udp` is never used
[INFO] [stderr]    --> src/ip_packet.rs:335:4
[INFO] [stderr]     |
[INFO] [stderr] 335 | fn parse_udp(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stderr]     |    ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_icmp` is never used
[INFO] [stderr]    --> src/ip_packet.rs:349:4
[INFO] [stderr]     |
[INFO] [stderr] 349 | fn parse_icmp(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stderr]     |    ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_icmpv6` is never used
[INFO] [stderr]    --> src/ip_packet.rs:359:4
[INFO] [stderr]     |
[INFO] [stderr] 359 | fn parse_icmpv6(raw: &[u8], offset: usize) -> Result<TransportProtocol, VCLError> {
[INFO] [stderr]     |    ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PathInfo` is never constructed
[INFO] [stderr]   --> src/multipath.rs:50:12
[INFO] [stderr]    |
[INFO] [stderr] 50 | pub struct PathInfo {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `score`, `loss_rate`, `update_srtt`, `record_sent`, and `record_loss` are never used
[INFO] [stderr]    --> src/multipath.rs:73:12
[INFO] [stderr]     |
[INFO] [stderr]  71 | impl PathInfo {
[INFO] [stderr]     | ------------- associated items in this implementation
[INFO] [stderr]  72 |     /// Create a new path with name, local address, bandwidth, and latency.
[INFO] [stderr]  73 |     pub fn new(name: &str, local_addr: &str, bandwidth_mbps: u32, latency_ms: u32) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  89 |     pub fn score(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  99 |     pub fn loss_rate(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 107 |     pub fn update_srtt(&mut self, rtt: Duration) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 119 |     pub fn record_sent(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 125 |     pub fn record_loss(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `SchedulingPolicy` is never used
[INFO] [stderr]    --> src/multipath.rs:132:10
[INFO] [stderr]     |
[INFO] [stderr] 132 | pub enum SchedulingPolicy {
[INFO] [stderr]     |          ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `MultipathSender` is never constructed
[INFO] [stderr]    --> src/multipath.rs:147:12
[INFO] [stderr]     |
[INFO] [stderr] 147 | pub struct MultipathSender {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/multipath.rs:163:12
[INFO] [stderr]     |
[INFO] [stderr] 158 | impl MultipathSender {
[INFO] [stderr]     | -------------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 163 |     pub fn new(paths: Vec<PathInfo>, policy: SchedulingPolicy) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 183 |     pub fn select_path_index(&mut self, data_len: usize) -> Option<usize> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 249 |     pub fn select_all_paths(&mut self) -> Vec<usize> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 264 |     pub fn path(&self, index: usize) -> Option<&PathInfo> {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 269 |     pub fn path_mut(&mut self, index: usize) -> Option<&mut PathInfo> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 274 |     pub fn paths(&self) -> &[PathInfo] {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 279 |     pub fn active_path_count(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 284 |     pub fn deactivate_path(&mut self, index: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 292 |     pub fn activate_path(&mut self, index: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 300 |     pub fn record_loss(&mut self, index: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 307 |     pub fn update_rtt(&mut self, index: usize, rtt: Duration) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 314 |     pub fn total_scheduled(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 319 |     pub fn set_policy(&mut self, policy: SchedulingPolicy) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 325 |     pub fn policy(&self) -> &SchedulingPolicy {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `MultipathReceiver` is never constructed
[INFO] [stderr]    --> src/multipath.rs:334:12
[INFO] [stderr]     |
[INFO] [stderr] 334 | pub struct MultipathReceiver {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/multipath.rs:351:12
[INFO] [stderr]     |
[INFO] [stderr] 349 | impl MultipathReceiver {
[INFO] [stderr]     | ---------------------- associated items in this implementation
[INFO] [stderr] 350 |     /// Create a new receiver with default buffer size (256).
[INFO] [stderr] 351 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 363 |     pub fn with_buffer_size(max_buffer: usize) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 380 |     pub fn add(&mut self, seq: u64, path_id: &str, data: Vec<u8>) -> Option<(String, Vec<u8>)> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 425 |     pub fn drain_ordered(&mut self) -> Vec<(u64, String, Vec<u8>)> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 437 |     pub fn next_seq(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 442 |     pub fn pending_count(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 447 |     pub fn clear(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 456 |     pub fn total_received(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 461 |     pub fn total_delivered(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 466 |     pub fn total_duplicates(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `VCL_HEADER_OVERHEAD` is never used
[INFO] [stderr]   --> src/mtu.rs:44:11
[INFO] [stderr]    |
[INFO] [stderr] 44 | pub const VCL_HEADER_OVERHEAD: usize = 149;
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `ETHERNET_MTU` is never used
[INFO] [stderr]   --> src/mtu.rs:47:11
[INFO] [stderr]    |
[INFO] [stderr] 47 | pub const ETHERNET_MTU: usize = 1500;
[INFO] [stderr]    |           ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `IPV4_HEADER` is never used
[INFO] [stderr]   --> src/mtu.rs:50:11
[INFO] [stderr]    |
[INFO] [stderr] 50 | pub const IPV4_HEADER: usize = 20;
[INFO] [stderr]    |           ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `IPV6_HEADER` is never used
[INFO] [stderr]   --> src/mtu.rs:53:11
[INFO] [stderr]    |
[INFO] [stderr] 53 | pub const IPV6_HEADER: usize = 40;
[INFO] [stderr]    |           ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `UDP_HEADER` is never used
[INFO] [stderr]   --> src/mtu.rs:56:11
[INFO] [stderr]    |
[INFO] [stderr] 56 | pub const UDP_HEADER: usize = 8;
[INFO] [stderr]    |           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MIN_MTU` is never used
[INFO] [stderr]   --> src/mtu.rs:59:11
[INFO] [stderr]    |
[INFO] [stderr] 59 | pub const MIN_MTU: usize = 576;
[INFO] [stderr]    |           ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MAX_MTU` is never used
[INFO] [stderr]   --> src/mtu.rs:62:11
[INFO] [stderr]    |
[INFO] [stderr] 62 | pub const MAX_MTU: usize = 9000; // jumbo frames
[INFO] [stderr]    |           ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `MtuConfig` is never constructed
[INFO] [stderr]   --> src/mtu.rs:66:12
[INFO] [stderr]    |
[INFO] [stderr] 66 | pub struct MtuConfig {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `ipv4_udp`, `ipv6_udp`, and `inside_wireguard` are never used
[INFO] [stderr]    --> src/mtu.rs:99:12
[INFO] [stderr]     |
[INFO] [stderr]  97 | impl MtuConfig {
[INFO] [stderr]     | -------------- associated functions in this implementation
[INFO] [stderr]  98 |     /// Config for a connection running over IPv4/UDP.
[INFO] [stderr]  99 |     pub fn ipv4_udp() -> Self {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 104 |     pub fn ipv6_udp() -> Self {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 112 |     pub fn inside_wireguard() -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PathMtu` is never constructed
[INFO] [stderr]    --> src/mtu.rs:124:12
[INFO] [stderr]     |
[INFO] [stderr] 124 | pub struct PathMtu {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new` and `is_stale` are never used
[INFO] [stderr]    --> src/mtu.rs:137:12
[INFO] [stderr]     |
[INFO] [stderr] 135 | impl PathMtu {
[INFO] [stderr]     | ------------ associated items in this implementation
[INFO] [stderr] 136 |     /// Create a new PathMtu.
[INFO] [stderr] 137 |     pub fn new(mtu: usize, fragment_size: usize, is_probed: bool) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 147 |     pub fn is_stale(&self, max_age: Duration) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `MtuState` is never used
[INFO] [stderr]    --> src/mtu.rs:154:10
[INFO] [stderr]     |
[INFO] [stderr] 154 | pub enum MtuState {
[INFO] [stderr]     |          ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `MtuNegotiator` is never constructed
[INFO] [stderr]    --> src/mtu.rs:173:12
[INFO] [stderr]     |
[INFO] [stderr] 173 | pub struct MtuNegotiator {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/mtu.rs:190:12
[INFO] [stderr]     |
[INFO] [stderr] 188 | impl MtuNegotiator {
[INFO] [stderr]     | ------------------ associated items in this implementation
[INFO] [stderr] 189 |     /// Create a new negotiator with the given config.
[INFO] [stderr] 190 |     pub fn new(config: MtuConfig) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 209 |     pub fn start_discovery(&mut self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 226 |     pub fn record_probe(&mut self, size: usize, success: bool) -> Option<usize> {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 282 |     pub fn check_probe_timeout(&self) -> Option<usize> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 292 |     pub fn current_mtu(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 297 |     pub fn state(&self) -> &MtuState {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 302 |     pub fn is_complete(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 310 |     pub fn recommended_fragment_size(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 332 |     pub fn set_mtu(&mut self, mtu: usize) {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 340 |     pub fn fallback_to_min(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 347 |     pub fn path_mtu(&self) -> PathMtu {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 356 |     pub fn total_probes(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 361 |     pub fn successful_probes(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 366 |     pub fn probe_history(&self) -> &[(usize, bool)] {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `fragment_size_for_mtu` is never used
[INFO] [stderr]    --> src/mtu.rs:381:8
[INFO] [stderr]     |
[INFO] [stderr] 381 | pub fn fragment_size_for_mtu(mtu: usize, ipv6: bool, extra_overhead: usize) -> usize {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `KeepalivePreset` is never used
[INFO] [stderr]   --> src/keepalive.rs:44:10
[INFO] [stderr]    |
[INFO] [stderr] 44 | pub enum KeepalivePreset {
[INFO] [stderr]    |          ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `KeepaliveConfig` is never constructed
[INFO] [stderr]   --> src/keepalive.rs:63:12
[INFO] [stderr]    |
[INFO] [stderr] 63 | pub struct KeepaliveConfig {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated functions are never used
[INFO] [stderr]    --> src/keepalive.rs:79:12
[INFO] [stderr]     |
[INFO] [stderr]  76 | impl KeepaliveConfig {
[INFO] [stderr]     | -------------------- associated functions in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  79 |     pub fn mobile() -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  90 |     pub fn home() -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 101 |     pub fn corporate() -> Self {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 112 |     pub fn datacenter() -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 123 |     pub fn aggressive() -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 128 |     pub fn disabled() -> Self {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 139 |     pub fn from_preset(preset: KeepalivePreset) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `KeepaliveAction` is never used
[INFO] [stderr]    --> src/keepalive.rs:158:10
[INFO] [stderr]     |
[INFO] [stderr] 158 | pub enum KeepaliveAction {
[INFO] [stderr]     |          ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `KeepaliveManager` is never constructed
[INFO] [stderr]    --> src/keepalive.rs:170:12
[INFO] [stderr]     |
[INFO] [stderr] 170 | pub struct KeepaliveManager {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/keepalive.rs:196:12
[INFO] [stderr]     |
[INFO] [stderr] 194 | impl KeepaliveManager {
[INFO] [stderr]     | --------------------- associated items in this implementation
[INFO] [stderr] 195 |     /// Create a new keepalive manager with the given config.
[INFO] [stderr] 196 |     pub fn new(config: KeepaliveConfig) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 221 |     pub fn from_preset(preset: KeepalivePreset) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 242 |     pub fn check(&mut self) -> KeepaliveAction {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 279 |     pub fn should_send_keepalive(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 294 |     pub fn record_keepalive_sent(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 306 |     pub fn record_pong_received(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 328 |     pub fn record_pong_missed(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 338 |     pub fn record_activity(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 349 |     pub fn reset_misses(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 359 |     fn update_srtt(&mut self, rtt: Duration) {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 370 |     fn adjust_interval(&mut self, rtt: Duration) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 392 |     pub fn srtt(&self) -> Option<Duration> {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 397 |     pub fn current_interval(&self) -> Duration {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 402 |     pub fn missed_pongs(&self) -> u32 {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 407 |     pub fn is_waiting_for_pong(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 412 |     pub fn is_dead(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 417 |     pub fn total_sent(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 422 |     pub fn total_pongs(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 427 |     pub fn last_pong(&self) -> Option<Instant> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 432 |     pub fn config(&self) -> &KeepaliveConfig {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ReconnectConfig` is never constructed
[INFO] [stderr]   --> src/reconnect.rs:55:12
[INFO] [stderr]    |
[INFO] [stderr] 55 | pub struct ReconnectConfig {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `mobile`, `stable`, and `instant` are never used
[INFO] [stderr]    --> src/reconnect.rs:89:12
[INFO] [stderr]     |
[INFO] [stderr]  86 | impl ReconnectConfig {
[INFO] [stderr]     | -------------------- associated functions in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  89 |     pub fn mobile() -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 101 |     pub fn stable() -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 113 |     pub fn instant() -> Self {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `ReconnectState` is never used
[INFO] [stderr]    --> src/reconnect.rs:127:10
[INFO] [stderr]     |
[INFO] [stderr] 127 | pub enum ReconnectState {
[INFO] [stderr]     |          ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ReconnectManager` is never constructed
[INFO] [stderr]    --> src/reconnect.rs:141:12
[INFO] [stderr]     |
[INFO] [stderr] 141 | pub struct ReconnectManager {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/reconnect.rs:162:12
[INFO] [stderr]     |
[INFO] [stderr] 160 | impl ReconnectManager {
[INFO] [stderr]     | --------------------- associated items in this implementation
[INFO] [stderr] 161 |     /// Create a new reconnect manager.
[INFO] [stderr] 162 |     pub fn new(config: ReconnectConfig) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 178 |     pub fn mobile() -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 183 |     pub fn stable() -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 192 |     pub fn on_disconnect(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 209 |     pub fn on_connect(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 236 |     pub fn on_failure(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 278 |     pub fn on_attempt_start(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 288 |     pub fn should_reconnect(&mut self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 308 |     pub fn time_until_reconnect(&self) -> Duration {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 325 |     pub fn check_stability(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 341 |     pub fn state(&self) -> &ReconnectState {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 346 |     pub fn is_connected(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 351 |     pub fn is_giving_up(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 356 |     pub fn attempts(&self) -> u32 {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 361 |     pub fn total_reconnects(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 366 |     pub fn current_interval(&self) -> Duration {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 371 |     pub fn total_downtime(&self) -> Duration {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 376 |     pub fn config(&self) -> &ReconnectConfig {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `CLOUDFLARE_DNS` is never used
[INFO] [stderr]   --> src/dns.rs:39:11
[INFO] [stderr]    |
[INFO] [stderr] 39 | pub const CLOUDFLARE_DNS:  &str = "1.1.1.1:53";
[INFO] [stderr]    |           ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `CLOUDFLARE_DNS2` is never used
[INFO] [stderr]   --> src/dns.rs:40:11
[INFO] [stderr]    |
[INFO] [stderr] 40 | pub const CLOUDFLARE_DNS2: &str = "1.0.0.1:53";
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `GOOGLE_DNS` is never used
[INFO] [stderr]   --> src/dns.rs:41:11
[INFO] [stderr]    |
[INFO] [stderr] 41 | pub const GOOGLE_DNS:      &str = "8.8.8.8:53";
[INFO] [stderr]    |           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `GOOGLE_DNS2` is never used
[INFO] [stderr]   --> src/dns.rs:42:11
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub const GOOGLE_DNS2:     &str = "8.8.4.4:53";
[INFO] [stderr]    |           ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `QUAD9_DNS` is never used
[INFO] [stderr]   --> src/dns.rs:43:11
[INFO] [stderr]    |
[INFO] [stderr] 43 | pub const QUAD9_DNS:       &str = "9.9.9.9:53";
[INFO] [stderr]    |           ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `DnsQueryType` is never used
[INFO] [stderr]   --> src/dns.rs:47:10
[INFO] [stderr]    |
[INFO] [stderr] 47 | pub enum DnsQueryType {
[INFO] [stderr]    |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `from_u16` and `to_u16` are never used
[INFO] [stderr]   --> src/dns.rs:59:12
[INFO] [stderr]    |
[INFO] [stderr] 58 | impl DnsQueryType {
[INFO] [stderr]    | ----------------- associated items in this implementation
[INFO] [stderr] 59 |     pub fn from_u16(v: u16) -> Self {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 72 |     pub fn to_u16(&self) -> u16 {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `DnsPacket` is never constructed
[INFO] [stderr]   --> src/dns.rs:88:12
[INFO] [stderr]    |
[INFO] [stderr] 88 | pub struct DnsPacket {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `parse` and `is_query` are never used
[INFO] [stderr]    --> src/dns.rs:105:12
[INFO] [stderr]     |
[INFO] [stderr] 101 | impl DnsPacket {
[INFO] [stderr]     | -------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 105 |     pub fn parse(raw: Vec<u8>) -> Option<Self> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 144 |     pub fn is_query(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_dns_name` is never used
[INFO] [stderr]    --> src/dns.rs:151:4
[INFO] [stderr]     |
[INFO] [stderr] 151 | fn parse_dns_name(data: &[u8], mut offset: usize) -> Option<(String, usize)> {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `DnsAction` is never used
[INFO] [stderr]    --> src/dns.rs:185:10
[INFO] [stderr]     |
[INFO] [stderr] 185 | pub enum DnsAction {
[INFO] [stderr]     |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CacheEntry` is never constructed
[INFO] [stderr]    --> src/dns.rs:198:8
[INFO] [stderr]     |
[INFO] [stderr] 198 | struct CacheEntry {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `is_expired` is never used
[INFO] [stderr]    --> src/dns.rs:204:8
[INFO] [stderr]     |
[INFO] [stderr] 203 | impl CacheEntry {
[INFO] [stderr]     | --------------- method in this implementation
[INFO] [stderr] 204 |     fn is_expired(&self) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `DnsConfig` is never constructed
[INFO] [stderr]    --> src/dns.rs:211:12
[INFO] [stderr]     |
[INFO] [stderr] 211 | pub struct DnsConfig {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `cloudflare`, `google`, `quad9`, `with_split_domain`, and `with_blocked_domain` are never used
[INFO] [stderr]    --> src/dns.rs:244:12
[INFO] [stderr]     |
[INFO] [stderr] 242 | impl DnsConfig {
[INFO] [stderr]     | -------------- associated items in this implementation
[INFO] [stderr] 243 |     /// Config using Cloudflare DNS (1.1.1.1).
[INFO] [stderr] 244 |     pub fn cloudflare() -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 249 |     pub fn google() -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 260 |     pub fn quad9() -> Self {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 268 |     pub fn with_split_domain(mut self, domain: &str) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 274 |     pub fn with_blocked_domain(mut self, domain: &str) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `DnsFilter` is never constructed
[INFO] [stderr]    --> src/dns.rs:284:12
[INFO] [stderr]     |
[INFO] [stderr] 284 | pub struct DnsFilter {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/dns.rs:299:12
[INFO] [stderr]     |
[INFO] [stderr] 297 | impl DnsFilter {
[INFO] [stderr]     | -------------- associated items in this implementation
[INFO] [stderr] 298 |     /// Create a new DNS filter with the given config.
[INFO] [stderr] 299 |     pub fn new(config: DnsConfig) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 318 |     pub fn is_dns_packet(data: &[u8]) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 330 |     pub fn decide(&mut self, domain: &str, query_type: &DnsQueryType) -> DnsAction {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 369 |     pub fn cache_response(&mut self, domain: &str, addr: IpAddr) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 392 |     pub fn is_blocked(&self, domain: &str) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 401 |     pub fn is_split_dns(&self, domain: &str) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 410 |     pub fn block_domain(&mut self, domain: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 416 |     pub fn add_split_domain(&mut self, domain: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 422 |     pub fn primary_upstream(&self) -> Option<&str> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 427 |     pub fn evict_expired(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 437 |     pub fn clear_cache(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 443 |     pub fn cache_size(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 448 |     pub fn total_intercepted(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 453 |     pub fn total_blocked(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 458 |     pub fn total_cache_hits(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 463 |     pub fn total_forwarded(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 468 |     pub fn config(&self) -> &DnsConfig {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `TLS_RECORD_HEADER` is never used
[INFO] [stderr]   --> src/obfuscation.rs:35:7
[INFO] [stderr]    |
[INFO] [stderr] 35 | const TLS_RECORD_HEADER: [u8; 3] = [0x17, 0x03, 0x03];
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `HTTP2_DATA_FRAME_TYPE` is never used
[INFO] [stderr]   --> src/obfuscation.rs:38:7
[INFO] [stderr]    |
[INFO] [stderr] 38 | const HTTP2_DATA_FRAME_TYPE: u8 = 0x00;
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `COMMON_SIZES` is never used
[INFO] [stderr]   --> src/obfuscation.rs:41:7
[INFO] [stderr]    |
[INFO] [stderr] 41 | const COMMON_SIZES: &[usize] = &[64, 128, 256, 512, 1024, 1280, 1400, 1460];
[INFO] [stderr]    |       ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `ObfuscationMode` is never used
[INFO] [stderr]   --> src/obfuscation.rs:45:10
[INFO] [stderr]    |
[INFO] [stderr] 45 | pub enum ObfuscationMode {
[INFO] [stderr]    |          ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ObfuscationConfig` is never constructed
[INFO] [stderr]   --> src/obfuscation.rs:62:12
[INFO] [stderr]    |
[INFO] [stderr] 62 | pub struct ObfuscationConfig {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `none`, `padding`, `tls_mimicry`, `http2_mimicry`, `size_normalization`, and `full` are never used
[INFO] [stderr]    --> src/obfuscation.rs:72:12
[INFO] [stderr]     |
[INFO] [stderr]  70 | impl ObfuscationConfig {
[INFO] [stderr]     | ---------------------- associated functions in this implementation
[INFO] [stderr]  71 |     /// No obfuscation.
[INFO] [stderr]  72 |     pub fn none() -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr]  83 |     pub fn padding() -> Self {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  94 |     pub fn tls_mimicry() -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 105 |     pub fn http2_mimicry() -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 116 |     pub fn size_normalization() -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 127 |     pub fn full() -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Obfuscator` is never constructed
[INFO] [stderr]    --> src/obfuscation.rs:145:12
[INFO] [stderr]     |
[INFO] [stderr] 145 | pub struct Obfuscator {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/obfuscation.rs:155:12
[INFO] [stderr]     |
[INFO] [stderr] 153 | impl Obfuscator {
[INFO] [stderr]     | --------------- associated items in this implementation
[INFO] [stderr] 154 |     /// Create a new obfuscator with the given config.
[INFO] [stderr] 155 |     pub fn new(config: ObfuscationConfig) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 166 |     pub fn obfuscate(&mut self, data: &[u8]) -> Vec<u8> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 198 |     pub fn deobfuscate(&mut self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 228 |     pub fn jitter_ms(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 239 |     fn apply_padding(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 264 |     fn strip_padding(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 284 |     fn apply_size_normalization(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 312 |     fn strip_size_normalization(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 335 |     fn apply_tls_mimicry(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 350 |     fn strip_tls_mimicry(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 381 |     fn apply_http2_mimicry(&self, data: &[u8]) -> Vec<u8> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 403 |     fn strip_http2_mimicry(&self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 435 |     pub fn overhead_ratio(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 443 |     pub fn total_obfuscated(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 448 |     pub fn total_overhead(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 453 |     pub fn config(&self) -> &ObfuscationConfig {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 458 |     pub fn mode(&self) -> &ObfuscationMode {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `looks_like_tls` is never used
[INFO] [stderr]    --> src/obfuscation.rs:464:8
[INFO] [stderr]     |
[INFO] [stderr] 464 | pub fn looks_like_tls(data: &[u8]) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `looks_like_http2` is never used
[INFO] [stderr]    --> src/obfuscation.rs:472:8
[INFO] [stderr]     |
[INFO] [stderr] 472 | pub fn looks_like_http2(data: &[u8]) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `recommended_mode` is never used
[INFO] [stderr]    --> src/obfuscation.rs:479:8
[INFO] [stderr]     |
[INFO] [stderr] 479 | pub fn recommended_mode(network_hint: &str) -> ObfuscationMode {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `TunnelConfig` is never constructed
[INFO] [stderr]   --> src/tunnel.rs:35:12
[INFO] [stderr]    |
[INFO] [stderr] 35 | pub struct TunnelConfig {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/tunnel.rs:61:12
[INFO] [stderr]     |
[INFO] [stderr]  58 | impl TunnelConfig {
[INFO] [stderr]     | ----------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  61 |     pub fn mobile(local_ip: &str, remote_ip: &str) -> Self {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  80 |     pub fn home(local_ip: &str, remote_ip: &str) -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr]  98 |     pub fn corporate(local_ip: &str, remote_ip: &str) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 116 |     pub fn auto(local_ip: &str, remote_ip: &str, network_hint: &str) -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 138 |     pub fn block_domain(mut self, domain: &str) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 144 |     pub fn split_domain(mut self, domain: &str) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 150 |     pub fn with_dns(mut self, servers: Vec<&str>) -> Self {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `TunnelState` is never used
[INFO] [stderr]    --> src/tunnel.rs:158:10
[INFO] [stderr]     |
[INFO] [stderr] 158 | pub enum TunnelState {
[INFO] [stderr]     |          ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `TunnelStats` is never constructed
[INFO] [stderr]    --> src/tunnel.rs:173:12
[INFO] [stderr]     |
[INFO] [stderr] 173 | pub struct TunnelStats {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `VCLTunnel` is never constructed
[INFO] [stderr]    --> src/tunnel.rs:202:12
[INFO] [stderr]     |
[INFO] [stderr] 202 | pub struct VCLTunnel {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/tunnel.rs:217:12
[INFO] [stderr]     |
[INFO] [stderr] 215 | impl VCLTunnel {
[INFO] [stderr]     | -------------- associated items in this implementation
[INFO] [stderr] 216 |     /// Create a new tunnel with the given configuration.
[INFO] [stderr] 217 |     pub fn new(config: TunnelConfig) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 283 |     pub fn on_connecting(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 290 |     pub fn on_connected(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 298 |     pub fn on_disconnected(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 305 |     pub fn on_failed(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 311 |     pub fn stop(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 321 |     pub fn check_keepalive(&mut self) -> KeepaliveAction {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 326 |     pub fn keepalive_sent(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 331 |     pub fn keepalive_pong_received(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 339 |     pub fn record_activity(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 346 |     pub fn should_reconnect(&mut self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 351 |     pub fn reconnect_attempt_start(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 358 |     pub fn reconnect_failed(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 366 |     pub fn is_giving_up(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 371 |     pub fn time_until_reconnect(&self) -> Duration {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 378 |     pub fn obfuscate(&mut self, data: &[u8]) -> Vec<u8> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 385 |     pub fn deobfuscate(&mut self, data: &[u8]) -> Result<Vec<u8>, VCLError> {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 392 |     pub fn jitter_ms(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 399 |     pub fn dns_decide(&mut self, domain: &str) -> DnsAction {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 404 |     pub fn dns_cache(&mut self, domain: &str, addr: IpAddr) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 409 |     pub fn is_dns_packet(data: &[u8]) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 414 |     pub fn block_domain(&mut self, domain: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 419 |     pub fn add_split_domain(&mut self, domain: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 426 |     pub fn fragment_size(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 431 |     pub fn current_mtu(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 436 |     pub fn set_mtu(&mut self, mtu: usize) {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 444 |     pub fn record_retransmit(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 449 |     pub fn stats(&self) -> TunnelStats {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 466 |     pub fn state(&self) -> &TunnelState {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 471 |     pub fn is_connected(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 476 |     pub fn config(&self) -> &TunnelConfig {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 481 |     pub fn metrics(&self) -> &VCLMetrics {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `VCLPrometheusExporter` is never constructed
[INFO] [stderr]   --> src/prometheus_metrics.rs:33:12
[INFO] [stderr]    |
[INFO] [stderr] 33 | pub struct VCLPrometheusExporter {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/prometheus_metrics.rs:76:12
[INFO] [stderr]     |
[INFO] [stderr]  74 | impl VCLPrometheusExporter {
[INFO] [stderr]     | -------------------------- associated items in this implementation
[INFO] [stderr]  75 |     /// Create a new exporter with its own Prometheus registry.
[INFO] [stderr]  76 |     pub fn new() -> Result<Self, VCLError> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 138 |     pub fn update_bytes_sent(&self, bytes: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 143 |     pub fn update_bytes_received(&self, bytes: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 148 |     pub fn update_packets_sent(&self, count: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 153 |     pub fn update_packets_received(&self, count: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 158 |     pub fn update_retransmit(&self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 163 |     pub fn update_dropped(&self, count: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 168 |     pub fn set_connections_active(&self, count: f64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 173 |     pub fn update_reconnect(&self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 178 |     pub fn update_handshake(&self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 183 |     pub fn update_key_rotation(&self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 188 |     pub fn set_loss_rate(&self, rate: f64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 193 |     pub fn set_rtt_seconds(&self, rtt: f64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 199 |     pub fn set_cwnd(&self, cwnd: f64) {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 204 |     pub fn set_obfuscation_overhead(&self, ratio: f64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 209 |     pub fn set_mtu(&self, mtu: u16) {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 214 |     pub fn update_dns_queries(&self, count: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 219 |     pub fn update_dns_blocked(&self, count: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 224 |     pub fn update_dns_cache_hits(&self, count: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 229 |     pub fn update_fragments_sent(&self, count: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 234 |     pub fn update_fragments_reassembled(&self, count: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 239 |     pub fn set_tunnel_state(&self, state: f64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 250 |     pub fn update_from_metrics(&self, m: &VCLMetrics) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 266 |     pub fn update_from_tunnel_stats(&self, stats: &TunnelStats) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 290 |     pub fn render(&self) -> String {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 300 |     pub fn registry(&self) -> &Registry {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `vcl-protocol` (bin "vcl-protocol") generated 120 warnings (2 duplicates)
[INFO] [stderr] warning: unused variable: `next`
[INFO] [stderr]    --> src/mtu.rs:436:13
[INFO] [stderr]     |
[INFO] [stderr] 436 |         let next = n.record_probe(1038, true);
[INFO] [stderr]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_next`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variant `Error` is never constructed
[INFO] [stderr]   --> src/event.rs:70:5
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub enum VCLEvent {
[INFO] [stderr]    |          -------- variant in this enum
[INFO] [stderr] ...
[INFO] [stderr] 70 |     Error(String),
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `VCLEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/connection.rs:167:12
[INFO] [stderr]     |
[INFO] [stderr] 103 | impl VCLConnection {
[INFO] [stderr]     | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 167 |     pub fn subscribe(&mut self) -> mpsc::Receiver<VCLEvent> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 185 |     pub fn set_timeout(&mut self, secs: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 191 |     pub fn get_timeout(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 196 |     pub fn last_activity(&self) -> Instant {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 406 |     pub async fn ping(&mut self) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 440 |     pub async fn rotate_keys(&mut self) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 711 |     pub fn get_public_key(&self) -> Vec<u8> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 717 |     pub fn get_shared_secret(&self) -> Option<[u8; 32]> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/pool.rs:98:18
[INFO] [stderr]     |
[INFO] [stderr]  48 | impl VCLPool {
[INFO] [stderr]     | ------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  98 |     pub async fn connect(&mut self, id: ConnectionId, addr: &str) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 109 |     pub async fn accept_handshake(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 120 |     pub async fn send(&mut self, id: ConnectionId, data: &[u8]) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 131 |     pub async fn recv(&mut self, id: ConnectionId) -> Result<VCLPacket, VCLError> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 142 |     pub async fn ping(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 153 |     pub async fn rotate_keys(&mut self, id: ConnectionId) -> Result<(), VCLError> {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 222 |     pub fn get(&self, id: ConnectionId) -> Result<&VCLConnection, VCLError> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 228 |     fn get_mut(&mut self, id: ConnectionId) -> Result<&mut VCLConnection, VCLError> {
[INFO] [stderr]     |        ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `max_retries` and `retry_interval_ms` are never read
[INFO] [stderr]    --> src/config.rs:97:9
[INFO] [stderr]     |
[INFO] [stderr]  87 | pub struct VCLConfig {
[INFO] [stderr]     |            --------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr]  97 |     pub max_retries: u32,
[INFO] [stderr]     |         ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 101 |     pub retry_interval_ms: u64,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `VCLConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `from_config_client` is never used
[INFO] [stderr]    --> src/transport.rs:289:18
[INFO] [stderr]     |
[INFO] [stderr] 114 | impl VCLTransport {
[INFO] [stderr]     | ----------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 289 |     pub async fn from_config_client(
[INFO] [stderr]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `with_max_pending` is never used
[INFO] [stderr]    --> src/fragment.rs:132:12
[INFO] [stderr]     |
[INFO] [stderr] 122 | impl Reassembler {
[INFO] [stderr]     | ---------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 132 |     pub fn with_max_pending(max_pending: usize) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `throughput_recv_bps` is never used
[INFO] [stderr]    --> src/metrics.rs:216:12
[INFO] [stderr]     |
[INFO] [stderr]  63 | impl VCLMetrics {
[INFO] [stderr]     | --------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 216 |     pub fn throughput_recv_bps(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `destination` and `netmask` are never read
[INFO] [stderr]   --> src/tun_device.rs:69:9
[INFO] [stderr]    |
[INFO] [stderr] 63 | pub struct TunConfig {
[INFO] [stderr]    |            --------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 69 |     pub destination: Ipv4Addr,
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr] 70 |     /// Netmask for the TUN interface.
[INFO] [stderr] 71 |     pub netmask: Ipv4Addr,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TunConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `raw` is never read
[INFO] [stderr]    --> src/tun_device.rs:100:9
[INFO] [stderr]     |
[INFO] [stderr]  98 | pub struct IpPacket {
[INFO] [stderr]     |            -------- field in this struct
[INFO] [stderr]  99 |     /// Raw packet bytes (including IP header).
[INFO] [stderr] 100 |     pub raw: Vec<u8>,
[INFO] [stderr]     |         ^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `IpPacket` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `is_ipv6` is never used
[INFO] [stderr]    --> src/ip_packet.rs:239:12
[INFO] [stderr]     |
[INFO] [stderr] 145 | impl ParsedPacket {
[INFO] [stderr]     | ----------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 239 |     pub fn is_ipv6(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `local_addr` is never read
[INFO] [stderr]   --> src/multipath.rs:54:9
[INFO] [stderr]    |
[INFO] [stderr] 50 | pub struct PathInfo {
[INFO] [stderr]    |            -------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 54 |     pub local_addr: String,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `PathInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `rr_weights` is never read
[INFO] [stderr]    --> src/multipath.rs:153:5
[INFO] [stderr]     |
[INFO] [stderr] 147 | pub struct MultipathSender {
[INFO] [stderr]     |            --------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 153 |     rr_weights: Vec<u32>,
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `path` and `path_mut` are never used
[INFO] [stderr]    --> src/multipath.rs:264:12
[INFO] [stderr]     |
[INFO] [stderr] 158 | impl MultipathSender {
[INFO] [stderr]     | -------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 264 |     pub fn path(&self, index: usize) -> Option<&PathInfo> {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 269 |     pub fn path_mut(&mut self, index: usize) -> Option<&mut PathInfo> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `ipv4_udp` is never used
[INFO] [stderr]   --> src/mtu.rs:99:12
[INFO] [stderr]    |
[INFO] [stderr] 97 | impl MtuConfig {
[INFO] [stderr]    | -------------- associated function in this implementation
[INFO] [stderr] 98 |     /// Config for a connection running over IPv4/UDP.
[INFO] [stderr] 99 |     pub fn ipv4_udp() -> Self {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `measured_at` is never read
[INFO] [stderr]    --> src/mtu.rs:130:9
[INFO] [stderr]     |
[INFO] [stderr] 124 | pub struct PathMtu {
[INFO] [stderr]     |            ------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 130 |     pub measured_at: Instant,
[INFO] [stderr]     |         ^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `PathMtu` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `is_stale` is never used
[INFO] [stderr]    --> src/mtu.rs:147:12
[INFO] [stderr]     |
[INFO] [stderr] 135 | impl PathMtu {
[INFO] [stderr]     | ------------ method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 147 |     pub fn is_stale(&self, max_age: Duration) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `successful_probes` is never used
[INFO] [stderr]    --> src/mtu.rs:361:12
[INFO] [stderr]     |
[INFO] [stderr] 188 | impl MtuNegotiator {
[INFO] [stderr]     | ------------------ method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 361 |     pub fn successful_probes(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variants `DataCenter` and `Disabled` are never constructed
[INFO] [stderr]   --> src/keepalive.rs:56:5
[INFO] [stderr]    |
[INFO] [stderr] 44 | pub enum KeepalivePreset {
[INFO] [stderr]    |          --------------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 56 |     DataCenter,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] 57 |     /// Disabled — no automatic keepalive.
[INFO] [stderr] 58 |     Disabled,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `KeepalivePreset` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `aggressive` is never used
[INFO] [stderr]    --> src/keepalive.rs:123:12
[INFO] [stderr]     |
[INFO] [stderr]  76 | impl KeepaliveConfig {
[INFO] [stderr]     | -------------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 123 |     pub fn aggressive() -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `stable_threshold` is never read
[INFO] [stderr]   --> src/reconnect.rs:70:9
[INFO] [stderr]    |
[INFO] [stderr] 55 | pub struct ReconnectConfig {
[INFO] [stderr]    |            --------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 70 |     pub stable_threshold: Duration,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ReconnectConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `check_stability` is never used
[INFO] [stderr]    --> src/reconnect.rs:325:12
[INFO] [stderr]     |
[INFO] [stderr] 160 | impl ReconnectManager {
[INFO] [stderr]     | --------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 325 |     pub fn check_stability(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `raw` is never read
[INFO] [stderr]   --> src/dns.rs:98:9
[INFO] [stderr]    |
[INFO] [stderr] 88 | pub struct DnsPacket {
[INFO] [stderr]    |            --------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 98 |     pub raw: Vec<u8>,
[INFO] [stderr]    |         ^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DnsPacket` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `config` is never used
[INFO] [stderr]    --> src/dns.rs:468:12
[INFO] [stderr]     |
[INFO] [stderr] 297 | impl DnsFilter {
[INFO] [stderr]     | -------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 468 |     pub fn config(&self) -> &DnsConfig {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `max_packet_size` is never read
[INFO] [stderr]   --> src/obfuscation.rs:66:9
[INFO] [stderr]    |
[INFO] [stderr] 62 | pub struct ObfuscationConfig {
[INFO] [stderr]    |            ----------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 66 |     pub max_packet_size: usize,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ObfuscationConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `mode` is never used
[INFO] [stderr]    --> src/obfuscation.rs:458:12
[INFO] [stderr]     |
[INFO] [stderr] 153 | impl Obfuscator {
[INFO] [stderr]     | --------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 458 |     pub fn mode(&self) -> &ObfuscationMode {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `keepalive_rtt` and `obfuscation_overhead` are never read
[INFO] [stderr]    --> src/tunnel.rs:183:9
[INFO] [stderr]     |
[INFO] [stderr] 173 | pub struct TunnelStats {
[INFO] [stderr]     |            ----------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 183 |     pub keepalive_rtt: Option<Duration>,
[INFO] [stderr]     |         ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 191 |     pub obfuscation_overhead: f64,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `TunnelStats` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/tunnel.rs:321:12
[INFO] [stderr]     |
[INFO] [stderr] 215 | impl VCLTunnel {
[INFO] [stderr]     | -------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 321 |     pub fn check_keepalive(&mut self) -> KeepaliveAction {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 326 |     pub fn keepalive_sent(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 331 |     pub fn keepalive_pong_received(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 339 |     pub fn record_activity(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 346 |     pub fn should_reconnect(&mut self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 371 |     pub fn time_until_reconnect(&self) -> Duration {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 419 |     pub fn add_split_domain(&mut self, domain: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 444 |     pub fn record_retransmit(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `update_from_tunnel_stats` and `registry` are never used
[INFO] [stderr]    --> src/prometheus_metrics.rs:266:12
[INFO] [stderr]     |
[INFO] [stderr]  74 | impl VCLPrometheusExporter {
[INFO] [stderr]     | -------------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 266 |     pub fn update_from_tunnel_stats(&self, stats: &TunnelStats) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 300 |     pub fn registry(&self) -> &Registry {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `vcl-protocol` (lib test) generated 4 warnings (3 duplicates) (run `cargo fix --lib -p vcl-protocol --tests` to apply 1 suggestion)
[INFO] [stderr] warning: `vcl-protocol` (bin "vcl-protocol" test) generated 35 warnings (7 duplicates)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.29s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/vcl_protocol-4690f369e39b7564)
[INFO] [stdout] 
[INFO] [stdout] running 308 tests
[INFO] [stdout] test connection::tests::test_bind_default_config ... ok
[INFO] [stdout] test config::tests::test_needs_fragmentation ... ok
[INFO] [stdout] test connection::tests::test_bind_with_vpn_config ... ok
[INFO] [stdout] test config::tests::test_auto_preset ... ok
[INFO] [stdout] test crypto::tests::test_keypair_generate ... ok
[INFO] [stdout] test config::tests::test_gaming_preset ... ok
[INFO] [stdout] test config::tests::test_vpn_preset ... ok
[INFO] [stdout] test dns::tests::test_dns_config_default ... ok
[INFO] [stdout] test dns::tests::test_dns_config_quad9 ... ok
[INFO] [stdout] test config::tests::test_default_is_auto ... ok
[INFO] [stdout] test config::tests::test_streaming_preset ... ok
[INFO] [stdout] test dns::tests::test_dns_config_google ... ok
[INFO] [stdout] test connection::tests::test_ack_packet ... ok
[INFO] [stdout] test config::tests::test_custom_config ... ok
[INFO] [stdout] test dns::tests::test_dns_config_with_split ... ok
[INFO] [stdout] test dns::tests::test_filter_block_subdomain ... ok
[INFO] [stdout] test connection::tests::test_close_resets_flow ... ok
[INFO] [stdout] test dns::tests::test_filter_forward ... ok
[INFO] [stdout] test dns::tests::test_filter_split_dns ... ok
[INFO] [stdout] test dns::tests::test_dns_packet_parse_too_short ... ok
[INFO] [stdout] test dns::tests::test_dns_packet_parse ... ok
[INFO] [stdout] test dns::tests::test_filter_block_runtime ... ok
[INFO] [stdout] test dns::tests::test_filter_split_runtime ... ok
[INFO] [stdout] test dns::tests::test_is_dns_packet_valid ... ok
[INFO] [stdout] test dns::tests::test_filter_block ... ok
[INFO] [stdout] test connection::tests::test_flow_initial_state ... ok
[INFO] [stdout] test crypto::tests::test_encrypt_decrypt ... ok
[INFO] [stdout] test dns::tests::test_is_blocked_exact ... ok
[INFO] [stdout] test dns::tests::test_is_blocked_subdomain ... ok
[INFO] [stdout] test dns::tests::test_is_dns_packet_too_short ... ok
[INFO] [stdout] test crypto::tests::test_decrypt_wrong_key_fails ... ok
[INFO] [stdout] test crypto::tests::test_hash_data ... ok
[INFO] [stdout] test dns::tests::test_primary_upstream ... ok
[INFO] [stdout] test dns::tests::test_query_type_to_u16 ... ok
[INFO] [stdout] test flow::tests::test_default ... ok
[INFO] [stdout] test flow::tests::test_loss_rate_zero ... ok
[INFO] [stdout] test dns::tests::test_stats ... ok
[INFO] [stdout] test flow::tests::test_effective_window_bounded_by_cwnd_and_max ... ok
[INFO] [stdout] test flow::tests::test_new ... ok
[INFO] [stdout] test flow::tests::test_on_send_full_window_returns_false ... ok
[INFO] [stdout] test flow::tests::test_reset ... ok
[INFO] [stdout] test dns::tests::test_filter_cache_hit ... ok
[INFO] [stdout] test flow::tests::test_oldest_unacked_sequence ... ok
[INFO] [stdout] test dns::tests::test_filter_cache_size ... ok
[INFO] [stdout] test dns::tests::test_filter_clear_cache ... ok
[INFO] [stdout] test dns::tests::test_evict_expired ... ok
[INFO] [stdout] test flow::tests::test_stats ... ok
[INFO] [stdout] test flow::tests::test_srtt_updated_on_ack ... ok
[INFO] [stdout] test flow::tests::test_slow_start_exits_at_ssthresh ... ok
[INFO] [stdout] test fragment::tests::test_cleanup ... ok
[INFO] [stdout] test flow::tests::test_set_window_size ... ok
[INFO] [stdout] test flow::tests::test_multiple_acks_grow_cwnd ... ok
[INFO] [stdout] test dns::tests::test_query_type_from_u16 ... ok
[INFO] [stdout] test fragment::tests::test_multiple_messages ... ok
[INFO] [stdout] test flow::tests::test_ack_unknown_sequence ... ok
[INFO] [stdout] test fragment::tests::test_reassemble_in_order ... ok
[INFO] [stdout] test fragment::tests::test_no_fragmentation_needed ... ok
[INFO] [stdout] test flow::tests::test_window_full ... ok
[INFO] [stdout] test dns::tests::test_is_split_dns ... ok
[INFO] [stdout] test fragment::tests::test_duplicate_fragment_ignored ... ok
[INFO] [stdout] test fragment::tests::test_fragmentation_needed ... ok
[INFO] [stdout] test flow::tests::test_ack_opens_window_and_grows_cwnd ... ok
[INFO] [stdout] test fragment::tests::test_reassemble_out_of_order ... ok
[INFO] [stdout] test fragment::tests::test_reassemble_single ... ok
[INFO] [stdout] test ip_packet::tests::test_is_not_dns_for_tcp ... ok
[INFO] [stdout] test ip_packet::tests::test_ip_payload ... ok
[INFO] [stdout] test fragment::tests::test_split_exact ... ok
[INFO] [stdout] test ip_packet::tests::test_is_destined_for ... ok
[INFO] [stdout] test ip_packet::tests::test_is_not_ping_for_udp ... ok
[INFO] [stdout] test flow::tests::test_is_acked ... ok
[INFO] [stdout] test ip_packet::tests::test_other_protocol ... ok
[INFO] [stdout] test fragment::tests::test_split_remainder ... ok
[INFO] [stdout] test ip_packet::tests::test_parse_empty ... ok
[INFO] [stdout] test ip_packet::tests::test_is_from ... ok
[INFO] [stdout] test fragment::tests::test_single_fragment ... ok
[INFO] [stdout] test ip_packet::tests::test_parse_tcp ... ok
[INFO] [stdout] test ip_packet::tests::test_summary_udp ... ok
[INFO] [stdout] test flow::tests::test_aimd_multiplicative_decrease_on_loss ... ok
[INFO] [stdout] test flow::tests::test_rto_doubles_on_loss ... ok
[INFO] [stdout] test ip_packet::tests::test_tcp_flags ... ok
[INFO] [stdout] test keepalive::tests::test_check_disabled ... ok
[INFO] [stdout] test flow::tests::test_timed_out_packets_returns_retransmit_requests ... ok
[INFO] [stdout] test keepalive::tests::test_config_default_is_home ... ok
[INFO] [stdout] test keepalive::tests::test_config_from_preset_mobile ... ok
[INFO] [stdout] test ip_packet::tests::test_parse_unknown_version ... ok
[INFO] [stdout] test keepalive::tests::test_config_home ... ok
[INFO] [stdout] test ip_packet::tests::test_summary_tcp ... ok
[INFO] [stdout] test keepalive::tests::test_config_corporate ... ok
[INFO] [stdout] test keepalive::tests::test_config_mobile ... ok
[INFO] [stdout] test keepalive::tests::test_is_dead ... ok
[INFO] [stdout] test keepalive::tests::test_current_interval_default ... ok
[INFO] [stdout] test keepalive::tests::test_from_preset ... ok
[INFO] [stdout] test keepalive::tests::test_manager_new ... ok
[INFO] [stdout] test keepalive::tests::test_config_disabled ... ok
[INFO] [stdout] test ip_packet::tests::test_parse_icmp_ping ... ok
[INFO] [stdout] test ip_packet::tests::test_parse_udp_dns ... ok
[INFO] [stdout] test metrics::tests::test_cwnd_samples ... ok
[INFO] [stdout] test fragment::tests::test_large_payload ... ok
[INFO] [stdout] test metrics::tests::test_default ... ok
[INFO] [stdout] test keepalive::tests::test_record_activity_resets_wait ... ok
[INFO] [stdout] test metrics::tests::test_fragments ... ok
[INFO] [stdout] test keepalive::tests::test_record_keepalive_sent ... ok
[INFO] [stdout] test keepalive::tests::test_record_pong_received ... ok
[INFO] [stdout] test keepalive::tests::test_reset_misses ... ok
[INFO] [stdout] test metrics::tests::test_merge ... ok
[INFO] [stdout] test metrics::tests::test_reset ... ok
[INFO] [stdout] test keepalive::tests::test_check_send_ping ... ok
[INFO] [stdout] test metrics::tests::test_rtt_samples ... ok
[INFO] [stdout] test metrics::tests::test_new ... ok
[INFO] [stdout] test metrics::tests::test_record_sent_received ... ok
[INFO] [stdout] test metrics::tests::test_rtt_window_capped_at_64 ... ok
[INFO] [stdout] test metrics::tests::test_throughput_zero_elapsed ... ok
[INFO] [stdout] test keepalive::tests::test_should_not_send_while_waiting ... ok
[INFO] [stdout] test metrics::tests::test_total_dropped ... ok
[INFO] [stdout] test keepalive::tests::test_should_send_keepalive_initially ... ok
[INFO] [stdout] test metrics::tests::test_loss_rate ... ok
[INFO] [stdout] test metrics::tests::test_handshake_and_rotation ... ok
[INFO] [stdout] test mtu::tests::test_extra_overhead ... ok
[INFO] [stdout] test mtu::tests::test_ipv6_config ... ok
[INFO] [stdout] test mtu::tests::test_path_mtu ... ok
[INFO] [stdout] test mtu::tests::test_probe_history ... ok
[INFO] [stdout] test mtu::tests::test_recommended_fragment_size ... ok
[INFO] [stdout] test mtu::tests::test_record_probe_failure ... ok
[INFO] [stdout] test mtu::tests::test_record_probe_success ... ok
[INFO] [stdout] test mtu::tests::test_set_mtu ... ok
[INFO] [stdout] test mtu::tests::test_set_mtu_clamped ... ok
[INFO] [stdout] test mtu::tests::test_start_discovery ... ok
[INFO] [stdout] test mtu::tests::test_total_probes_counted ... ok
[INFO] [stdout] test mtu::tests::test_wireguard_config ... ok
[INFO] [stdout] test multipath::tests::test_path_info_new ... ok
[INFO] [stdout] test multipath::tests::test_path_loss_rate ... ok
[INFO] [stdout] test multipath::tests::test_path_record_sent ... ok
[INFO] [stdout] test mtu::tests::test_check_probe_timeout_no_pending ... ok
[INFO] [stdout] test multipath::tests::test_path_score ... ok
[INFO] [stdout] test multipath::tests::test_path_score_inactive ... ok
[INFO] [stdout] test multipath::tests::test_path_update_srtt ... ok
[INFO] [stdout] test multipath::tests::test_receiver_buffer_full ... ok
[INFO] [stdout] test multipath::tests::test_receiver_clear ... ok
[INFO] [stdout] test multipath::tests::test_receiver_default ... ok
[INFO] [stdout] test multipath::tests::test_receiver_drain_multiple ... ok
[INFO] [stdout] test multipath::tests::test_receiver_duplicate ... ok
[INFO] [stdout] test multipath::tests::test_receiver_in_order ... ok
[INFO] [stdout] test keepalive::tests::test_check_pong_timeout ... ok
[INFO] [stdout] test multipath::tests::test_receiver_stats ... ok
[INFO] [stdout] test multipath::tests::test_receiver_out_of_order ... ok
[INFO] [stdout] test mtu::tests::test_check_probe_timeout_not_yet ... ok
[INFO] [stdout] test mtu::tests::test_mtu_smaller_than_overhead ... ok
[INFO] [stdout] test dns::tests::test_dns_config_with_blocked ... ok
[INFO] [stdout] test mtu::tests::test_fragment_size_for_mtu_fn ... ok
[INFO] [stdout] test mtu::tests::test_negotiator_new ... ok
[INFO] [stdout] test multipath::tests::test_sender_activate_path ... ok
[INFO] [stdout] test mtu::tests::test_full_discovery_converges ... ok
[INFO] [stdout] test mtu::tests::test_default_config ... ok
[INFO] [stdout] test mtu::tests::test_fallback_to_min ... ok
[INFO] [stdout] test multipath::tests::test_sender_best_path ... ok
[INFO] [stdout] test multipath::tests::test_sender_lowest_latency ... ok
[INFO] [stdout] test keepalive::tests::test_srtt_updated_after_pong ... ok
[INFO] [stdout] test keepalive::tests::test_adaptive_interval_adjusts ... ok
[INFO] [stdout] test multipath::tests::test_sender_total_scheduled ... ok
[INFO] [stdout] test multipath::tests::test_sender_weighted_round_robin ... ok
[INFO] [stdout] test multipath::tests::test_sender_no_active_paths ... ok
[INFO] [stdout] test multipath::tests::test_sender_round_robin ... ok
[INFO] [stdout] test multipath::tests::test_sender_record_loss ... ok
[INFO] [stdout] test multipath::tests::test_sender_update_rtt ... ok
[INFO] [stdout] test obfuscation::tests::test_http2_mimicry_looks_like_http2 ... ok
[INFO] [stdout] test obfuscation::tests::test_jitter_within_range ... ok
[INFO] [stdout] test obfuscation::tests::test_multiple_packets_different_jitter ... ok
[INFO] [stdout] test obfuscation::tests::test_http2_invalid_type ... ok
[INFO] [stdout] test multipath::tests::test_sender_redundant_all_paths ... ok
[INFO] [stdout] test obfuscation::tests::test_none_roundtrip ... ok
[INFO] [stdout] test obfuscation::tests::test_full_large ... ok
[INFO] [stdout] test flow::tests::test_total_retransmits ... ok
[INFO] [stdout] test multipath::tests::test_sender_deactivate_path ... ok
[INFO] [stdout] test obfuscation::tests::test_http2_mimicry_large ... ok
[INFO] [stdout] test obfuscation::tests::test_recommended_mode_corporate ... ok
[INFO] [stdout] test obfuscation::tests::test_recommended_mode_home ... ok
[INFO] [stdout] test obfuscation::tests::test_http2_mimicry_roundtrip ... ok
[INFO] [stdout] test obfuscation::tests::test_overhead_ratio ... ok
[INFO] [stdout] test obfuscation::tests::test_jitter_zero_when_disabled ... ok
[INFO] [stdout] test obfuscation::tests::test_full_roundtrip ... ok
[INFO] [stdout] test obfuscation::tests::test_overhead_ratio_none_mode ... ok
[INFO] [stdout] test multipath::tests::test_sender_set_policy ... ok
[INFO] [stdout] test obfuscation::tests::test_padding_roundtrip ... ok
[INFO] [stdout] test obfuscation::tests::test_deobfuscate_empty ... ok
[INFO] [stdout] test obfuscation::tests::test_padding_empty ... ok
[INFO] [stdout] test metrics::tests::test_uptime ... ok
[INFO] [stdout] test keepalive::tests::test_connection_dead_after_max_missed ... ok
[INFO] [stdout] test obfuscation::tests::test_recommended_mode_mobile ... ok
[INFO] [stdout] test obfuscation::tests::test_size_normalization_roundtrip ... ok
[INFO] [stdout] test obfuscation::tests::test_stats_tracking ... ok
[INFO] [stdout] test obfuscation::tests::test_xor_key_zero_no_scramble ... ok
[INFO] [stdout] test obfuscation::tests::test_tls_invalid_header ... ok
[INFO] [stdout] test packet::tests::test_compute_hash ... ok
[INFO] [stdout] test packet::tests::test_packet_new ... ok
[INFO] [stdout] test packet::tests::test_packet_types ... ok
[INFO] [stdout] test packet::tests::test_serialize_deserialize ... ok
[INFO] [stdout] test obfuscation::tests::test_recommended_mode_unknown ... ok
[INFO] [stdout] test obfuscation::tests::test_tls_mimicry_looks_like_tls ... ok
[INFO] [stdout] test obfuscation::tests::test_tls_mimicry_empty ... ok
[INFO] [stdout] test obfuscation::tests::test_tls_mimicry_large ... ok
[INFO] [stdout] test packet::tests::test_validate_chain ... ok
[INFO] [stdout] test obfuscation::tests::test_size_normalization_output_size ... ok
[INFO] [stdout] test pool::tests::test_pool_bind ... ok
[INFO] [stdout] test pool::tests::test_pool_close ... ok
[INFO] [stdout] test pool::tests::test_pool_connection_ids ... ok
[INFO] [stdout] test pool::tests::test_pool_max_capacity ... ok
[INFO] [stdout] test pool::tests::test_pool_new ... ok
[INFO] [stdout] test pool::tests::test_pool_unknown_id ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_cwnd_gauge ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_fragment_metrics ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_render_is_valid_utf8 ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_handshake_counter ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_key_rotation_counter ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_multiple_exporters_independent ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_new ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_tunnel_state_connected ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_bytes_received ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_dns_metrics ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_obfuscation_overhead ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_reconnect_counter ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_set_rtt ... ok
[INFO] [stdout] test pool::tests::test_pool_close_all ... ok
[INFO] [stdout] test reconnect::tests::test_backoff_capped_at_max ... ok
[INFO] [stdout] test reconnect::tests::test_check_stability_resets_counter ... ok
[INFO] [stdout] test obfuscation::tests::test_tls_mimicry_roundtrip ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_render_contains_metric_names ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_set_loss_rate ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_set_mtu ... ok
[INFO] [stdout] test reconnect::tests::test_new ... ok
[INFO] [stdout] test reconnect::tests::test_no_reconnect_when_connected ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_bytes_sent ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_set_connections_active ... ok
[INFO] [stdout] test reconnect::tests::test_mobile_preset ... ok
[INFO] [stdout] test reconnect::tests::test_on_disconnect ... ok
[INFO] [stdout] test reconnect::tests::test_on_failure_increases_backoff ... ok
[INFO] [stdout] test reconnect::tests::test_time_until_reconnect ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_retransmit ... ok
[INFO] [stdout] test reconnect::tests::test_max_attempts_gives_up ... ok
[INFO] [stdout] test reconnect::tests::test_no_reconnect_when_gave_up ... ok
[INFO] [stdout] test reconnect::tests::test_should_not_reconnect_before_backoff ... ok
[INFO] [stdout] test reconnect::tests::test_stable_preset ... ok
[INFO] [stdout] test transport::tests::test_set_peer_addr ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_dropped ... ok
[INFO] [stdout] test reconnect::tests::test_no_reconnect_when_reconnecting ... ok
[INFO] [stdout] test reconnect::tests::test_on_connect_resets_backoff ... ok
[INFO] [stdout] test transport::tests::test_from_config_tcp ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_packets ... ok
[INFO] [stdout] test transport::tests::test_from_config_udp ... ok
[INFO] [stdout] test transport::tests::test_mode ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_from_metrics ... ok
[INFO] [stdout] test transport::tests::test_tcp_multiple_messages ... ok
[INFO] [stdout] test transport::tests::test_tcp_bind ... ok
[INFO] [stdout] test transport::tests::test_udp_send_recv ... ok
[INFO] [stdout] test transport::tests::test_ws_bind ... ok
[INFO] [stdout] test tun_device::tests::test_is_ipv4 ... ok
[INFO] [stdout] test transport::tests::test_ws_send_recv ... ok
[INFO] [stdout] test tun_device::tests::test_ip_packet_len ... ok
[INFO] [stdout] test transport::tests::test_tcp_send_recv ... ok
[INFO] [stdout] test transport::tests::test_udp_bind ... ok
[INFO] [stdout] test tun_device::tests::test_tun_create_non_linux ... ok
[INFO] [stdout] test tunnel::tests::test_all_three_presets_create_ok ... ok
[INFO] [stdout] test tun_device::tests::test_is_ipv6 ... ok
[INFO] [stdout] test tun_device::tests::test_parse_unknown_version ... ok
[INFO] [stdout] test tun_device::tests::test_parse_empty_packet ... ok
[INFO] [stdout] test tun_device::tests::test_parse_ipv4_packet ... ok
[INFO] [stdout] test tun_device::tests::test_parse_ipv6_packet ... ok
[INFO] [stdout] test tunnel::tests::test_config_with_dns ... ok
[INFO] [stdout] test tunnel::tests::test_config_block_domain ... ok
[INFO] [stdout] test tunnel::tests::test_auto_config_home ... ok
[INFO] [stdout] test tunnel::tests::test_config_ref ... ok
[INFO] [stdout] test tun_device::tests::test_tun_config_default ... ok
[INFO] [stdout] test tunnel::tests::test_config_split_domain ... ok
[INFO] [stdout] test tunnel::tests::test_dns_cache ... ok
[INFO] [stdout] test tunnel::tests::test_auto_config_mobile ... ok
[INFO] [stdout] test tunnel::tests::test_corporate_config ... ok
[INFO] [stdout] test tunnel::tests::test_dns_block_from_config ... ok
[INFO] [stdout] test tunnel::tests::test_deobfuscate_records_metrics ... ok
[INFO] [stdout] test tunnel::tests::test_dns_forward ... ok
[INFO] [stdout] test tunnel::tests::test_is_dns_packet ... ok
[INFO] [stdout] test tunnel::tests::test_dns_block_runtime ... ok
[INFO] [stdout] test tunnel::tests::test_home_config ... ok
[INFO] [stdout] test tunnel::tests::test_mtu_initial ... ok
[INFO] [stdout] test tunnel::tests::test_initial_state ... ok
[INFO] [stdout] test tunnel::tests::test_obfuscate_deobfuscate ... ok
[INFO] [stdout] test tunnel::tests::test_jitter_ms ... ok
[INFO] [stdout] test tunnel::tests::test_dns_split_from_config ... ok
[INFO] [stdout] test tunnel::tests::test_on_connecting ... ok
[INFO] [stdout] test tunnel::tests::test_giving_up_after_max_attempts ... ok
[INFO] [stdout] test tunnel::tests::test_on_disconnected ... ok
[INFO] [stdout] test tunnel::tests::test_reconnect_count_increments ... ok
[INFO] [stdout] test tunnel::tests::test_on_failed ... ok
[INFO] [stdout] test tunnel::tests::test_obfuscate_records_metrics ... ok
[INFO] [stdout] test tunnel::tests::test_set_mtu ... ok
[INFO] [stdout] test tunnel::tests::test_on_connected ... ok
[INFO] [stdout] test tunnel::tests::test_stats_after_traffic ... ok
[INFO] [stdout] test tunnel::tests::test_stats_dns_counts ... ok
[INFO] [stdout] test tun_device::tests::test_ip_version ... ok
[INFO] [stdout] test tunnel::tests::test_stop ... ok
[INFO] [stdout] test tunnel::tests::test_reconnect_after_disconnect ... ok
[INFO] [stdout] test tunnel::tests::test_mobile_config ... ok
[INFO] [stdout] test tunnel::tests::test_stats_initial ... ok
[INFO] [stdout] test reconnect::tests::test_time_until_reconnect_zero_when_ready ... ok
[INFO] [stdout] test reconnect::tests::test_total_downtime_accumulated ... ok
[INFO] [stdout] test reconnect::tests::test_should_reconnect_after_backoff ... ok
[INFO] [stdout] test packet::tests::test_verify_wrong_key_fails ... ok
[INFO] [stdout] test packet::tests::test_sign_verify ... ok
[INFO] [stdout] test transport::tests::test_ws_multiple_messages ... ok
[INFO] [stdout] test reconnect::tests::test_multiple_reconnect_cycles ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 308 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/vcl_protocol-691a05b125eb1216)
[INFO] [stdout] 
[INFO] [stdout] running 308 tests
[INFO] [stdout] test config::tests::test_custom_config ... ok
[INFO] [stdout] test config::tests::test_gaming_preset ... ok
[INFO] [stdout] test config::tests::test_default_is_auto ... ok
[INFO] [stdout] test config::tests::test_auto_preset ... ok
[INFO] [stdout] test config::tests::test_streaming_preset ... ok
[INFO] [stdout] test config::tests::test_vpn_preset ... ok
[INFO] [stdout] test crypto::tests::test_encrypt_decrypt ... ok
[INFO] [stdout] test dns::tests::test_dns_config_default ... ok
[INFO] [stdout] test dns::tests::test_dns_config_quad9 ... ok
[INFO] [stdout] test dns::tests::test_dns_config_google ... ok
[INFO] [stdout] test dns::tests::test_dns_config_with_split ... ok
[INFO] [stdout] test connection::tests::test_bind_with_vpn_config ... ok
[INFO] [stdout] test dns::tests::test_dns_packet_parse ... ok
[INFO] [stdout] test config::tests::test_needs_fragmentation ... ok
[INFO] [stdout] test crypto::tests::test_decrypt_wrong_key_fails ... ok
[INFO] [stdout] test crypto::tests::test_hash_data ... ok
[INFO] [stdout] test dns::tests::test_filter_block_subdomain ... ok
[INFO] [stdout] test dns::tests::test_filter_forward ... ok
[INFO] [stdout] test dns::tests::test_filter_split_dns ... ok
[INFO] [stdout] test connection::tests::test_ack_packet ... ok
[INFO] [stdout] test dns::tests::test_dns_packet_parse_too_short ... ok
[INFO] [stdout] test dns::tests::test_filter_block ... ok
[INFO] [stdout] test crypto::tests::test_keypair_generate ... ok
[INFO] [stdout] test dns::tests::test_filter_block_runtime ... ok
[INFO] [stdout] test dns::tests::test_filter_cache_hit ... ok
[INFO] [stdout] test dns::tests::test_filter_cache_size ... ok
[INFO] [stdout] test dns::tests::test_filter_clear_cache ... ok
[INFO] [stdout] test dns::tests::test_filter_split_runtime ... ok
[INFO] [stdout] test connection::tests::test_bind_default_config ... ok
[INFO] [stdout] test dns::tests::test_dns_config_with_blocked ... ok
[INFO] [stdout] test dns::tests::test_is_blocked_exact ... ok
[INFO] [stdout] test dns::tests::test_is_blocked_subdomain ... ok
[INFO] [stdout] test dns::tests::test_is_dns_packet_too_short ... ok
[INFO] [stdout] test dns::tests::test_is_dns_packet_valid ... ok
[INFO] [stdout] test dns::tests::test_query_type_from_u16 ... ok
[INFO] [stdout] test flow::tests::test_default ... ok
[INFO] [stdout] test dns::tests::test_stats ... ok
[INFO] [stdout] test flow::tests::test_is_acked ... ok
[INFO] [stdout] test flow::tests::test_ack_opens_window_and_grows_cwnd ... ok
[INFO] [stdout] test flow::tests::test_loss_rate_zero ... ok
[INFO] [stdout] test flow::tests::test_multiple_acks_grow_cwnd ... ok
[INFO] [stdout] test flow::tests::test_on_send_full_window_returns_false ... ok
[INFO] [stdout] test flow::tests::test_reset ... ok
[INFO] [stdout] test connection::tests::test_flow_initial_state ... ok
[INFO] [stdout] test flow::tests::test_set_window_size ... ok
[INFO] [stdout] test flow::tests::test_slow_start_exits_at_ssthresh ... ok
[INFO] [stdout] test flow::tests::test_srtt_updated_on_ack ... ok
[INFO] [stdout] test flow::tests::test_stats ... ok
[INFO] [stdout] test flow::tests::test_window_full ... ok
[INFO] [stdout] test fragment::tests::test_cleanup ... ok
[INFO] [stdout] test fragment::tests::test_duplicate_fragment_ignored ... ok
[INFO] [stdout] test fragment::tests::test_fragmentation_needed ... ok
[INFO] [stdout] test fragment::tests::test_multiple_messages ... ok
[INFO] [stdout] test fragment::tests::test_no_fragmentation_needed ... ok
[INFO] [stdout] test flow::tests::test_new ... ok
[INFO] [stdout] test dns::tests::test_is_split_dns ... ok
[INFO] [stdout] test flow::tests::test_oldest_unacked_sequence ... ok
[INFO] [stdout] test dns::tests::test_primary_upstream ... ok
[INFO] [stdout] test dns::tests::test_query_type_to_u16 ... ok
[INFO] [stdout] test flow::tests::test_ack_unknown_sequence ... ok
[INFO] [stdout] test flow::tests::test_effective_window_bounded_by_cwnd_and_max ... ok
[INFO] [stdout] test fragment::tests::test_reassemble_in_order ... ok
[INFO] [stdout] test fragment::tests::test_reassemble_out_of_order ... ok
[INFO] [stdout] test fragment::tests::test_split_exact ... ok
[INFO] [stdout] test ip_packet::tests::test_other_protocol ... ok
[INFO] [stdout] test dns::tests::test_evict_expired ... ok
[INFO] [stdout] test fragment::tests::test_reassemble_single ... ok
[INFO] [stdout] test ip_packet::tests::test_ip_payload ... ok
[INFO] [stdout] test fragment::tests::test_single_fragment ... ok
[INFO] [stdout] test fragment::tests::test_split_remainder ... ok
[INFO] [stdout] test connection::tests::test_close_resets_flow ... ok
[INFO] [stdout] test ip_packet::tests::test_parse_empty ... ok
[INFO] [stdout] test flow::tests::test_aimd_multiplicative_decrease_on_loss ... ok
[INFO] [stdout] test ip_packet::tests::test_is_not_dns_for_tcp ... ok
[INFO] [stdout] test ip_packet::tests::test_summary_tcp ... ok
[INFO] [stdout] test ip_packet::tests::test_is_destined_for ... ok
[INFO] [stdout] test keepalive::tests::test_check_disabled ... ok
[INFO] [stdout] test ip_packet::tests::test_summary_udp ... ok
[INFO] [stdout] test flow::tests::test_rto_doubles_on_loss ... ok
[INFO] [stdout] test keepalive::tests::test_config_disabled ... ok
[INFO] [stdout] test flow::tests::test_timed_out_packets_returns_retransmit_requests ... ok
[INFO] [stdout] test ip_packet::tests::test_tcp_flags ... ok
[INFO] [stdout] test keepalive::tests::test_config_home ... ok
[INFO] [stdout] test keepalive::tests::test_config_mobile ... ok
[INFO] [stdout] test keepalive::tests::test_current_interval_default ... ok
[INFO] [stdout] test ip_packet::tests::test_parse_udp_dns ... ok
[INFO] [stdout] test keepalive::tests::test_from_preset ... ok
[INFO] [stdout] test keepalive::tests::test_is_dead ... ok
[INFO] [stdout] test ip_packet::tests::test_is_from ... ok
[INFO] [stdout] test keepalive::tests::test_manager_new ... ok
[INFO] [stdout] test keepalive::tests::test_record_activity_resets_wait ... ok
[INFO] [stdout] test keepalive::tests::test_config_from_preset_mobile ... ok
[INFO] [stdout] test keepalive::tests::test_record_keepalive_sent ... ok
[INFO] [stdout] test ip_packet::tests::test_parse_icmp_ping ... ok
[INFO] [stdout] test ip_packet::tests::test_parse_unknown_version ... ok
[INFO] [stdout] test ip_packet::tests::test_is_not_ping_for_udp ... ok
[INFO] [stdout] test keepalive::tests::test_record_pong_received ... ok
[INFO] [stdout] test ip_packet::tests::test_parse_tcp ... ok
[INFO] [stdout] test keepalive::tests::test_config_corporate ... ok
[INFO] [stdout] test fragment::tests::test_large_payload ... ok
[INFO] [stdout] test metrics::tests::test_handshake_and_rotation ... ok
[INFO] [stdout] test metrics::tests::test_loss_rate ... ok
[INFO] [stdout] test keepalive::tests::test_reset_misses ... ok
[INFO] [stdout] test metrics::tests::test_merge ... ok
[INFO] [stdout] test metrics::tests::test_fragments ... ok
[INFO] [stdout] test metrics::tests::test_default ... ok
[INFO] [stdout] test metrics::tests::test_cwnd_samples ... ok
[INFO] [stdout] test keepalive::tests::test_config_default_is_home ... ok
[INFO] [stdout] test keepalive::tests::test_adaptive_interval_adjusts ... ok
[INFO] [stdout] test metrics::tests::test_record_sent_received ... ok
[INFO] [stdout] test metrics::tests::test_total_dropped ... ok
[INFO] [stdout] test metrics::tests::test_new ... ok
[INFO] [stdout] test metrics::tests::test_rtt_window_capped_at_64 ... ok
[INFO] [stdout] test metrics::tests::test_rtt_samples ... ok
[INFO] [stdout] test flow::tests::test_total_retransmits ... ok
[INFO] [stdout] test metrics::tests::test_reset ... ok
[INFO] [stdout] test mtu::tests::test_check_probe_timeout_no_pending ... ok
[INFO] [stdout] test mtu::tests::test_check_probe_timeout_not_yet ... ok
[INFO] [stdout] test metrics::tests::test_throughput_zero_elapsed ... ok
[INFO] [stdout] test keepalive::tests::test_check_pong_timeout ... ok
[INFO] [stdout] test mtu::tests::test_extra_overhead ... ok
[INFO] [stdout] test mtu::tests::test_ipv6_config ... ok
[INFO] [stdout] test mtu::tests::test_default_config ... ok
[INFO] [stdout] test mtu::tests::test_record_probe_failure ... ok
[INFO] [stdout] test mtu::tests::test_record_probe_success ... ok
[INFO] [stdout] test keepalive::tests::test_srtt_updated_after_pong ... ok
[INFO] [stdout] test mtu::tests::test_fallback_to_min ... ok
[INFO] [stdout] test keepalive::tests::test_should_not_send_while_waiting ... ok
[INFO] [stdout] test mtu::tests::test_set_mtu ... ok
[INFO] [stdout] test mtu::tests::test_probe_history ... ok
[INFO] [stdout] test mtu::tests::test_recommended_fragment_size ... ok
[INFO] [stdout] test keepalive::tests::test_should_send_keepalive_initially ... ok
[INFO] [stdout] test mtu::tests::test_path_mtu ... ok
[INFO] [stdout] test mtu::tests::test_fragment_size_for_mtu_fn ... ok
[INFO] [stdout] test multipath::tests::test_path_info_new ... ok
[INFO] [stdout] test mtu::tests::test_full_discovery_converges ... ok
[INFO] [stdout] test multipath::tests::test_path_loss_rate ... ok
[INFO] [stdout] test keepalive::tests::test_check_send_ping ... ok
[INFO] [stdout] test multipath::tests::test_path_record_sent ... ok
[INFO] [stdout] test mtu::tests::test_set_mtu_clamped ... ok
[INFO] [stdout] test multipath::tests::test_receiver_buffer_full ... ok
[INFO] [stdout] test multipath::tests::test_receiver_clear ... ok
[INFO] [stdout] test multipath::tests::test_receiver_default ... ok
[INFO] [stdout] test multipath::tests::test_receiver_in_order ... ok
[INFO] [stdout] test multipath::tests::test_receiver_stats ... ok
[INFO] [stdout] test multipath::tests::test_path_update_srtt ... ok
[INFO] [stdout] test multipath::tests::test_receiver_drain_multiple ... ok
[INFO] [stdout] test multipath::tests::test_sender_activate_path ... ok
[INFO] [stdout] test multipath::tests::test_receiver_out_of_order ... ok
[INFO] [stdout] test multipath::tests::test_sender_best_path ... ok
[INFO] [stdout] test multipath::tests::test_sender_lowest_latency ... ok
[INFO] [stdout] test mtu::tests::test_start_discovery ... ok
[INFO] [stdout] test multipath::tests::test_sender_deactivate_path ... ok
[INFO] [stdout] test mtu::tests::test_total_probes_counted ... ok
[INFO] [stdout] test mtu::tests::test_wireguard_config ... ok
[INFO] [stdout] test multipath::tests::test_path_score ... ok
[INFO] [stdout] test multipath::tests::test_sender_weighted_round_robin ... ok
[INFO] [stdout] test obfuscation::tests::test_full_roundtrip ... ok
[INFO] [stdout] test multipath::tests::test_sender_redundant_all_paths ... ok
[INFO] [stdout] test multipath::tests::test_sender_update_rtt ... ok
[INFO] [stdout] test multipath::tests::test_receiver_duplicate ... ok
[INFO] [stdout] test obfuscation::tests::test_http2_invalid_type ... ok
[INFO] [stdout] test multipath::tests::test_sender_round_robin ... ok
[INFO] [stdout] test mtu::tests::test_mtu_smaller_than_overhead ... ok
[INFO] [stdout] test obfuscation::tests::test_deobfuscate_empty ... ok
[INFO] [stdout] test obfuscation::tests::test_full_large ... ok
[INFO] [stdout] test obfuscation::tests::test_jitter_within_range ... ok
[INFO] [stdout] test obfuscation::tests::test_http2_mimicry_large ... ok
[INFO] [stdout] test obfuscation::tests::test_http2_mimicry_roundtrip ... ok
[INFO] [stdout] test obfuscation::tests::test_http2_mimicry_looks_like_http2 ... ok
[INFO] [stdout] test obfuscation::tests::test_none_roundtrip ... ok
[INFO] [stdout] test multipath::tests::test_sender_total_scheduled ... ok
[INFO] [stdout] test mtu::tests::test_negotiator_new ... ok
[INFO] [stdout] test obfuscation::tests::test_jitter_zero_when_disabled ... ok
[INFO] [stdout] test obfuscation::tests::test_overhead_ratio_none_mode ... ok
[INFO] [stdout] test obfuscation::tests::test_padding_roundtrip ... ok
[INFO] [stdout] test obfuscation::tests::test_multiple_packets_different_jitter ... ok
[INFO] [stdout] test obfuscation::tests::test_recommended_mode_mobile ... ok
[INFO] [stdout] test obfuscation::tests::test_padding_empty ... ok
[INFO] [stdout] test obfuscation::tests::test_recommended_mode_home ... ok
[INFO] [stdout] test obfuscation::tests::test_recommended_mode_corporate ... ok
[INFO] [stdout] test obfuscation::tests::test_recommended_mode_unknown ... ok
[INFO] [stdout] test obfuscation::tests::test_overhead_ratio ... ok
[INFO] [stdout] test obfuscation::tests::test_tls_invalid_header ... ok
[INFO] [stdout] test multipath::tests::test_sender_no_active_paths ... ok
[INFO] [stdout] test obfuscation::tests::test_size_normalization_output_size ... ok
[INFO] [stdout] test obfuscation::tests::test_tls_mimicry_large ... ok
[INFO] [stdout] test obfuscation::tests::test_tls_mimicry_empty ... ok
[INFO] [stdout] test keepalive::tests::test_connection_dead_after_max_missed ... ok
[INFO] [stdout] test packet::tests::test_packet_new ... ok
[INFO] [stdout] test obfuscation::tests::test_tls_mimicry_roundtrip ... ok
[INFO] [stdout] test packet::tests::test_packet_types ... ok
[INFO] [stdout] test multipath::tests::test_sender_record_loss ... ok
[INFO] [stdout] test multipath::tests::test_sender_set_policy ... ok
[INFO] [stdout] test obfuscation::tests::test_xor_key_zero_no_scramble ... ok
[INFO] [stdout] test obfuscation::tests::test_tls_mimicry_looks_like_tls ... ok
[INFO] [stdout] test multipath::tests::test_path_score_inactive ... ok
[INFO] [stdout] test obfuscation::tests::test_size_normalization_roundtrip ... ok
[INFO] [stdout] test obfuscation::tests::test_stats_tracking ... ok
[INFO] [stdout] test packet::tests::test_validate_chain ... ok
[INFO] [stdout] test packet::tests::test_compute_hash ... ok
[INFO] [stdout] test packet::tests::test_serialize_deserialize ... ok
[INFO] [stdout] test pool::tests::test_pool_bind ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_handshake_counter ... ok
[INFO] [stdout] test metrics::tests::test_uptime ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_cwnd_gauge ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_key_rotation_counter ... ok
[INFO] [stdout] test pool::tests::test_pool_new ... ok
[INFO] [stdout] test pool::tests::test_pool_max_capacity ... ok
[INFO] [stdout] test pool::tests::test_pool_connection_ids ... ok
[INFO] [stdout] test pool::tests::test_pool_close ... ok
[INFO] [stdout] test pool::tests::test_pool_unknown_id ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_dns_metrics ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_fragment_metrics ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_reconnect_counter ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_render_contains_metric_names ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_new ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_multiple_exporters_independent ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_set_loss_rate ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_tunnel_state_connected ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_set_mtu ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_obfuscation_overhead ... ok
[INFO] [stdout] test pool::tests::test_pool_close_all ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_dropped ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_from_metrics ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_bytes_received ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_set_connections_active ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_bytes_sent ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_set_rtt ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_retransmit ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_render_is_valid_utf8 ... ok
[INFO] [stdout] test reconnect::tests::test_backoff_capped_at_max ... ok
[INFO] [stdout] test reconnect::tests::test_mobile_preset ... ok
[INFO] [stdout] test reconnect::tests::test_new ... ok
[INFO] [stdout] test reconnect::tests::test_no_reconnect_when_gave_up ... ok
[INFO] [stdout] test reconnect::tests::test_no_reconnect_when_reconnecting ... ok
[INFO] [stdout] test reconnect::tests::test_on_connect_resets_backoff ... ok
[INFO] [stdout] test reconnect::tests::test_should_not_reconnect_before_backoff ... ok
[INFO] [stdout] test reconnect::tests::test_stable_preset ... ok
[INFO] [stdout] test prometheus_metrics::tests::test_update_packets ... ok
[INFO] [stdout] test reconnect::tests::test_no_reconnect_when_connected ... ok
[INFO] [stdout] test reconnect::tests::test_check_stability_resets_counter ... ok
[INFO] [stdout] test packet::tests::test_sign_verify ... ok
[INFO] [stdout] test reconnect::tests::test_on_failure_increases_backoff ... ok
[INFO] [stdout] test reconnect::tests::test_on_disconnect ... ok
[INFO] [stdout] test transport::tests::test_from_config_tcp ... ok
[INFO] [stdout] test transport::tests::test_from_config_udp ... ok
[INFO] [stdout] test transport::tests::test_mode ... ok
[INFO] [stdout] test reconnect::tests::test_max_attempts_gives_up ... ok
[INFO] [stdout] test transport::tests::test_set_peer_addr ... ok
[INFO] [stdout] test transport::tests::test_tcp_bind ... ok
[INFO] [stdout] test reconnect::tests::test_time_until_reconnect ... ok
[INFO] [stdout] test reconnect::tests::test_should_reconnect_after_backoff ... ok
[INFO] [stdout] test transport::tests::test_udp_send_recv ... ok
[INFO] [stdout] test tun_device::tests::test_is_ipv4 ... ok
[INFO] [stdout] test tun_device::tests::test_parse_empty_packet ... ok
[INFO] [stdout] test transport::tests::test_udp_bind ... ok
[INFO] [stdout] test transport::tests::test_tcp_multiple_messages ... ok
[INFO] [stdout] test transport::tests::test_tcp_send_recv ... ok
[INFO] [stdout] test transport::tests::test_ws_send_recv ... ok
[INFO] [stdout] test tun_device::tests::test_parse_ipv6_packet ... ok
[INFO] [stdout] test tun_device::tests::test_ip_packet_len ... ok
[INFO] [stdout] test tun_device::tests::test_is_ipv6 ... ok
[INFO] [stdout] test tun_device::tests::test_parse_unknown_version ... ok
[INFO] [stdout] test transport::tests::test_ws_bind ... ok
[INFO] [stdout] test tun_device::tests::test_parse_ipv4_packet ... ok
[INFO] [stdout] test tun_device::tests::test_tun_create_non_linux ... ok
[INFO] [stdout] test tun_device::tests::test_ip_version ... ok
[INFO] [stdout] test tunnel::tests::test_auto_config_mobile ... ok
[INFO] [stdout] test tun_device::tests::test_tun_config_default ... ok
[INFO] [stdout] test tunnel::tests::test_auto_config_home ... ok
[INFO] [stdout] test tunnel::tests::test_all_three_presets_create_ok ... ok
[INFO] [stdout] test tunnel::tests::test_config_ref ... ok
[INFO] [stdout] test tunnel::tests::test_config_split_domain ... ok
[INFO] [stdout] test tunnel::tests::test_deobfuscate_records_metrics ... ok
[INFO] [stdout] test tunnel::tests::test_config_with_dns ... ok
[INFO] [stdout] test tunnel::tests::test_corporate_config ... ok
[INFO] [stdout] test tunnel::tests::test_dns_cache ... ok
[INFO] [stdout] test tunnel::tests::test_home_config ... ok
[INFO] [stdout] test tunnel::tests::test_jitter_ms ... ok
[INFO] [stdout] test tunnel::tests::test_dns_block_from_config ... ok
[INFO] [stdout] test tunnel::tests::test_mobile_config ... ok
[INFO] [stdout] test tunnel::tests::test_dns_block_runtime ... ok
[INFO] [stdout] test tunnel::tests::test_dns_split_from_config ... ok
[INFO] [stdout] test tunnel::tests::test_config_block_domain ... ok
[INFO] [stdout] test tunnel::tests::test_initial_state ... ok
[INFO] [stdout] test tunnel::tests::test_on_connected ... ok
[INFO] [stdout] test tunnel::tests::test_mtu_initial ... ok
[INFO] [stdout] test reconnect::tests::test_total_downtime_accumulated ... ok
[INFO] [stdout] test reconnect::tests::test_time_until_reconnect_zero_when_ready ... ok
[INFO] [stdout] test tunnel::tests::test_obfuscate_deobfuscate ... ok
[INFO] [stdout] test tunnel::tests::test_on_failed ... ok
[INFO] [stdout] test tunnel::tests::test_obfuscate_records_metrics ... ok
[INFO] [stdout] test tunnel::tests::test_reconnect_after_disconnect ... ok
[INFO] [stdout] test tunnel::tests::test_on_disconnected ... ok
[INFO] [stdout] test tunnel::tests::test_on_connecting ... ok
[INFO] [stdout] test tunnel::tests::test_set_mtu ... ok
[INFO] [stdout] test tunnel::tests::test_stats_after_traffic ... ok
[INFO] [stdout] test tunnel::tests::test_stop ... ok
[INFO] [stdout] test tunnel::tests::test_dns_forward ... ok
[INFO] [stdout] test tunnel::tests::test_giving_up_after_max_attempts ... ok
[INFO] [stdout] test tunnel::tests::test_is_dns_packet ... ok
[INFO] [stdout] test tunnel::tests::test_stats_initial ... ok
[INFO] [stdout] test tunnel::tests::test_reconnect_count_increments ... ok
[INFO] [stdout] test tunnel::tests::test_stats_dns_counts ... ok
[INFO] [stdout] test packet::tests::test_verify_wrong_key_fails ... ok
[INFO] [stdout] test reconnect::tests::test_multiple_reconnect_cycles ... ok
[INFO] [stdout] test transport::tests::test_ws_multiple_messages ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 308 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/integration_test.rs (/opt/rustwide/target/debug/deps/integration_test-c3d496fc25f2ab43)
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test test_timeout_getters ... ok
[INFO] [stdout] test test_close ... ok
[INFO] [stdout] test test_send_after_close ... ok
[INFO] [stdout] test test_encryption_integrity ... ok
[INFO] [stdout] test test_replay_protection ... ok
[INFO] [stdout] test test_chain_validation ... ok
[INFO] [stdout] test test_client_server_basic ... ok
[INFO] [stderr]    Doc-tests vcl_protocol
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 28 tests
[INFO] [stdout] test src/connection.rs - connection (line 19) - compile ... ok
[INFO] [stdout] test src/error.rs - error::VCLError (line 15) - compile ... ok
[INFO] [stdout] test src/event.rs - event::VCLEvent (line 20) - compile ... ok
[INFO] [stdout] test src/lib.rs - (line 14) - compile ... ok
[INFO] [stdout] test src/connection.rs - connection::VCLConnection (line 68) - compile ... ok
[INFO] [stdout] test src/connection.rs - connection::VCLConnection (line 49) - compile ... ok
[INFO] [stdout] test src/pool.rs - pool (line 11) - compile ... ok
[INFO] [stdout] test src/config.rs - config (line 7) ... ok
[INFO] [stdout] test src/prometheus_metrics.rs - prometheus_metrics (line 8) ... ignored
[INFO] [stdout] test src/dns.rs - dns (line 19) ... ok
[INFO] [stdout] test src/config.rs - config::VCLConfig::vpn (line 119) ... ok
[INFO] [stdout] test src/config.rs - config::VCLConfig::auto (line 188) ... ok
[INFO] [stdout] test src/config.rs - config::VCLConfig::gaming (line 142) ... ok
[INFO] [stdout] test src/tun_device.rs - tun_device (line 33) - compile ... ok
[INFO] [stdout] test src/transport.rs - transport (line 8) - compile ... ok
[INFO] [stdout] test src/mtu.rs - mtu::fragment_size_for_mtu (line 375) ... ok
[INFO] [stdout] test src/config.rs - config::VCLConfig::streaming (line 165) ... ok
[INFO] [stdout] test src/fragment.rs - fragment (line 13) ... ok
[INFO] [stdout] test src/mtu.rs - mtu (line 22) ... ok
[INFO] [stdout] test src/metrics.rs - metrics (line 8) ... ok
[INFO] [stdout] test src/flow.rs - flow (line 28) ... ok
[INFO] [stdout] test src/keepalive.rs - keepalive (line 22) ... ok
[INFO] [stdout] test src/obfuscation.rs - obfuscation (line 18) ... ok
[INFO] [stdout] test src/ip_packet.rs - ip_packet (line 8) ... ok
[INFO] [stdout] test src/multipath.rs - multipath (line 28) ... ok
[INFO] [stdout] test src/pool.rs - pool::VCLPool::new (line 52) ... ok
[INFO] [stdout] test src/tunnel.rs - tunnel (line 12) ... ok
[INFO] [stdout] test src/reconnect.rs - reconnect (line 24) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 27 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 4.85s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762", kill_on_drop: false }`
[INFO] [stdout] 502e6d78eb64a838c7aa0883527fdd79c146d59677dfe38db53b2b7e437df762
