[INFO] cloning repository https://github.com/gucoi/fowarder
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/gucoi/fowarder" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgucoi%2Ffowarder", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgucoi%2Ffowarder'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 941c8f2c1d2be37ad8eb8b3d060bcfa092a4bfcc
[INFO] checking gucoi/fowarder against try#ed606620234c6b50f2414162c4bbabd5f4a925f3 for pr-147995
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgucoi%2Ffowarder" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/gucoi/fowarder
[INFO] finished tweaking git repo https://github.com/gucoi/fowarder
[INFO] tweaked toml for git repo https://github.com/gucoi/fowarder written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/gucoi/fowarder on toolchain ed606620234c6b50f2414162c4bbabd5f4a925f3
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+ed606620234c6b50f2414162c4bbabd5f4a925f3" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/gucoi/fowarder 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" "+ed606620234c6b50f2414162c4bbabd5f4a925f3" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+ed606620234c6b50f2414162c4bbabd5f4a925f3" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] e8d4c342dc5916fa4f95a08e14b721f34aff585b15e154261b954c4a55910190
[INFO] running `Command { std: "docker" "start" "-a" "e8d4c342dc5916fa4f95a08e14b721f34aff585b15e154261b954c4a55910190", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "e8d4c342dc5916fa4f95a08e14b721f34aff585b15e154261b954c4a55910190", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e8d4c342dc5916fa4f95a08e14b721f34aff585b15e154261b954c4a55910190", kill_on_drop: false }`
[INFO] [stdout] e8d4c342dc5916fa4f95a08e14b721f34aff585b15e154261b954c4a55910190
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+ed606620234c6b50f2414162c4bbabd5f4a925f3" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 8ee50ab87287f1735cf49d987f4f90088fd0490d0b75535670ea45dbf6bde111
[INFO] running `Command { std: "docker" "start" "-a" "8ee50ab87287f1735cf49d987f4f90088fd0490d0b75535670ea45dbf6bde111", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.94
[INFO] [stderr]    Compiling libc v0.2.171
[INFO] [stderr]    Compiling serde v1.0.219
[INFO] [stderr]    Compiling target-lexicon v0.12.16
[INFO] [stderr]    Compiling hashbrown v0.15.2
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling rayon-core v1.12.1
[INFO] [stderr]    Compiling aho-corasick v1.1.3
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling winnow v0.7.4
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling smallvec v1.14.0
[INFO] [stderr]    Compiling log v0.4.26
[INFO] [stderr]     Checking no-std-net v0.6.0
[INFO] [stderr]    Compiling version-compare v0.2.0
[INFO] [stderr]    Compiling ucd-trie v0.1.7
[INFO] [stderr]     Checking pnet_base v0.33.0
[INFO] [stderr]     Checking once_cell v1.21.1
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]     Checking regex-automata v0.4.9
[INFO] [stderr]     Checking futures-channel v0.3.31
[INFO] [stderr]     Checking pnet_macros_support v0.33.0
[INFO] [stderr]    Compiling libloading v0.6.7
[INFO] [stderr]     Checking dlv-list v0.3.0
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling crossbeam-queue v0.3.12
[INFO] [stderr]    Compiling crossbeam-channel v0.5.14
[INFO] [stderr]    Compiling indexmap v2.8.0
[INFO] [stderr]    Compiling cfg-expr v0.15.8
[INFO] [stderr]    Compiling pnet v0.33.0
[INFO] [stderr]    Compiling zmq v0.10.0
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]     Checking clap_lex v0.7.4
[INFO] [stderr]     Checking predicates-core v1.0.9
[INFO] [stderr]    Compiling anyhow v1.0.97
[INFO] [stderr]     Checking linked-hash-map v0.5.6
[INFO] [stderr]     Checking itertools v0.10.5
[INFO] [stderr]     Checking yaml-rust v0.4.5
[INFO] [stderr]     Checking clap_builder v4.5.32
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]     Checking float-cmp v0.9.0
[INFO] [stderr]     Checking termtree v0.5.1
[INFO] [stderr]    Compiling crossbeam v0.8.4
[INFO] [stderr]     Checking pathdiff v0.2.3
[INFO] [stderr]     Checking difflib v0.4.0
[INFO] [stderr]     Checking normalize-line-endings v0.3.0
[INFO] [stderr]    Compiling syn v2.0.100
[INFO] [stderr]    Compiling jobserver v0.1.32
[INFO] [stderr]     Checking unsafe-libyaml v0.2.11
[INFO] [stderr]     Checking humantime v2.2.0
[INFO] [stderr]     Checking predicates-tree v1.0.12
[INFO] [stderr]     Checking etherparse v0.13.0
[INFO] [stderr]     Checking getrandom v0.2.15
[INFO] [stderr]     Checking parking_lot_core v0.9.10
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]     Checking ahash v0.7.8
[INFO] [stderr]     Checking socket2 v0.5.9
[INFO] [stderr]    Compiling cc v1.2.16
[INFO] [stderr]    Compiling rayon v1.10.0
[INFO] [stderr]     Checking hashbrown v0.12.3
[INFO] [stderr]     Checking mio v1.0.3
[INFO] [stderr]     Checking signal-hook-registry v1.4.2
[INFO] [stderr]     Checking pnet_sys v0.33.0
[INFO] [stderr]     Checking errno v0.2.8
[INFO] [stderr]     Checking is-terminal v0.4.16
[INFO] [stderr]     Checking num_cpus v1.16.0
[INFO] [stderr]     Checking fragile v2.0.0
[INFO] [stderr]     Checking downcast v0.11.0
[INFO] [stderr]     Checking ordered-multimap v0.4.3
[INFO] [stderr]     Checking rust-ini v0.18.0
[INFO] [stderr]     Checking regex v1.11.1
[INFO] [stderr]     Checking predicates v2.1.5
[INFO] [stderr]     Checking env_logger v0.10.2
[INFO] [stderr]    Compiling toml_datetime v0.6.8
[INFO] [stderr]    Compiling serde_spanned v0.6.8
[INFO] [stderr]    Compiling toml_edit v0.22.24
[INFO] [stderr]    Compiling jwalk v0.8.1
[INFO] [stderr]    Compiling dircpy v0.3.19
[INFO] [stderr]    Compiling zeromq-src v0.2.6+4.3.4
[INFO] [stderr]    Compiling serde_derive v1.0.219
[INFO] [stderr]    Compiling thiserror-impl v2.0.12
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling async-trait v0.1.88
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]    Compiling clap_derive v4.5.32
[INFO] [stderr]     Checking async-stream v0.3.6
[INFO] [stderr]     Checking tokio v1.44.1
[INFO] [stderr]    Compiling pcap v1.3.0
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling thiserror v2.0.12
[INFO] [stderr]     Checking pest v2.7.15
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]    Compiling toml v0.8.20
[INFO] [stderr]    Compiling pnet_macros v0.33.0
[INFO] [stderr]    Compiling mockall_derive v0.11.4
[INFO] [stderr]    Compiling system-deps v6.2.2
[INFO] [stderr]    Compiling zmq-sys v0.12.0
[INFO] [stderr]    Compiling pest_meta v2.7.15
[INFO] [stderr]     Checking pnet_packet v0.33.0
[INFO] [stderr]     Checking clap v4.5.32
[INFO] [stderr]    Compiling pest_generator v2.7.15
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking tokio-stream v0.1.17
[INFO] [stderr]    Compiling pest_derive v2.7.15
[INFO] [stderr]     Checking mockall v0.11.4
[INFO] [stderr]     Checking pnet_transport v0.33.0
[INFO] [stderr]     Checking tokio-test v0.4.4
[INFO] [stderr]     Checking ipnetwork v0.20.0
[INFO] [stderr]     Checking json5 v0.4.1
[INFO] [stderr]     Checking pnet_datalink v0.33.0
[INFO] [stderr]     Checking ron v0.7.1
[INFO] [stderr]     Checking toml v0.5.11
[INFO] [stderr]     Checking serde_json v1.0.140
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking config v0.13.4
[INFO] [stderr]     Checking dragent_rs v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `config::ConfigError`
[INFO] [stdout]  --> src/cli.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use config::ConfigError;
[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: `future::Join`
[INFO] [stdout]  --> src/error.rs:1:15
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures::{future::Join, io};
[INFO] [stdout]   |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt`
[INFO] [stdout]  --> src/error.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fmt;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `mpsc`
[INFO] [stdout]   --> src/capture/packet.rs:11:19
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tokio::sync::{mpsc, broadcast, watch};
[INFO] [stdout]    |                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PacketStats`
[INFO] [stdout]  --> src/forwarder/base.rs:3:142
[INFO] [stdout]   |
[INFO] [stdout] 3 | ...esult}, forwarder::state::ForwarderState, protocol::common::{PacketStats, PacketStatsSnapshot}
[INFO] [stdout]   |                                                                 ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::os::fd::AsFd`
[INFO] [stdout]  --> src/forwarder/gre.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::os::fd::AsFd;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `libc`
[INFO] [stdout]  --> src/forwarder/vxlan.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use libc;
[INFO] [stdout]   |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `vxlan::VxlanForwarder`
[INFO] [stdout]   --> src/forwarder/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub use vxlan::VxlanForwarder;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Ipv6Addr`
[INFO] [stdout]    --> src/protocol/common.rs:229:30
[INFO] [stdout]     |
[INFO] [stdout] 229 |     use std::net::{Ipv4Addr, Ipv6Addr};
[INFO] [stdout]     |                              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `linux::*`
[INFO] [stdout]  --> src/platform/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use linux::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `config::ConfigError`
[INFO] [stdout]  --> src/cli.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use config::ConfigError;
[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: `future::Join`
[INFO] [stdout]  --> src/error.rs:1:15
[INFO] [stdout]   |
[INFO] [stdout] 1 | use futures::{future::Join, io};
[INFO] [stdout]   |               ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fmt`
[INFO] [stdout]  --> src/error.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fmt;
[INFO] [stdout]   |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `mpsc`
[INFO] [stdout]   --> src/capture/packet.rs:11:19
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tokio::sync::{mpsc, broadcast, watch};
[INFO] [stdout]    |                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PacketStats`
[INFO] [stdout]  --> src/forwarder/base.rs:3:142
[INFO] [stdout]   |
[INFO] [stdout] 3 | ...esult}, forwarder::state::ForwarderState, protocol::common::{PacketStats, PacketStatsSnapshot}
[INFO] [stdout]   |                                                                 ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::os::fd::AsFd`
[INFO] [stdout]  --> src/forwarder/gre.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::os::fd::AsFd;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `libc`
[INFO] [stdout]  --> src/forwarder/vxlan.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use libc;
[INFO] [stdout]   |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `packet_to_bytes`
[INFO] [stdout]   --> src/forwarder/vxlan.rs:13:42
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::capture::packet::{PacketInfo, packet_to_bytes};
[INFO] [stdout]    |                                          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `vxlan::VxlanForwarder`
[INFO] [stdout]   --> src/forwarder/mod.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub use vxlan::VxlanForwarder;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `packet_to_bytes`
[INFO] [stdout]  --> src/protocol/vxlan.rs:5:42
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::capture::packet::{PacketInfo, packet_to_bytes};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `linux::*`
[INFO] [stdout]  --> src/platform/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use linux::*;
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `enable`
[INFO] [stdout]   --> src/capture/interface.rs:22:35
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn set_promiscuous(&self, enable: bool) -> Result<()> {
[INFO] [stdout]    |                                   ^^^^^^ help: if this is intentional, prefix it with an underscore: `_enable`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `packet`
[INFO] [stdout]   --> src/capture/packet.rs:27:24
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub fn packet_to_bytes(packet: &PacketInfo) -> Bytes {
[INFO] [stdout]    |                        ^^^^^^ help: if this is intentional, prefix it with an underscore: `_packet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `enable`
[INFO] [stdout]   --> src/capture/interface.rs:22:35
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn set_promiscuous(&self, enable: bool) -> Result<()> {
[INFO] [stdout]    |                                   ^^^^^^ help: if this is intentional, prefix it with an underscore: `_enable`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `packet`
[INFO] [stdout]   --> src/capture/packet.rs:27:24
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub fn packet_to_bytes(packet: &PacketInfo) -> Bytes {
[INFO] [stdout]    |                        ^^^^^^ help: if this is intentional, prefix it with an underscore: `_packet`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stop_handle`
[INFO] [stdout]    --> src/capture/packet.rs:404:13
[INFO] [stdout]     |
[INFO] [stdout] 404 |         let stop_handle = tokio::spawn(async move {
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_stop_handle`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `error`
[INFO] [stdout]   --> src/forwarder/base.rs:39:34
[INFO] [stdout]    |
[INFO] [stdout] 39 |     async fn handle_error(&self, error: ForwarderError) {
[INFO] [stdout]    |                                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_error`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `error`
[INFO] [stdout]   --> src/forwarder/base.rs:39:34
[INFO] [stdout]    |
[INFO] [stdout] 39 |     async fn handle_error(&self, error: ForwarderError) {
[INFO] [stdout]    |                                  ^^^^^ help: if this is intentional, prefix it with an underscore: `_error`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/forwarder/gre.rs:116:81
[INFO] [stdout]     |
[INFO] [stdout] 116 |         let ip_addr = forwarder_config.destination.parse::<Ipv4Addr>().map_err(|e| {
[INFO] [stdout]     |                                                                                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/forwarder/gre.rs:116:81
[INFO] [stdout]     |
[INFO] [stdout] 116 |         let ip_addr = forwarder_config.destination.parse::<Ipv4Addr>().map_err(|e| {
[INFO] [stdout]     |                                                                                 ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/forwarder/zmq.rs:84:37
[INFO] [stdout]    |
[INFO] [stdout] 84 |     async fn send_with_retry(&self, data: &[u8], retries: u32) -> Result<()> {
[INFO] [stdout]    |                                     ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `retries`
[INFO] [stdout]   --> src/forwarder/zmq.rs:84:50
[INFO] [stdout]    |
[INFO] [stdout] 84 |     async fn send_with_retry(&self, data: &[u8], retries: u32) -> Result<()> {
[INFO] [stdout]    |                                                  ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_retries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `data`
[INFO] [stdout]   --> src/forwarder/zmq.rs:84:37
[INFO] [stdout]    |
[INFO] [stdout] 84 |     async fn send_with_retry(&self, data: &[u8], retries: u32) -> Result<()> {
[INFO] [stdout]    |                                     ^^^^ help: if this is intentional, prefix it with an underscore: `_data`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `retries`
[INFO] [stdout]   --> src/forwarder/zmq.rs:84:50
[INFO] [stdout]    |
[INFO] [stdout] 84 |     async fn send_with_retry(&self, data: &[u8], retries: u32) -> Result<()> {
[INFO] [stdout]    |                                                  ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_retries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `log_level` is never read
[INFO] [stdout]   --> src/cli.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct Config {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub log_level: LoggingConfig,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Config` has a derived impl for the trait `Debug`, but this is 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: methods `validate`, `validate_interface`, and `validate_forwarder` are never used
[INFO] [stdout]   --> src/cli.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | impl Config {
[INFO] [stdout]    | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn validate(&self) -> Result<()> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     fn validate_interface(&self) -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     fn validate_forwarder(&self) -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_packet_size` is never read
[INFO] [stdout]   --> src/cli.rs:85:9
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub struct ForwarderConfig {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub max_packet_size: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ForwarderConfig` 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 `buffer_size` and `client_ip` are never read
[INFO] [stdout]   --> src/cli.rs:94:9
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub struct InterfaceConfig {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 94 |     pub buffer_size: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 95 |     pub client_ip: Ipv4Addr,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InterfaceConfig` 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 `level` and `file` are never read
[INFO] [stdout]    --> src/cli.rs:100:9
[INFO] [stdout]     |
[INFO] [stdout]  99 | pub struct LoggingConfig {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 100 |     pub level: String,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 101 |     pub file: Option<String>,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `LoggingConfig` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/error.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub enum ForwarderError {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 15 |     Protocol(String),
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     Parse(String),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     PacketFormat(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     BufferOverflow {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     InvalidChecksum,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     PermissionDenied(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     Connection(String),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     NotFound(String),
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     Unsupported(String),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ForwarderError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CaptureConfig` is never constructed
[INFO] [stdout]   --> src/capture/mod.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct CaptureConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CaptureManager` is never constructed
[INFO] [stdout]   --> src/capture/mod.rs:44:12
[INFO] [stdout]    |
[INFO] [stdout] 44 | pub struct CaptureManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `start_capture`, `stop_capture`, and `get_interface` are never used
[INFO] [stdout]   --> src/capture/mod.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 50 | impl CaptureManager {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 51 |     /// 创建新的捕获管理器
[INFO] [stdout] 52 |     pub fn new(config: CaptureConfig) -> Result<Self> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub async fn start_capture(&mut self) -> Result<broadcast::Receiver<PacketInfo>> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub async fn stop_capture(&mut self) {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn get_interface(&self) -> &NetworkInterface {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `vni` is never read
[INFO] [stdout]   --> src/capture/packet.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct PacketInfo {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub vni: Option<std::num::NonZeroU32>,
[INFO] [stdout]    |         ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PacketInfo` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `packet_to_bytes` is never used
[INFO] [stdout]   --> src/capture/packet.rs:27:8
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub fn packet_to_bytes(packet: &PacketInfo) -> Bytes {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `protocol`, `src_port`, and `dst_port` are never read
[INFO] [stdout]   --> src/capture/packet.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct PacketHeader {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub protocol: ProtocolType,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 56 |     pub src_port: Option<u16>, 
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 57 |     pub dst_port: Option<u16>, 
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PacketHeader` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stop_tx` is never read
[INFO] [stdout]    --> src/capture/packet.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 104 | pub struct PacketCapture {
[INFO] [stdout]     |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 110 |     stop_tx: watch::Sender<bool>,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `packets_dropped` and `packets_if_dropped` are never read
[INFO] [stdout]    --> src/capture/packet.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub struct CaptureStats {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] 114 |     packets_received: AtomicU64,
[INFO] [stdout] 115 |     packets_dropped: AtomicU64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 116 |     packets_if_dropped: AtomicU64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_stats` is never used
[INFO] [stdout]    --> src/capture/packet.rs:130:8
[INFO] [stdout]     |
[INFO] [stdout] 129 | impl CaptureStats {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] 130 |     fn get_stats(&self) -> (u64, u64, u64) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_stats_handler`, `break_loop`, `clone_with_stop`, `get_stats`, and `set_filter` are never used
[INFO] [stdout]    --> src/capture/packet.rs:178:12
[INFO] [stdout]     |
[INFO] [stdout] 139 | impl PacketCapture {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn get_stats_handler(&self) -> Arc<CaptureStats> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub fn break_loop(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn clone_with_stop(&self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 338 |     pub fn get_stats(&self) -> &CaptureStats {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 343 |     pub fn set_filter(&mut self, filter: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `list_interfaces` is never used
[INFO] [stdout]    --> src/capture/packet.rs:351:8
[INFO] [stdout]     |
[INFO] [stdout] 351 | pub fn list_interfaces() -> Result<Vec<String>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ForwarderFactory` is never constructed
[INFO] [stdout]   --> src/forwarder/mod.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub struct ForwarderFactory;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `create` is never used
[INFO] [stdout]   --> src/forwarder/mod.rs:26:18
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl ForwarderFactory {
[INFO] [stdout]    | --------------------- associated function in this implementation
[INFO] [stdout] 25 |     /// 创建新的转发器实例
[INFO] [stdout] 26 |     pub async fn create(config: ForwarderConfig) -> Result<Arc<Mutex<dyn PacketForwarder>>> {
[INFO] [stdout]    |                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ForwardingStats` is never constructed
[INFO] [stdout]   --> src/forwarder/mod.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct ForwardingStats {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ForwardingMonitor` is never constructed
[INFO] [stdout]   --> src/forwarder/mod.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct ForwardingMonitor {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update_stats`, and `get_stats` are never used
[INFO] [stdout]   --> src/forwarder/mod.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 59 | impl ForwardingMonitor {
[INFO] [stdout]    | ---------------------- associated items in this implementation
[INFO] [stdout] 60 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub async fn update_stats(&self, bytes: usize, success: bool) {
[INFO] [stdout]    |                  ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub async fn get_stats(&self) -> ForwardingStats {
[INFO] [stdout]    |                  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> src/forwarder/base.rs:9:8
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub trait PacketForwarder: Send + Sync {
[INFO] [stdout]    |           --------------- methods in this trait
[INFO] [stdout]  8 |     /// 获取转发器类型
[INFO] [stdout]  9 |     fn forwarder_type(&self) -> &str;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 12 |     async fn init(&mut self) -> Result<()>;
[INFO] [stdout]    |              ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |     async fn get_stats(&self) -> Result<PacketStatsSnapshot>;
[INFO] [stdout]    |              ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     async fn get_state(&self) -> ForwarderState;
[INFO] [stdout]    |              ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     async fn pause(&mut self) -> Result<()>;
[INFO] [stdout]    |              ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     async fn resume(&mut self) -> Result<()>;
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     async fn shutdown(&mut self) -> Result<()>;
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     fn suggested_batch_size(&self) -> usize {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     async fn handle_error(&self, error: ForwarderError) {
[INFO] [stdout]    |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     async fn cleanup(&mut self) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stats` and `state` are never read
[INFO] [stdout]   --> src/forwarder/gre.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct GreForwarder {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 23 |     stats: Arc<PacketStats>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 24 |     state: Arc<AtomicU8>, 
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SocketForwarder` is never constructed
[INFO] [stdout]  --> src/forwarder/socket.rs:1:12
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub struct SocketForwarder {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VxlanForwarder` is never constructed
[INFO] [stdout]   --> src/forwarder/vxlan.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub struct VxlanForwarder {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/forwarder/vxlan.rs:30:18
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl VxlanForwarder {
[INFO] [stdout]    | ------------------- associated function in this implementation
[INFO] [stdout] 30 |     pub async fn new(config: &ForwarderConfig) -> Result<Self> {
[INFO] [stdout]    |                  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ZmqForwarder` is never constructed
[INFO] [stdout]   --> src/forwarder/zmq.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct ZmqForwarder {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update_stats`, `batch_forward`, `try_reconnect`, and `send_with_retry` are never used
[INFO] [stdout]   --> src/forwarder/zmq.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl ZmqForwarder {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 31 |     pub fn new(destination: String, port: u16) -> Result<Self> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     async fn update_stats(&self, bytes_sent: usize) {
[INFO] [stdout]    |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     async fn batch_forward(&mut self, packets: Vec<&PacketInfo>) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     async fn try_reconnect(&mut self) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     async fn send_with_retry(&self, data: &[u8], retries: u32) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ForwarderStatus` is never constructed
[INFO] [stdout]   --> src/forwarder/state.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct ForwarderStatus {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/forwarder/state.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl ForwarderStatus {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] 42 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Ipv6` is never constructed
[INFO] [stdout]   --> src/protocol/common.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum ProtocolType {
[INFO] [stdout]    |          ------------ variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 13 |     Ipv6 = 0x86DD,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ProtocolType` 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: methods `protocol_type`, `total_len`, `compute_checksum`, `cache_key`, and `needs_optimization` are never used
[INFO] [stdout]   --> src/protocol/common.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub trait Protocol {
[INFO] [stdout]    |           -------- methods in this trait
[INFO] [stdout] 22 |     /// 获取协议类型
[INFO] [stdout] 23 |     fn protocol_type(&self) -> ProtocolType;
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     fn total_len(&self) -> usize;
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     fn compute_checksum(&self) -> u16;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     fn cache_key(&self) -> Option<u64> {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     fn needs_optimization(&self) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `read_from` is never used
[INFO] [stdout]   --> src/protocol/common.rs:51:8
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub trait Header: Protocol {
[INFO] [stdout]    |           ------ associated function in this trait
[INFO] [stdout] ...
[INFO] [stdout] 51 |     fn read_from(buf: &mut Bytes) -> crate::error::Result<Self> where Self: Sized;
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AddressInfo` is never constructed
[INFO] [stdout]   --> src/protocol/common.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct AddressInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `update_cache`, and `get_hash` are never used
[INFO] [stdout]   --> src/protocol/common.rs:65:12
[INFO] [stdout]    |
[INFO] [stdout] 64 | impl AddressInfo {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 65 |     pub fn new(src_ip: IpAddr, dst_ip: IpAddr, src_port: Option<u16>, dst_port: Option<u16>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     fn update_cache(&mut self) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn get_hash(&self) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]    --> src/protocol/common.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub struct PacketStats {
[INFO] [stdout]     |            ----------- fields in this struct
[INFO] [stdout] 107 |     total_packets: AtomicU64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 108 |     total_bytes: AtomicU64,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 109 |     error_packets: AtomicU64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 110 |     last_update: std::sync::atomic::AtomicU64,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 111 |     avg_packet_size: AtomicU64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 112 |     throughput_bps: AtomicU64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 113 |     // 添加批量统计缓存,减少原子操作
[INFO] [stdout] 114 |     batch_stats: parking_lot::RwLock<BatchStats>,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `packet_count`, `byte_count`, and `last_update` are never read
[INFO] [stdout]    --> src/protocol/common.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 118 | struct BatchStats {
[INFO] [stdout]     |        ---------- fields in this struct
[INFO] [stdout] 119 |     packet_count: u32,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 120 |     byte_count: u64,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 121 |     last_update: Instant,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/protocol/common.rs:135:12
[INFO] [stdout]     |
[INFO] [stdout] 134 | impl PacketStats {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] 135 |     pub fn increment_packets(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn add_bytes(&self, bytes: u64) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn increment_errors(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn update_metrics(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn get_throughput(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn get_avg_packet_size(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn batch_update(&self, packets: u32, bytes: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn snapshot(&self) -> PacketStatsSnapshot {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PacketStatsSnapshot` is never constructed
[INFO] [stdout]    --> src/protocol/common.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout] 205 | pub struct PacketStatsSnapshot {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_bits` is never used
[INFO] [stdout]   --> src/protocol/gre.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl GreFlags {
[INFO] [stdout]    | ------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn from_bits(bits: u16) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `with_key` and `with_checksum` are never used
[INFO] [stdout]   --> src/protocol/gre.rs:82:12
[INFO] [stdout]    |
[INFO] [stdout] 71 | impl GreHeader {
[INFO] [stdout]    | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn with_key(mut self, key: u32) -> Self{
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 88 |     pub fn with_checksum(mut self) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `inner_ip_header` and `payload` are never read
[INFO] [stdout]    --> src/protocol/gre.rs:221:5
[INFO] [stdout]     |
[INFO] [stdout] 217 | pub struct GrePacketBuilder {
[INFO] [stdout]     |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 221 |     inner_ip_header: Option<Ipv4Header>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 222 |     /// 负载数据
[INFO] [stdout] 223 |     payload: Option<Bytes>,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `key`, `with_checksum`, `sequence`, `inner_ip`, and `payload` are never used
[INFO] [stdout]    --> src/protocol/gre.rs:240:12
[INFO] [stdout]     |
[INFO] [stdout] 228 | impl GrePacketBuilder {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn key(mut self, key: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     pub fn with_checksum(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub fn sequence(mut self, seq: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn inner_ip(mut self, src: Ipv4Addr, dst: Ipv4Addr) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn payload(mut self, payload: impl Into<Bytes>) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VxlanFlags` is never constructed
[INFO] [stdout]  --> src/protocol/vxlan.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct VxlanFlags {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `to_bits` and `from_bits` are never used
[INFO] [stdout]   --> src/protocol/vxlan.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl VxlanFlags {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 15 |     pub fn to_bits(&self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn from_bits(bits: u8) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VxlanHeader` is never constructed
[INFO] [stdout]   --> src/protocol/vxlan.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct VxlanHeader {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VxlanEndpoint` is never constructed
[INFO] [stdout]   --> src/protocol/vxlan.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 94 | pub struct VxlanEndpoint {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `VxlanPacketBuilder` is never constructed
[INFO] [stdout]    --> src/protocol/vxlan.rs:103:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub struct VxlanPacketBuilder {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `build`, `set_vni`, and `set_endpoint` are never used
[INFO] [stdout]    --> src/protocol/vxlan.rs:108:12
[INFO] [stdout]     |
[INFO] [stdout] 107 | impl VxlanPacketBuilder {
[INFO] [stdout]     | ----------------------- associated items in this implementation
[INFO] [stdout] 108 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn build(&mut self, packet: &PacketInfo) -> Result<Bytes> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn set_vni(&mut self, vni: u32) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn set_endpoint(&mut self, endpoint: &VxlanEndpoint) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/protocol/ipv4.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct Ipv4Header {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout]  7 |     version: u8,           // 4 bits - IPv4 version
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]  8 |     ihl: u8,               // 4 bits - Internet Header Length
[INFO] [stdout]    |     ^^^
[INFO] [stdout]  9 |     dscp: u8,              // 6 bits - Differentiated Services Code Point
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 10 |     ecn: u8,               // 2 bits - Explicit Congestion Notification
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 11 |     total_length: u16,     // 16 bits - Total Length
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 12 |     identification: u16,   // 16 bits - Identification
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 13 |     flags: u8,             // 3 bits - Flags
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 14 |     fragment_offset: u16,  // 13 bits - Fragment Offset
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 15 |     ttl: u8,               // 8 bits - Time To Live
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 16 |     protocol: u8,          // 8 bits - Protocol
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 17 |     checksum: u16,         // 16 bits - Header Checksum
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 18 |     source: Ipv4Addr,      // 32 bits - Source IP Address
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 19 |     destination: Ipv4Addr, // 32 bits - Destination IP Address
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 20 |     options: Vec<u8>,      // Variable length - Options (if any)
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Ipv4Header` 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 associated items are never used
[INFO] [stdout]    --> src/protocol/ipv4.rs:25:12
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl Ipv4Header {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  24 |     /// Create a new IPv4 header with default values
[INFO] [stdout]  25 |     pub fn new(src: Ipv4Addr, dst: Ipv4Addr) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  44 |     pub fn header_len(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  48 |     pub fn write_to(&self, buf: &mut BytesMut) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn set_protocol(&mut self, protocol: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn set_ttl(&mut self, ttl: u8) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn set_total_length(&mut self, length: u16) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn add_option(&mut self, option: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn calculate_checksum(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn to_bytes(&self) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn from_bytes(bytes: &[u8]) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated constants are never used
[INFO] [stdout]    --> src/protocol/ipv4.rs:246:15
[INFO] [stdout]     |
[INFO] [stdout] 245 | impl Ipv4Header {
[INFO] [stdout]     | --------------- associated constants in this implementation
[INFO] [stdout] 246 |     pub const VERSION: u8 = 4;
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout] 247 |     pub const MIN_HEADER_LENGTH: u8 = 20; // 5 * 4 bytes
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub const ICMP: u8 = 1;
[INFO] [stdout]     |               ^^^^
[INFO] [stdout] 251 |     pub const TCP: u8 = 6;
[INFO] [stdout]     |               ^^^
[INFO] [stdout] 252 |     pub const UDP: u8 = 17;
[INFO] [stdout]     |               ^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     pub const DONT_FRAGMENT: u8 = 0x40;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 256 |     pub const MORE_FRAGMENTS: u8 = 0x20;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_interface_index` and `get_available_interface` are never used
[INFO] [stdout]   --> src/platform/interface.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub trait NetworkInterface: Send + Sync {
[INFO] [stdout]    |           ---------------- methods in this trait
[INFO] [stdout] 12 |     fn bind_to_interface(&self, sock: &Socket, interface_name: &str) -> Result<()>;
[INFO] [stdout] 13 |     fn get_interface_index(&self, interface_name: &str) -> Result<u32>;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 14 |     fn get_available_interface(&self) -> Result<Vec<String>>;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `log_level` is never read
[INFO] [stdout]   --> src/cli.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct Config {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub log_level: LoggingConfig,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Config` has a derived impl for the trait `Debug`, but this is 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 `max_packet_size` is never read
[INFO] [stdout]   --> src/cli.rs:85:9
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub struct ForwarderConfig {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub max_packet_size: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ForwarderConfig` 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 `client_ip` is never read
[INFO] [stdout]   --> src/cli.rs:95:9
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub struct InterfaceConfig {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 95 |     pub client_ip: Ipv4Addr,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InterfaceConfig` 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 `level` and `file` are never read
[INFO] [stdout]    --> src/cli.rs:100:9
[INFO] [stdout]     |
[INFO] [stdout]  99 | pub struct LoggingConfig {
[INFO] [stdout]     |            ------------- fields in this struct
[INFO] [stdout] 100 |     pub level: String,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 101 |     pub file: Option<String>,
[INFO] [stdout]     |         ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `LoggingConfig` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/error.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub enum ForwarderError {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 27 |     Parse(String),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     BufferOverflow {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     InvalidChecksum,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     PermissionDenied(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     Connection(String),
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     NotFound(String),
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     Unsupported(String),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ForwarderError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `max_packet_size` is never read
[INFO] [stdout]   --> src/capture/mod.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct CaptureConfig {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub max_packet_size: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CaptureConfig` 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 `get_interface` is never used
[INFO] [stdout]   --> src/capture/mod.rs:89:12
[INFO] [stdout]    |
[INFO] [stdout] 50 | impl CaptureManager {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn get_interface(&self) -> &NetworkInterface {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `protocol`, `src_port`, and `dst_port` are never read
[INFO] [stdout]   --> src/capture/packet.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct PacketHeader {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub protocol: ProtocolType,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 56 |     pub src_port: Option<u16>, 
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 57 |     pub dst_port: Option<u16>, 
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PacketHeader` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_stats` and `set_filter` are never used
[INFO] [stdout]    --> src/capture/packet.rs:338:12
[INFO] [stdout]     |
[INFO] [stdout] 139 | impl PacketCapture {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 338 |     pub fn get_stats(&self) -> &CaptureStats {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 343 |     pub fn set_filter(&mut self, filter: &str) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> src/forwarder/base.rs:9:8
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub trait PacketForwarder: Send + Sync {
[INFO] [stdout]    |           --------------- methods in this trait
[INFO] [stdout]  8 |     /// 获取转发器类型
[INFO] [stdout]  9 |     fn forwarder_type(&self) -> &str;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |     async fn get_stats(&self) -> Result<PacketStatsSnapshot>;
[INFO] [stdout]    |              ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     async fn get_state(&self) -> ForwarderState;
[INFO] [stdout]    |              ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     async fn pause(&mut self) -> Result<()>;
[INFO] [stdout]    |              ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     async fn resume(&mut self) -> Result<()>;
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     fn suggested_batch_size(&self) -> usize {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     async fn handle_error(&self, error: ForwarderError) {
[INFO] [stdout]    |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     async fn cleanup(&mut self) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stats` and `state` are never read
[INFO] [stdout]   --> src/forwarder/gre.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct GreForwarder {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 23 |     stats: Arc<PacketStats>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 24 |     state: Arc<AtomicU8>, 
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SocketForwarder` is never constructed
[INFO] [stdout]  --> src/forwarder/socket.rs:1:12
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub struct SocketForwarder {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stats` and `state` are never read
[INFO] [stdout]   --> src/forwarder/vxlan.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub struct VxlanForwarder {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 25 |     stats: Arc<PacketStats>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 26 |     state: Arc<AtomicU8>, // 使用原子状态替代 Mutex<ForwarderState>
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/forwarder/zmq.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct ZmqForwarder {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     state: Arc<AtomicU8>,     // 使用原子状态替代 Mutex<ForwarderState>
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 20 |     batch_size: usize,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 21 |     batch_timeout: Duration,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 22 |     destination: String,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 23 |     port: u16,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 24 |     // 添加连接状态监控
[INFO] [stdout] 25 |     connection_state: Arc<AtomicU8>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 26 |     // 添加重连机制
[INFO] [stdout] 27 |     reconnect_timeout: Duration,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `batch_forward`, `try_reconnect`, and `send_with_retry` are never used
[INFO] [stdout]   --> src/forwarder/zmq.rs:60:14
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl ZmqForwarder {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 60 |     async fn batch_forward(&mut self, packets: Vec<&PacketInfo>) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     async fn try_reconnect(&mut self) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     async fn send_with_retry(&self, data: &[u8], retries: u32) -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ForwarderStatus` is never constructed
[INFO] [stdout]   --> src/forwarder/state.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct ForwarderStatus {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/forwarder/state.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl ForwarderStatus {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] 42 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `protocol_type`, `total_len`, `compute_checksum`, `cache_key`, and `needs_optimization` are never used
[INFO] [stdout]   --> src/protocol/common.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub trait Protocol {
[INFO] [stdout]    |           -------- methods in this trait
[INFO] [stdout] 22 |     /// 获取协议类型
[INFO] [stdout] 23 |     fn protocol_type(&self) -> ProtocolType;
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     fn total_len(&self) -> usize;
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     fn compute_checksum(&self) -> u16;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     fn cache_key(&self) -> Option<u64> {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     fn needs_optimization(&self) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `src_ip`, `dst_ip`, and `cached_hash` are never read
[INFO] [stdout]   --> src/protocol/common.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct AddressInfo {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 57 |     pub src_ip: IpAddr,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 58 |     pub dst_ip: IpAddr,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     cached_hash: Option<u64>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AddressInfo` 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 `new`, `update_cache`, and `get_hash` are never used
[INFO] [stdout]   --> src/protocol/common.rs:65:12
[INFO] [stdout]    |
[INFO] [stdout] 64 | impl AddressInfo {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 65 |     pub fn new(src_ip: IpAddr, dst_ip: IpAddr, src_port: Option<u16>, dst_port: Option<u16>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     fn update_cache(&mut self) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn get_hash(&self) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `last_update`, `avg_packet_size`, `throughput_bps`, and `batch_stats` are never read
[INFO] [stdout]    --> src/protocol/common.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub struct PacketStats {
[INFO] [stdout]     |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 110 |     last_update: std::sync::atomic::AtomicU64,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 111 |     avg_packet_size: AtomicU64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 112 |     throughput_bps: AtomicU64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 113 |     // 添加批量统计缓存,减少原子操作
[INFO] [stdout] 114 |     batch_stats: parking_lot::RwLock<BatchStats>,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `packet_count`, `byte_count`, and `last_update` are never read
[INFO] [stdout]    --> src/protocol/common.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 118 | struct BatchStats {
[INFO] [stdout]     |        ---------- fields in this struct
[INFO] [stdout] 119 |     packet_count: u32,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 120 |     byte_count: u64,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 121 |     last_update: Instant,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `update_metrics`, `get_throughput`, `get_avg_packet_size`, `batch_update`, and `snapshot` are never used
[INFO] [stdout]    --> src/protocol/common.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 134 | impl PacketStats {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn update_metrics(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn get_throughput(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn get_avg_packet_size(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn batch_update(&self, packets: u32, bytes: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn snapshot(&self) -> PacketStatsSnapshot {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PacketStatsSnapshot` is never constructed
[INFO] [stdout]    --> src/protocol/common.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout] 205 | pub struct PacketStatsSnapshot {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `with_key` and `with_checksum` are never used
[INFO] [stdout]   --> src/protocol/gre.rs:82:12
[INFO] [stdout]    |
[INFO] [stdout] 71 | impl GreHeader {
[INFO] [stdout]    | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn with_key(mut self, key: u32) -> Self{
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 88 |     pub fn with_checksum(mut self) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `inner_ip_header` and `payload` are never read
[INFO] [stdout]    --> src/protocol/gre.rs:221:5
[INFO] [stdout]     |
[INFO] [stdout] 217 | pub struct GrePacketBuilder {
[INFO] [stdout]     |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 221 |     inner_ip_header: Option<Ipv4Header>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 222 |     /// 负载数据
[INFO] [stdout] 223 |     payload: Option<Bytes>,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `key`, `with_checksum`, `sequence`, `inner_ip`, and `payload` are never used
[INFO] [stdout]    --> src/protocol/gre.rs:240:12
[INFO] [stdout]     |
[INFO] [stdout] 228 | impl GrePacketBuilder {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn key(mut self, key: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     pub fn with_checksum(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub fn sequence(mut self, seq: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn inner_ip(mut self, src: Ipv4Addr, dst: Ipv4Addr) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn payload(mut self, payload: impl Into<Bytes>) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `reserved` is never read
[INFO] [stdout]   --> src/protocol/vxlan.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct VxlanFlags {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 10 |     pub vni_present: bool,
[INFO] [stdout] 11 |     pub reserved: u32,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VxlanFlags` 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 `reserved` is never read
[INFO] [stdout]   --> src/protocol/vxlan.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct VxlanHeader {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub reserved: u32,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VxlanHeader` 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 `VxlanEndpoint` is never constructed
[INFO] [stdout]   --> src/protocol/vxlan.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 94 | pub struct VxlanEndpoint {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_vni` and `set_endpoint` are never used
[INFO] [stdout]    --> src/protocol/vxlan.rs:132:12
[INFO] [stdout]     |
[INFO] [stdout] 107 | impl VxlanPacketBuilder {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn set_vni(&mut self, vni: u32) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 138 |     pub fn set_endpoint(&mut self, endpoint: &VxlanEndpoint) -> &mut Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `header_len`, `write_to`, `set_ttl`, `set_total_length`, `add_option`, and `calculate_checksum` are never used
[INFO] [stdout]    --> src/protocol/ipv4.rs:44:12
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl Ipv4Header {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  44 |     pub fn header_len(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  48 |     pub fn write_to(&self, buf: &mut BytesMut) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn set_ttl(&mut self, ttl: u8) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn set_total_length(&mut self, length: u16) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn add_option(&mut self, option: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn calculate_checksum(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated constants `VERSION`, `MIN_HEADER_LENGTH`, `ICMP`, `UDP`, `DONT_FRAGMENT`, and `MORE_FRAGMENTS` are never used
[INFO] [stdout]    --> src/protocol/ipv4.rs:246:15
[INFO] [stdout]     |
[INFO] [stdout] 245 | impl Ipv4Header {
[INFO] [stdout]     | --------------- associated constants in this implementation
[INFO] [stdout] 246 |     pub const VERSION: u8 = 4;
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout] 247 |     pub const MIN_HEADER_LENGTH: u8 = 20; // 5 * 4 bytes
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub const ICMP: u8 = 1;
[INFO] [stdout]     |               ^^^^
[INFO] [stdout] 251 |     pub const TCP: u8 = 6;
[INFO] [stdout] 252 |     pub const UDP: u8 = 17;
[INFO] [stdout]     |               ^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     pub const DONT_FRAGMENT: u8 = 0x40;
[INFO] [stdout]     |               ^^^^^^^^^^^^^
[INFO] [stdout] 256 |     pub const MORE_FRAGMENTS: u8 = 0x20;
[INFO] [stdout]     |               ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_interface_index` and `get_available_interface` are never used
[INFO] [stdout]   --> src/platform/interface.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub trait NetworkInterface: Send + Sync {
[INFO] [stdout]    |           ---------------- methods in this trait
[INFO] [stdout] 12 |     fn bind_to_interface(&self, sock: &Socket, interface_name: &str) -> Result<()>;
[INFO] [stdout] 13 |     fn get_interface_index(&self, interface_name: &str) -> Result<u32>;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 14 |     fn get_available_interface(&self) -> Result<Vec<String>>;
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: comparison is useless due to type limits
[INFO] [stdout]    --> src/capture/packet.rs:458:17
[INFO] [stdout]     |
[INFO] [stdout] 458 |         assert!(packets_received >= 0, "Should have valid packet count");
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 09s
[INFO] running `Command { std: "docker" "inspect" "8ee50ab87287f1735cf49d987f4f90088fd0490d0b75535670ea45dbf6bde111", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "8ee50ab87287f1735cf49d987f4f90088fd0490d0b75535670ea45dbf6bde111", kill_on_drop: false }`
[INFO] [stdout] 8ee50ab87287f1735cf49d987f4f90088fd0490d0b75535670ea45dbf6bde111
