xen/ctrl/
mod.rs

1mod altp2m;
2pub use self::altp2m::{XenAltP2M, XenAltP2MView};
3
4mod domain;
5pub use self::domain::{XenDomain, XenDomainInfo};
6
7mod event;
8pub use self::event::{
9    VmEvent, VmEventCpuid, VmEventCtrlReg, VmEventData, VmEventDebug, VmEventDescriptorAccess,
10    VmEventEmulInsnData, VmEventEmulReadData, VmEventFastSinglestep, VmEventFlag,
11    VmEventFlagOptions, VmEventInterrupt, VmEventIo, VmEventMemAccess, VmEventMovToMsr,
12    VmEventPaging, VmEventReason, VmEventRegs, VmEventRegsX86, VmEventSelectorReg, VmEventSharing,
13    VmEventSinglestep, VmEventVmExit, VmEventWriteCtrlReg,
14};
15
16mod handle;
17pub use self::handle::XenInterfaceHandle;
18
19mod interface;
20pub use self::interface::XenInterface;
21
22mod monitor;
23pub use self::monitor::{VmEventRing, XenMonitor};
24use crate::{Architecture, XenDomainId, XenError};
25
26pub struct XenControl {
27    interface: XenInterface,
28}
29
30impl XenControl {
31    pub fn new() -> Result<Self, XenError> {
32        Ok(Self {
33            interface: XenInterface::new()?,
34        })
35    }
36
37    pub fn attach(interface: XenInterface) -> Result<Self, XenError> {
38        Ok(Self { interface })
39    }
40
41    pub fn domain<Arch>(&self, id: XenDomainId) -> Result<XenDomain<Arch>, XenError>
42    where
43        Arch: Architecture,
44    {
45        XenDomain::new(self.interface.clone(), id)
46    }
47}