use anyhow::{bail, Result}; use pnet::datalink; use pnet::datalink::Channel::Ethernet; use pnet::datalink::Config; pub mod comm; use comm::*; #[test] #[ignore] pub fn simulate_host() -> Result<()> { let index: u32 = 10; let interface = get_interface(index)?; if let Some(_src) = interface.mac { let cf = Config::default(); let (mut tx, _rx) = match datalink::channel(&interface, cf) { Ok(Ethernet(tx, rx)) => (tx, rx), Ok(_) => bail!("Unhandled channel type"), Err(e) => bail!( "An error occurred when creating the datalink channel: {}", e ), }; let data = get_ident_req(); if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) { bail!("error: {:?}", e); } let data = get_ident_resp(); if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) { bail!("error: {:?}", e); } let data = get_set_req(); if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) { bail!("error: {:?}", e); } let data = get_set_resp(); if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) { bail!("error: {:?}", e); } let data = get_get_req(); if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) { bail!("error: {:?}", e); } let data = get_get_resp(); if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) { bail!("error: {:?}", e); } } Ok(()) }