netsim-embed 0.9.1

Network simulator.
Documentation
use anyhow::{Context, Result};
use async_process::Command;
use async_trait::async_trait;
use netsim_embed_cli::{run_client, Client};
use std::net::Ipv4Addr;

pub struct IperfClient;

#[async_trait]
impl Client for IperfClient {
    async fn run(&mut self, addr: Ipv4Addr) -> Result<()> {
        Command::new("iperf")
            .arg("-c")
            .arg(format!("{addr}"))
            .arg("-w")
            .arg("1M")
            .arg("-m")
            .spawn()
            .with_context(|| "running iperf")?
            .status()
            .await
            .unwrap();
        Command::new("netstat")
            .arg("-s")
            .spawn()
            .unwrap()
            .status()
            .await
            .unwrap();
        Ok(())
    }
}

#[async_std::main]
async fn main() -> Result<()> {
    run_client(IperfClient).await
}