feat(v0.1.7): port iperf3 configurable + iperf3 docker sur port 5202

- config.toml: nouveau champ [server] iperf3_port (défaut 5201)
- network_info: iperf3 -p <port> utilise le port configuré
- docker-compose: iperf3 exposé sur 5202 (5201 occupé par linux_benchtools)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gilles Soulier
2026-05-23 06:47:15 +02:00
co-authored by Claude Sonnet 4.6
parent c238e9f2b8
commit 5ee8b66464
7 changed files with 24 additions and 7 deletions
+5 -4
View File
@@ -56,12 +56,13 @@ fn wol_status(name: &str) -> Option<bool> {
None
}
fn iperf_mbps(server_ip: &str) -> Option<f64> {
fn iperf_mbps(server_ip: &str, port: u16) -> Option<f64> {
std::process::Command::new("which").arg("iperf3")
.output().ok()
.filter(|o| o.status.success())?;
let port_str = port.to_string();
let out = std::process::Command::new("iperf3")
.args(["-c", server_ip, "-J", "-t", "5", "-P", "1"])
.args(["-c", server_ip, "-p", &port_str, "-J", "-t", "5", "-P", "1"])
.output().ok()?;
let json = String::from_utf8_lossy(&out.stdout);
let v: serde_json::Value = serde_json::from_str(&json).ok()?;
@@ -69,7 +70,7 @@ fn iperf_mbps(server_ip: &str) -> Option<f64> {
Some((bps / 1_000_000.0 * 10.0).round() / 10.0)
}
pub fn collect(server_ip: &str) -> Vec<crate::payload::NetworkInterface> {
pub fn collect(server_ip: &str, iperf3_port: u16) -> Vec<crate::payload::NetworkInterface> {
let entries = match std::fs::read_dir("/sys/class/net") {
Ok(e) => e,
Err(_) => return vec![],
@@ -82,7 +83,7 @@ pub fn collect(server_ip: &str) -> Vec<crate::payload::NetworkInterface> {
ifaces.sort();
if ifaces.is_empty() { return vec![]; }
let iperf = iperf_mbps(server_ip);
let iperf = iperf_mbps(server_ip, iperf3_port);
ifaces.iter().map(|name| {
let speed = read_sysfs(name, "speed")