extern crate tun_tap;
use std::process::Command;
use tun_tap::{Iface, Mode};
fn cmd(cmd: &str, args: &[&str]) {
let ecode = Command::new("ip")
.args(args)
.spawn()
.unwrap()
.wait()
.unwrap();
assert!(ecode.success(), "Failed to execte {}", cmd);
}
fn main() {
let iface = Iface::new("testtun%d", Mode::Tun).unwrap();
eprintln!("Iface: {:?}", iface);
cmd("ip", &["addr", "add", "dev", iface.name(), "10.107.1.2/24"]);
cmd("ip", &["link", "set", "up", "dev", iface.name()]);
println!("Created interface {}. Send some packets into it and see they're printed here",
iface.name());
println!("You can for example ping 10.107.1.3 (it won't answer)");
let mut buffer = vec![0; 1504];
loop {
let size = iface.recv(&mut buffer).unwrap();
assert!(size >= 4);
println!("Packet: {:?}", &buffer[4..size]);
}
}