use vmi_core::{VmiContext, VmiOs};
use super::ArchAdapter;
#[derive(Debug, Default, Clone, Copy)]
pub struct BridgePacket {
magic: u32,
request: u16,
method: u16,
value1: u64,
value2: u64,
value3: u64,
value4: u64,
}
impl BridgePacket {
pub fn new(magic: u32, request: u16, method: u16) -> Self {
Self {
magic,
request,
method,
value1: 0,
value2: 0,
value3: 0,
value4: 0,
}
}
pub fn with_value1(self, value1: u64) -> Self {
Self { value1, ..self }
}
pub fn with_value2(self, value2: u64) -> Self {
Self { value2, ..self }
}
pub fn with_value3(self, value3: u64) -> Self {
Self { value3, ..self }
}
pub fn with_value4(self, value4: u64) -> Self {
Self { value4, ..self }
}
pub fn magic(&self) -> u32 {
self.magic
}
pub fn request(&self) -> u16 {
self.request
}
pub fn method(&self) -> u16 {
self.method
}
pub fn value1(&self) -> u64 {
self.value1
}
pub fn value2(&self) -> u64 {
self.value2
}
pub fn value3(&self) -> u64 {
self.value3
}
pub fn value4(&self) -> u64 {
self.value4
}
}
impl<Os> From<&VmiContext<'_, Os>> for BridgePacket
where
Os: VmiOs,
Os::Architecture: ArchAdapter,
{
fn from(value: &VmiContext<'_, Os>) -> Self {
Os::Architecture::read_packet(value.event())
}
}