use std::os::raw::{c_int, c_void};
use block2::Block;
pub type StartHandler = dyn Fn(u32, *mut c_void) + 'static;
pub type StopHandler = dyn Fn(u32) + 'static;
#[link(name = "vmnet", kind = "framework")]
unsafe extern "C" {
pub fn vmnet_start_interface(
interface_desc: *mut c_void,
queue: *mut c_void,
handler: *const Block<StartHandler>,
) -> *mut c_void;
pub fn vmnet_stop_interface(
interface: *mut c_void,
queue: *mut c_void,
handler: *const Block<StopHandler>,
) -> u32;
pub fn vmnet_read(interface: *mut c_void, packets: *mut VmPktDesc, pktcnt: *mut c_int) -> u32;
pub fn vmnet_write(interface: *mut c_void, packets: *mut VmPktDesc, pktcnt: *mut c_int) -> u32;
}
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct Iovec {
pub iov_base: *mut c_void,
pub iov_len: libc::size_t,
}
#[repr(C)]
#[derive(Debug, Clone, Copy)]
pub struct VmPktDesc {
pub vm_pkt_size: libc::size_t,
pub vm_pkt_iov: *mut Iovec,
pub vm_pkt_iovcnt: u32,
pub vm_flags: u32,
}
unsafe impl Send for VmPktDesc {}
unsafe impl Sync for VmPktDesc {}
pub mod keys {
use std::ffi::CStr;
pub const OPERATION_MODE: &CStr = c"vmnet_operation_mode";
pub const INTERFACE_ID: &CStr = c"vmnet_interface_id";
pub const MTU: &CStr = c"vmnet_mtu";
pub const MAX_PACKET_SIZE: &CStr = c"vmnet_max_packet_size";
pub const MAC_ADDRESS: &CStr = c"vmnet_mac_address";
pub const ENABLE_ISOLATION: &CStr = c"vmnet_enable_isolation";
pub const SHARED_INTERFACE_NAME: &CStr = c"vmnet_shared_interface_name";
}