Crate tunio

Source
Expand description

§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 😉

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

Modules§

platform
traits

Structs§

IfConfig
IfConfigBuilder
Builder for IfConfig.

Enums§

Error
IfConfigBuilderError
Error type for IfConfigBuilder
Layer

Type Aliases§

DefaultDriver
DefaultInterface
DefaultTokioInterfaceasync-tokio