From 9f025e829ab6ed468cfb51d72ac105624afc3851 Mon Sep 17 00:00:00 2001 From: johannst Date: Thu, 1 Jul 2021 23:11:14 +0200 Subject: added support to query caps on kvm fd + few caps --- src/kvm.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/kvm.rs') 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) + } } -- cgit v1.2.3