#![cfg_attr(not(target_os = "linux"), expect(unused))]
use std::{fmt::Debug, io};
pub const BROADCAST_MAC_ADDR: [u8; 6] = [0xff; 6];
pub const PCI_ETHERNET_CLASS_CODE: u8 = 0x2;
pub const PCI_ETHERNET_SUBCLASS: u8 = 0x0;
pub const PCI_ETHERNET_PROG_IF: u8 = 0;
pub const PCI_ETHERNET_REVISION_ID: u8 = 0;
pub const UHYVE_QUEUE_SIZE: u16 = 256;
pub const UHYVE_PCI_CLASS_INFO: [u8; 3] = [
PCI_ETHERNET_REVISION_ID,
PCI_ETHERNET_PROG_IF,
PCI_ETHERNET_SUBCLASS,
];
pub const UHYVE_NET_MTU: usize = 1500;
pub trait NetworkBackend: Sized + Debug {}
pub(crate) mod tap;
pub(crate) trait NetworkInterface {
type RX: NetworkInterfaceRX;
type TX: NetworkInterfaceTX;
fn mac_address_as_bytes(&self) -> [u8; 6];
fn split(self) -> (Self::RX, Self::TX);
}
pub(crate) trait NetworkInterfaceTX: Send {
fn send(&mut self, buf: &[u8]) -> io::Result<usize>;
}
pub(crate) trait NetworkInterfaceRX: Send {
fn recv(&mut self, buf: &mut [u8], timeout: u16) -> io::Result<usize>;
}