use std::net::SocketAddrV4;
use std::time::Duration;
use wireforge_core::ether::EthernetPacket;
use wireforge_core::ipv4::Ipv4Packet;
use crate::error::IoError;
pub trait L2Reader {
fn recv(&mut self) -> Result<EthernetPacket<'_>, IoError>;
fn set_timeout(&mut self, dur: Option<Duration>) -> Result<(), IoError>;
fn set_promiscuous(&mut self, on: bool) -> Result<(), IoError>;
}
pub trait L2Writer {
fn send(&self, packet: &[u8]) -> Result<usize, IoError>;
}
pub trait L3Reader {
fn recv(&mut self) -> Result<Ipv4Packet<'_>, IoError>;
fn set_timeout(&mut self, dur: Option<Duration>) -> Result<(), IoError>;
fn set_header_included(&mut self, on: bool) -> Result<(), IoError>;
}
pub trait L3Writer {
fn send_to(&self, packet: &[u8], dst: SocketAddrV4) -> Result<usize, IoError>;
}