aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/kvm.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/kvm.rs')
-rw-r--r--src/kvm.rs23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/kvm.rs b/src/kvm.rs
index 23112aa..30a00bb 100644
--- a/src/kvm.rs
+++ b/src/kvm.rs
@@ -4,8 +4,9 @@ use std::fs;
use std::io;
use std::os::unix::io::FromRawFd;
-use crate::{libcret, ioctl, kvm_sys};
+use crate::cap::{CapBool, CapInt};
use crate::vm::Vm;
+use crate::{ioctl, kvm_sys, libcret};
/// Wrapper for `/dev/kvm` ioctls.
///
@@ -49,4 +50,24 @@ impl Kvm {
Ok(Vm::new(vm, vcpu_mmap_size))
}
+
+ /// Check availability of an extension with the [`KVM_CHECK_EXTENSION`][kvm-check-extension]
+ /// ioctl.
+ ///
+ /// [kvm-check-extension]: https://www.kernel.org/doc/html/latest/virt/kvm/api.html#kvm-check-extension
+ pub fn check_extenstion(&self, cap: CapBool) -> bool {
+ let ret = ioctl(&self.kvm, kvm_sys::KVM_CHECK_EXTENSION, cap.into());
+
+ matches!(ret, Ok(ret) if ret > 0)
+ }
+
+ /// Check availability of an extension with the [`KVM_CHECK_EXTENSION`][kvm-check-extension]
+ /// ioctl.
+ ///
+ /// [kvm-check-extension]: https://www.kernel.org/doc/html/latest/virt/kvm/api.html#kvm-check-extension
+ pub fn check_extenstion_int(&self, cap: CapInt) -> i32 {
+ let ret = ioctl(&self.kvm, kvm_sys::KVM_CHECK_EXTENSION, cap.into());
+
+ ret.unwrap_or(0)
+ }
}