Tokio TUN/TAP

Build crates.io Documentation examples

Asynchronous allocation of TUN/TAP devices in Rust using tokio. Use async-tun for async-std version.

Getting Started

```rust

[tokio::main]

async fn main() { let tun = Tun::builder() .name("") // if name is empty, then it is set by kernel. .tap(false) // false (default): TUN, true: TAP. .packetinfo(false) // false: IFFNOPI, default is true. .up() // or set it up manually using sudo ip link set <tun-name> up. .trybuild() // or .try_build_mq(queues) for multi-queue support. .unwrap();

println!("tun created, name: {}, fd: {}", tun.name(), tun.as_raw_fd());

let (mut reader, mut _writer) = tokio::io::split(tun);

let mut buf = [0u8; 1024];
loop {
    let n = reader.read(&mut buf).await.unwrap();
    println!("reading {} bytes: {:?}", n, &buf[..n]);
}

} ```

bash sudo -E $(which cargo) run

bash sudo ip a add 10.0.0.1/24 dev <tun-name>

bash ping 10.0.0.2

bash ip tuntap sudo tshark -i <tun-name>

Supported Platforms

Examples

bash sudo -E $(which cargo) run --example read sudo -E $(which cargo) run --example read-mq