use nom::IResult;
use nom::number::complete::be_u32;
use serde::{Deserialize, Serialize};
use crate::datagram::AddressType;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct XenVif {
pub vif_index: u32,
pub vm_address: AddressType,
pub domain_id: u32,
pub network_index: u32,
pub flags: u32,
}
pub(crate) fn parse_xen_vif(input: &[u8]) -> IResult<&[u8], XenVif> {
let (input, vif_index) = be_u32(input)?;
let (input, addr_raw) = be_u32(input)?;
let vm_address = AddressType::IPv4(std::net::Ipv4Addr::from(addr_raw));
let (input, domain_id) = be_u32(input)?;
let (input, network_index) = be_u32(input)?;
let (input, flags) = be_u32(input)?;
Ok((
input,
XenVif {
vif_index,
vm_address,
domain_id,
network_index,
flags,
},
))
}