use riptun::{Result, Tun};
use std::sync::Arc;
use std::thread;
const NUM_QUEUES: usize = 5;
pub fn main() -> Result<()> {
let sync = Tun::new("rip%d", NUM_QUEUES)?;
println!("[INFO] => Created new virtual device: {}", sync.name());
let mut handles = Vec::with_capacity(NUM_QUEUES);
let sync = Arc::new(sync);
for queue in 0..NUM_QUEUES {
let handle_dev = sync.clone();
let handle = thread::spawn(move || {
let mut buffer: [u8; 1500] = [0x00; 1500];
loop {
let read = match handle_dev.recv_via(queue, &mut buffer) {
Ok(read) => read,
Err(err) => {
println!("[ERROR][Queue: {:?}] => {}", queue, err);
continue;
}
};
println!(
"[INFO][Queue: {}] => Packet data ({}B): {:?}",
queue,
read,
&buffer[..read]
);
}
});
handles.push(handle);
}
for handle in handles {
if let Err(err) = handle.join() {
println!("[ERROR] => {:?}", err);
}
}
Ok(())
}