Struct MicroVmConfig

Source
pub struct MicroVmConfig {
Show 15 fields pub log_level: LogLevel, pub rootfs: Rootfs, pub num_vcpus: u8, pub memory_mib: u32, pub mapped_dirs: Vec<PathPair>, pub port_map: Vec<PortPair>, pub scope: NetworkScope, pub ip: Option<Ipv4Addr>, pub subnet: Option<Ipv4Network>, pub rlimits: Vec<LinuxRlimit>, pub workdir_path: Option<Utf8UnixPathBuf>, pub exec_path: Utf8UnixPathBuf, pub args: Vec<String>, pub env: Vec<EnvPair>, pub console_output: Option<Utf8UnixPathBuf>,
}
Expand description

Configuration for a MicroVm instance.

This struct holds all the settings needed to create and run a MicroVm, including system resources, filesystem configuration, networking, and process execution details.

Rather than creating this directly, use MicroVmConfigBuilder or MicroVmBuilder for a more ergonomic interface.

§Examples

use microsandbox_core::vm::{MicroVm, MicroVmConfig, Rootfs};
use tempfile::TempDir;

let temp_dir = TempDir::new()?;
let config = MicroVmConfig::builder()
    .rootfs(Rootfs::Native(temp_dir.path().to_path_buf()))
    .memory_mib(1024)
    .exec_path("/bin/echo")
    .build();

let vm = MicroVm::from_config(config)?;

Fields§

§log_level: LogLevel

The log level to use for the MicroVm.

§rootfs: Rootfs

The rootfs for the MicroVm.

§num_vcpus: u8

The number of vCPUs to use for the MicroVm.

§memory_mib: u32

The amount of memory in MiB to use for the MicroVm.

§mapped_dirs: Vec<PathPair>

The directories to mount in the MicroVm using virtio-fs. Each PathPair represents a host:guest path mapping.

§port_map: Vec<PortPair>

The port map to use for the MicroVm.

§scope: NetworkScope

The network scope to use for the MicroVm.

§ip: Option<Ipv4Addr>

The IP address to use for the MicroVm.

§subnet: Option<Ipv4Network>

The subnet to use for the MicroVm.

§rlimits: Vec<LinuxRlimit>

The resource limits to use for the MicroVm.

§workdir_path: Option<Utf8UnixPathBuf>

The working directory path to use for the MicroVm.

§exec_path: Utf8UnixPathBuf

The executable path to use for the MicroVm.

§args: Vec<String>

The arguments to pass to the executable.

§env: Vec<EnvPair>

The environment variables to set for the executable.

§console_output: Option<Utf8UnixPathBuf>

The console output path to use for the MicroVm.

Implementations§

Source§

impl MicroVmConfig

Source

pub fn builder() -> MicroVmConfigBuilder<(), ()>

Creates a builder for configuring a new MicroVm configuration.

This is the recommended way to create a new MicroVmConfig instance. The builder pattern provides a more ergonomic interface and ensures all required fields are set.

§Examples
use microsandbox_core::vm::{MicroVmConfig, Rootfs};
use tempfile::TempDir;

let temp_dir = TempDir::new()?;
let config = MicroVmConfig::builder()
    .rootfs(Rootfs::Native(temp_dir.path().to_path_buf()))
    .memory_mib(1024)
    .exec_path("/bin/echo")
    .build();
Source

pub fn validate(&self) -> MicrosandboxResult<()>

Validates the MicroVm configuration.

Performs a series of checks to ensure the configuration is valid:

  • Verifies the root path exists and is accessible
  • Verifies all host paths in mapped_dirs exist and are accessible
  • Ensures number of vCPUs is non-zero
  • Ensures memory allocation is non-zero
  • Validates executable path and arguments contain only printable ASCII characters
  • Validates guest paths don’t overlap or conflict with each other
§Returns
  • Ok(()) if the configuration is valid
  • Err(MicrosandboxError::InvalidMicroVMConfig) with details about what failed
§Examples
use microsandbox_core::vm::{MicroVmConfig, Rootfs};
use tempfile::TempDir;

let temp_dir = TempDir::new()?;
let config = MicroVmConfig::builder()
    .rootfs(Rootfs::Native(temp_dir.path().to_path_buf()))
    .memory_mib(1024)
    .exec_path("/bin/echo")
    .build();

assert!(config.validate().is_ok());
Source

pub fn validate_command_line(s: &str) -> MicrosandboxResult<()>

Validates that a command line string contains only allowed characters.

Command line strings (executable paths and arguments) must contain only printable ASCII characters in the range from space (0x20) to tilde (0x7E). This excludes:

  • Control characters (newlines, tabs, etc.)
  • Non-ASCII Unicode characters
  • Null bytes
§Arguments
  • s - The string to validate
§Returns
  • Ok(()) if the string contains only valid characters
  • Err(MicrosandboxError::InvalidMicroVMConfig) if invalid characters are found
§Examples
use microsandbox_core::vm::MicroVmConfig;

// Valid strings
assert!(MicroVmConfig::validate_command_line("/bin/echo").is_ok());
assert!(MicroVmConfig::validate_command_line("Hello, World!").is_ok());

// Invalid strings
assert!(MicroVmConfig::validate_command_line("/bin/echo\n").is_err());  // newline
assert!(MicroVmConfig::validate_command_line("hello🌎").is_err());      // emoji

Trait Implementations§

Source§

impl Debug for MicroVmConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,