mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2025-03-20 07:58:55 +00:00
vmm: Manually implement Serialize for PciDeviceInfo
In order to provide a more comprehensive b/d/f to the user, the serialization of PciDeviceInfo is implemented manually to control the formatting. Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
parent
83cd9969df
commit
4fe7347fb9
@ -29,6 +29,7 @@ use crate::seccomp_filters::{get_seccomp_filter, Thread};
|
||||
use crate::vm::{Error as VmError, Vm, VmState};
|
||||
use libc::EFD_NONBLOCK;
|
||||
use seccomp::{SeccompFilter, SeccompLevel};
|
||||
use serde::ser::{Serialize, SerializeStruct, Serializer};
|
||||
use std::fs::File;
|
||||
use std::io;
|
||||
use std::os::unix::io::{AsRawFd, FromRawFd, RawFd};
|
||||
@ -177,12 +178,34 @@ impl AsRawFd for EpollContext {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Serialize)]
|
||||
pub struct PciDeviceInfo {
|
||||
pub id: String,
|
||||
pub bdf: u32,
|
||||
}
|
||||
|
||||
impl Serialize for PciDeviceInfo {
|
||||
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
// Transform the PCI b/d/f into a standardized string.
|
||||
let segment = (self.bdf >> 16) & 0xffff;
|
||||
let bus = (self.bdf >> 8) & 0xff;
|
||||
let device = (self.bdf >> 3) & 0x1f;
|
||||
let function = self.bdf & 0x7;
|
||||
let bdf_str = format!(
|
||||
"{:04x}:{:02x}:{:02x}.{:01x}",
|
||||
segment, bus, device, function
|
||||
);
|
||||
|
||||
// Serialize the structure.
|
||||
let mut state = serializer.serialize_struct("PciDeviceInfo", 2)?;
|
||||
state.serialize_field("id", &self.id)?;
|
||||
state.serialize_field("bdf", &bdf_str)?;
|
||||
state.end()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn start_vmm_thread(
|
||||
vmm_version: String,
|
||||
http_path: &str,
|
||||
|
Loading…
x
Reference in New Issue
Block a user