Crates.io | tunio |
lib.rs | tunio |
version | 0.3.0 |
source | src |
created_at | 2022-05-09 15:21:07.043259 |
updated_at | 2022-06-26 09:07:58.150662 |
description | Crate for creating and managing TUN/TAP interfaces with async support. Works best with netconfig crate. |
homepage | |
repository | https://github.com/GamePad64/tunio |
max_upload_size | |
id | 583290 |
size | 74,728 |
Create TUN/TAP interfaces in cross-platform and idiomatic Rust!
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);
}
Wintun
driver).
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.