tunio

Crates.iotunio
lib.rstunio
version0.3.0
sourcesrc
created_at2022-05-09 15:21:07.043259
updated_at2022-06-26 09:07:58.150662
descriptionCrate for creating and managing TUN/TAP interfaces with async support. Works best with netconfig crate.
homepage
repositoryhttps://github.com/GamePad64/tunio
max_upload_size
id583290
size74,728
Alexander Shishenko (GamePad64)

documentation

README

Tunio

Crates.io docs.rs

Create TUN/TAP interfaces in cross-platform and idiomatic Rust!

Features ⭐

  • Tokio support (optional).
  • TUN/TAP support.
  • Extensible architecture for adding other platforms later.

Short example 📜

use std::io::{Read, Write};
use tunio::traits::{DriverT, InterfaceT};
use tunio::{DefaultDriver, DefaultInterface};

fn main() {
    // DefaultDriver is an alias for a supported driver for current platform.
    // It may be not optimal for your needs (for example, it can lack support of TAP),
    // but it will work in some cases. If you need another driver, then import and use it instead.
    let mut driver = DefaultDriver::new().unwrap();
    // Preparing configuration for new interface. We use `Builder` pattern for this.
    let if_config = DefaultDriver::if_config_builder()
        .name("iface1".to_string())
        .build()
        .unwrap();

    // Then, we create the interface using config and start it immediately.
    let mut interface = DefaultInterface::new_up(&mut driver, if_config).unwrap();

    // The interface is created and running.

    // Write to interface using Write trait
    let buf = [0u8; 4096];
    let _ = interface.write(&buf);

    // Read from interface using Read trait
    let mut mut_buf = [0u8; 4096];
    let _ = interface.read(&mut mut_buf);
}

Supported platforms 🖥️

  • Windows, TUN only (using Wintun driver).
    • Wintun driver requires a prebuilt DLL inside application folder. Please, refer to Wintun documentation for more details.
  • Linux

macOS support for utun and feth drivers is planned. Feel free to post a PR, it is always greatly appreciated 😉

Related projects 🔗

  • netconfig: A high-level abstraction for gathering and changing network interface configuration.
Commit count: 100

cargo fmt