Skip to content
This repository was archived by the owner on Nov 6, 2024. It is now read-only.

rust-vmm/kvm-bindings

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a08cb7a · Nov 5, 2024
Sep 10, 2024
Jan 7, 2020
Nov 26, 2021
Oct 8, 2024
Oct 14, 2024
Nov 6, 2019
Jan 7, 2020
Sep 9, 2024
Sep 23, 2024
Sep 12, 2019
Oct 14, 2024
Sep 23, 2024
Jan 17, 2019
Nov 5, 2024
Apr 16, 2024
Sep 9, 2024

Repository files navigation

This repository was archived on November 4th 2024, due to its contents being transferred to the rust-vmm/kvm repository.

Crates.io

kvm-bindings

Rust FFI bindings to KVM, generated using bindgen. It currently has support for the following target architectures:

  • x86_64
  • arm64
  • riscv64

The bindings exported by this crate are statically generated using header files associated with a specific kernel version, and are not automatically synced with the kernel version running on a particular host. The user must ensure that specific structures, members, or constants are supported and valid for the kernel version they are using. For example, the immediate_exit field from the kvm_run structure is only meaningful if the KVM_CAP_IMMEDIATE_EXIT capability is available. Using invalid fields or features may lead to undefined behaviour.

Usage

First, add the following to your Cargo.toml:

kvm-bindings = "0.3"

Next, add this to your crate root:

extern crate kvm_bindings;

This crate also offers safe wrappers over FAM structs - FFI structs that have a Flexible Array Member in their definition. These safe wrappers can be used if the fam-wrappers feature is enabled for this crate. Example:

kvm-bindings = { version = "0.3", features = ["fam-wrappers"]}

Dependencies

The crate has an optional dependency to vmm-sys-util when enabling the fam-wrappers feature.

It also has an optional dependency on serde when enabling the serde feature, to allow serialization of bindings. Serialization of bindings happens as opaque binary blobs via zerocopy. Due to the kernel's ABI compatibility, this means that bindings serialized in version x of kvm-bindings can be deserialized in version y of the crate, even if the bindings have had been regenerated in the meantime.

Regenerating Bindings

Please see CONTRIBUTING.md for details on how to generate the bindings or add support for new architectures.