blob: 09ae695a9790ebfc28521815f9c1c33f1b662de2 [file] [edit]
// Copyright 2017 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto3";
option optimize_for = LITE_RUNTIME;
// This file defines messages used for starting, stopping, and managing VMs.
package vm_tools.concierge;
option go_package = "go.chromium.org/chromiumos/system_api/vm_concierge_proto";
import "arc/arc.proto";
// Read me before adding new messages.
//
// Most of the response protocol buffers define `success` and `failure_reason`
// fields to propagate success status, as opposed to using the D-Bus error
// message mechanisms. Please keep code base consistent.
//
// When using the API, unfortunately some of them don't follow this scheme,
// please read the specification for error response
// vm_tools/dbus_bindings/org.chromium.VmConcierge.xml
//
// Request protocol buffers define vm_name and owner_id, be consistent,
// verification is done based on the field name in service.cc.
// Specification of the key components of a VM.
//
// TODO(crbug/1121046): This spec may be insufficient for DLC, consider
// re-designing it.
message VirtualMachineSpec {
// ID of a DLC package that contains the kernel and rootfs.
string dlc_id = 3;
// ID of a DLC package that contains the vm_tools.img for this vm. If empty
// the vm_tools.img from the above dlc_id is used if available.
string tools_dlc_id = 5;
// Optional path to the wayland server which should be passed into the VM. If
// absent the default path (${XDG_RUNTIME_DIR}/wayland-0) will be used.
string wayland_server = 6;
// ID of a DLC package that contains the BIOS img for this vm. If empty
// an `FdType` of `BIOS` is used from the `fds` field in `StartVmRequest` for
// the BIOS image. Both the DLC id and Fd are optional, for e.g. we could have
// neither if a kernel image or fd is passed in.
string bios_dlc_id = 7;
}
// The type of disk image.
enum DiskImageType {
// A raw file.
DISK_IMAGE_RAW = 0;
// A qcow2-compatible disk image.
DISK_IMAGE_QCOW2 = 1;
// Automatically choose a disk image type.
DISK_IMAGE_AUTO = 2;
// A plugin VM disk image.
DISK_IMAGE_PLUGINVM = 3;
}
// The type of filesystem.
enum FilesystemType {
// Default option. We make no extra assumptions about the filesystem. Most
// existing disk functions don't interact with the filesystem directly or
// assume that it is Btrfs.
UNSPECIFIED = 0;
// The Ext4 filesystem.
EXT4 = 1;
}
// Describes any additional disk images that should be mounted inside the VM.
message DiskImage {
// Path to the disk image on the host.
string path = 1;
// Path where this disk image will be mounted inside the VM.
string mount_point = 2;
// The file system type for this disk image.
string fstype = 3;
// Any special flags to be used when mounting the file system. Specified the
// same way as in mount(2).
uint64 flags = 4;
// Any additional data associated with the mount.
string data = 5;
// If true, the disk image will be mounted writable.
bool writable = 6;
// If true, the disk image will be mounted.
bool do_mount = 7;
// Image type of the disk.
DiskImageType image_type = 8;
// The block size of the device. The default block size is used when zero.
// Only ARCVM supports the field at the moment.
uint32 block_size = 9;
// If true, the disk image will be mounted with O_DIRECT.
bool o_direct = 10;
// If true, the disk should enable multiple-workers.
bool multiple_workers = 11;
}
// Information about a particular VM.
message VmInfo {
// The IPv4 address assigned to the VM, in network byte order.
fixed32 ipv4_address = 1;
// The process ID of the main crosvm process for the VM.
int32 pid = 2;
// The virtual socket context id assigned to the VM.
int64 cid = 3;
// The handle to a 9p server managed by the seneschal system service. Use
// this handle when making requests to that service to manage the files shared
// with this VM.
uint32 seneschal_server_handle = 4;
// Permission token assigned to the VM. Use this token when making requests
// to the VM permission service to determine what permissions have been
// granted to the VM. The token is also to be used to identify VM to the
// service providers (camera, CRAS, etc).
string permission_token = 5;
// VmType is assumed to be no larger than 99 (e.g. in
// concierge::service.cc::GetDiskImageVmType), if VmType ever exceeds 99
// please fix assertion elsewhere.
// LINT.IfChange
enum VmType {
// Default value indicating an unknown or custom VM.
UNKNOWN = 0;
// VM is associated with a specific feature.
TERMINA = 1;
ARC_VM = 2;
PLUGIN_VM = 3;
BOREALIS = 4;
BRUSCHETTA = 5;
BAGUETTE = 6;
};
// LINT.ThenChange(/system_api/dbus/vm_applications/apps.proto)
// What type of VM this is.
VmType vm_type = 6;
// Whether the VM is using storage ballooning.
bool storage_ballooning = 7;
// Status of the VM.
VmStatus status = 8;
// Allocated memory for the VM in bytes. The value is 0 if unknown.
int64 allocated_memory = 9;
}
// Information about the balloon of a particular VM.
message BalloonInfo {
// Available memory in the VM in bytes. The value is 0 if unknown.
int64 available_memory = 1;
// Free memory in the VM in bytes. The value is 0 if unknown.
int64 free_memory = 2;
// Balloon size of the VM in bytes. The value is 0 if unknown.
int64 balloon_size = 3;
}
// Optional fields for network configuration.
message NetworkOptions {
// Toggles the IFF_VNET_HDR option for the TAP device.
bool enable_vnet_hdr = 1;
}
message VirtualSwapConfig {
// Size of the virtual swap device in MiB.
uint32 size_mib = 1;
// The interval between swapping out virtual swap area to the host in
// milliseconds.
uint32 swap_interval_ms = 2;
}
// Information that must be included with every StartVm dbus message.
message StartVmRequest {
// The VM that should be started. This is ignored if starting a termina VM,
// which will always use the latest component from imageloader.
VirtualMachineSpec vm = 1;
// Any additional disks that should be mounted inside the VM.
repeated DiskImage disks = 2;
// The human-readable name to be assigned to this VM.
string name = 4;
// If true, concierge should also perform termina-specific setup.
bool start_termina = 5;
// The owner of the vm.
string owner_id = 7;
// Enable Virtio GPU in the started Vm. It uses integrated GPU on the host.
bool enable_gpu = 8;
// Enable audio capture in the started Vm.
bool enable_audio_capture = 11;
// The number of CPUs to give to the VM. Cannot be larger than the number of
// CPUs on the device and cannot be 0.
uint32 cpus = 12;
// Make the rootfs writable.
bool writable_rootfs = 15;
enum FdType {
// Kernel image.
KERNEL = 0;
// RootFS image.
ROOTFS = 1;
// File to be used for storage.
STORAGE = 2;
// Initrd image.
INITRD = 3;
// BIOS image.
BIOS = 4;
// BIOS pflash image.
PFLASH = 5;
}
// For each FdType in fds a file descriptor must be passed along with the
// message and that file descriptor will be used for the type's purpose.
repeated FdType fds = 16;
// Kernel cmdline parameters that will be passed to crosvm.
repeated string kernel_params = 17;
// Enable Big GL rendering for the started Vm (default is GLES).
bool enable_big_gl = 19;
// Timeout (seconds) for VM startup
uint32 timeout = 20;
enum TerminaFeature {
// This list must stay in sync with the one in vm_guest.proto
UNKNOWN = 0;
USED_BY_TESTS = 1;
START_LXD = 2 [deprecated = true];
RESET_LXD_ON_LAUNCH = 3 [deprecated = true];
LXD_4_LTS = 4 [deprecated = true];
LXD_5_LTS = 5;
// This list must stay in sync with the one in vm_guest.proto
}
// Experimental Termina features to enable. Like Chrome feature flags but for
// inside the VM.
repeated TerminaFeature features = 21;
// If true, connects the virtio-tpm device to the vtpm daemon.
bool vtpm_proxy = 22;
// Whether the VM should use storage ballooning.
bool storage_ballooning = 23;
// Type 11 SMBIOS DMI OEM strings to pass to the VM.
repeated string oem_strings = 24;
// Enable virtgpu drm native context:
bool enable_virtgpu_native_context = 25;
// Optional suggested username of the owner of the VM. Only used by
// VM types that support dynamic usernames.
string vm_username = 26;
// Enable discrete GPU passthrough in the VM.
// Note:
// - VFIO device (--enable-dgpu) is fully independent of virtio-gpu
// (--enable-gpu) device.
// - When --enable-dgpu is used with --enable-gpu, it helps with
// graphics acceleration via render offload.
// - When --enable-dgpu is used without --enable-gpu, it helps with
// compute acceleration (example: OpenCL).
bool enable_dgpu_passthrough = 27;
// Optional type of VM. If not sent by the client, concierge tries to deduce
// what the VM type is automatically.
// TODO(b/280214191): Update concierge clients to send vm_type.
VmInfo.VmType vm_type = 28;
}
// Information that must be included with every StartPluginVm request.
message StartPluginVmRequest {
// An identifier for this VM.
string name = 1;
// The cryptohome id of the owner of this VM.
string owner_id = 2;
// The number of CPUs to give to the VM. Cannot be larger than the number of
// CPUs on the device and cannot be 0.
uint32 cpus = 3;
// Parameters to pass to the plugin process.
repeated string params = 4;
// Indicates that a specific /29 subnet should be allocated from
// 100.115.93.0/24 for use by this VM; and if it is not available, then the
// request should fail.
// Valid values are 1 - 32, inclusive.
uint32 subnet_index = 7;
// Additional networking options.
NetworkOptions net_options = 8;
}
// Information that must be included with every StartArcVm request.
message StartArcVmRequest {
// The VM that should be started.
VirtualMachineSpec vm = 1;
// Any additional disks that should be mounted inside the VM.
repeated DiskImage disks = 2;
// An identifier for this VM.
string name = 3;
// The cryptohome id of the owner of this VM.
string owner_id = 4;
// Path to Android fstab.
string fstab = 6;
// The number of CPUs to give to the VM. Cannot be larger than the number of
// CPUs on the device and cannot be 0.
uint32 cpus = 7;
// Whether the guest kernel root file system is writable.
bool rootfs_writable = 8;
// Ignore development configuration directives when ARCVM is started.
bool ignore_dev_conf = 9;
// Whether rt-vcpus are enabled.
bool enable_rt_vcpu = 10;
// Whether Huge Pages should be used.
bool use_hugepages = 11;
// How much memory to give ARCVM, in MiB. Optional.
uint32 memory_mib = 12;
// Whether per-VM core scheduling should be used instead of the default one
// (per-vCPU core scheduing.) This option is no-op on devices that have
// neither MDS nor L1TF vulnerability. On those non-vulnerable devices, core
// scheduling is not used, and all vCPU threads can be assigned to any CPU
// cores without restrictions.
bool use_per_vm_core_scheduling = 14;
// The block size of the rootfs. The default block size is used when zero.
uint32 rootfs_block_size = 15;
// Display orientation in clock-wise degrees. ORIENTATION_90 means the panel's
// right side is the top side of the natural device orientation.
enum DisplayOrientation {
ORIENTATION_0 = 0;
ORIENTATION_90 = 1;
ORIENTATION_180 = 2;
ORIENTATION_270 = 3;
}
// The orientation of the display panel in respect to the natural device
// orientation. For some devices, the panel's orientation doesn't match to the
// device's default orientation. (e.g. a device this is default landscape may
// have a portrait display.). It's used to set
// 'ro.surface_flinger.primary_display_orientation' property to tell the
// orientation to surfaceflinger.
DisplayOrientation panel_orientation = 17;
// Whether to lock guest memory (for the purpose of disabling host swap).
bool lock_guest_memory = 18;
// Whether virtio blk data is enabled
bool enable_virtio_blk_data = 27;
// ArcVM metrics memory PSI period, -1 if disabled
int32 vm_memory_psi_period = 28;
// Likelihood of sending cold memory to swap.
// Default value of zero means "unset" - will use the system default.
// Positive values will be used to set the guest's vm.swappiness parameter.
// NOTE: we are intentionally making it impossible to set vm.swappiness=0,
// as that disables swap - which can be done more appropriately by
// setting |guest_zram_size| to zero.
int32 guest_swappiness = 33;
// List of parameters that are shared by ARCVM and container.
arc.StartArcMiniInstanceRequest mini_instance_request = 34;
// Reclaim interval in milliseconds
// A value of 0 will disable the MGLRU reclaim feature
int32 mglru_reclaim_interval = 35;
// Swappiness value for MGLRU reclaim (0 - 200)
// 0 means only filecache will be used while 200 means only swap will be used
// any value in between will be a mix of both
// The lower the value, the higher the ratio of freeing filecache pages
// Implementation and a more detailed description can be found in
// src/third_party/kernel/v5.10-arcvm/mm/vmscan.c
int32 mglru_reclaim_swappiness = 36;
enum UsapProfileType {
// Default USAP profile suitable for all devices.
USAP_PROFILE_DEFAULT = 0;
// USAP profile suitable for 4G devices.
USAP_PROFILE_4G = 1;
// USAP profile suitable for 8G devices.
USAP_PROFILE_8G = 2;
// USAP profile suitable for 16G devices.
USAP_PROFILE_16G = 3;
}
// USAP Profile of the device
UsapProfileType usap_profile = 38;
enum BinaryTranslationType {
BINARY_TRANSLATION_TYPE_NONE = 0;
BINARY_TRANSLATION_TYPE_HOUDINI = 1;
BINARY_TRANSLATION_TYPE_NDK_TRANSLATION = 2;
}
// Type of binary translation used in native bridge experiment
BinaryTranslationType native_bridge_experiment = 39;
enum UreadaheadMode {
UREADAHEAD_MODE_READAHEAD = 0;
UREADAHEAD_MODE_GENERATE = 1;
UREADAHEAD_MODE_DISABLED = 2;
}
// Ureadahead mode used
UreadaheadMode ureadahead_mode = 40;
// Controls whether WebView Zygote is lazily initialized in ARC.
bool enable_web_view_zygote_lazy_init = 42;
// Whether vmm-swap of crosvm is enabled
bool enable_vmm_swap = 43;
// Size of Guest Zram in MiB.
uint32 guest_zram_mib = 44;
// Whether to enable O_DIRECT for the root disk (/dev/block/vda).
bool rootfs_o_direct = 45;
// Whether to enable s2idle in the guest.
bool enable_s2idle = 46;
// Whether to enable the multiple-workers feature for the root disk
// (/dev/block/vda).
bool rootfs_multiple_workers = 47;
// Whether to use the GKI kernel.
bool use_gki = 48;
// Enable IO scheduler for the /data block device (/dev/block/vde).
bool enable_data_block_io_scheduler = 49;
// Configuration of the virtual swap device to be set up by crosvm.
VirtualSwapConfig virtual_swap_config = 50;
// Whether to enable virtio-pvclock in the guest.
bool enable_pvclock = 51;
}
enum VmStatus {
// Unknown status.
VM_STATUS_UNKNOWN = 0;
// The VM is already running.
VM_STATUS_RUNNING = 1;
// The VM is currently starting up.
VM_STATUS_STARTING = 2;
// The VM failed to startup.
VM_STATUS_FAILURE = 3;
// The VM can't start because its disk/image is being manipulated.
VM_STATUS_DISK_OP_IN_PROGRESS = 4;
// The VM is stopped.
VM_STATUS_STOPPED = 5;
}
// Information sent back by vm_concierge in response to a StartVm dbus message.
// StartVmResponse is returned as early as the crosvm process is started, which
// may not be ready for control. Wait for VmStartedSignal instead before making
// DBus requests to control the VM.
message StartVmResponse {
// If true, the VM was started successfully. |vm_info| will have non-default
// values only if this is true.
bool success = 1;
// If the VM failed to start, the reason for the failure.
string failure_reason = 2;
// Information about the VM that was started, if successful.
VmInfo vm_info = 3;
// Status of the VM. If VM_STATUS_RUNNING, it is not necessary to wait for a
// TremplinStartedSignal before starting a container in the VM.
VmStatus status = 4;
enum MountResult {
// The mountability of the disk is unknown, typically because the
// call failed before trying to mount the disk.
UNKNOWN = 0;
// The disk mount succeeded completely.
SUCCESS = 1;
// The disk mount succeeded, but some data loss is
// likely. Currently this occurs when the initial mount fails,
// but succeeds on a retry with -o usebackuproots.
PARTIAL_DATA_LOSS = 2;
// The disk is unmountable.
FAILURE = 3;
}
MountResult mount_result = 5;
// The amount of free space on the stateful partition in bytes. -1 if unable
// to calculate the amount of free space (e.g. error mounting the partition).
// Only valid when free_bytes_has_value is true.
int64 free_bytes = 6;
// Whether the free_bytes field has been filled in. If false, ignore whatever
// value is in the field.
bool free_bytes_has_value = 7;
}
// Message used to communicate install status for VM.
message VmInstallStateSignal {
enum State {
UNKNOWN = 0;
IN_PROGRESS = 1;
FAILED = 2;
SUCCEEDED = 3;
}
State state = 1;
enum Step {
unknown = 0;
launcher_start = 1;
core_start = 2;
install_fetch_image = 3;
install_configure = 4;
install_done = 5;
install_success = 6;
install_failure = 7;
}
Step in_progress_step = 2;
int64 in_progress_percent = 3;
string failed_reason = 4;
}
// Message used in the signal for when a VM has started, and can be controlled
// via DBus methods.
message VmStartedSignal {
// The name of the VM which has started.
string name = 1;
// The owner of the vm.
string owner_id = 2;
// Information about the VM that was started, if successful.
VmInfo vm_info = 3;
// Status of the VM. If VM_STATUS_RUNNING, it is not necessary to wait for a
// TremplinStartedSignal before starting a container in the VM.
VmStatus status = 4;
}
// Message used in the signal for when a VM is about to start.
message VmStartingUpSignal {
// The name of the VM which is starting.
string name = 1;
// The owner of the VM.
string owner_id = 2;
// Type of the VM which is starting.
VmInfo.VmType vm_type = 3;
// The virtual socket context id assigned to the VM that is starting.
int64 cid = 4;
}
enum GuestUserlandReady {
// Userland unknown status.
USERLAND_UNKNOWN = 0;
// The ArcBridgeService in the ARCVM is connected to Chrome.
ARC_BRIDGE_CONNECTED = 1;
}
message VmGuestUserlandReadySignal {
// The name of the VM which has started.
string name = 1;
// The owner of the vm.
string owner_id = 2;
// Ready status of the guest userland. The ready status will be defined
// for each type of VM.
GuestUserlandReady ready = 3;
}
// Request to set VmType for a guest.
message SetCrostiniVmTypeRequest {
// The cryptohome id for the user's encrypted storage.
string cryptohome_id = 1;
// Desired type
VmInfo.VmType vm_type = 2;
}
message SetCrostiniVmTypeResponse {
// Success or not.
bool success = 1;
// Failure reason
string reason = 2;
}
// Information that must be included with every StopVm dbus message.
message StopVmRequest {
// The name of the VM to be stopped.
string name = 1;
// The owner of the vm.
string owner_id = 2;
}
// Response sent back by vm_concierge when DBus RPC is simple.
message SuccessFailureResponse {
// If true, what was requested with the DBus request was successful.
bool success = 1;
// The reason of failure in human readable English text form.
// TODO(b/380358552): Revisit this to be an enum or remove altogether.
string failure_reason = 2;
}
enum VmStopReason {
// VM exited.
VM_EXITED = 0;
// StopVm() was requested.
STOP_VM_REQUESTED = 1;
// StopAllVms() was requested.
STOP_ALL_VMS_REQUESTED = 2;
// DestroyDiskImage() was requested.
DESTROY_DISK_IMAGE_REQUESTED = 3;
// The service process is shutting down.
SERVICE_SHUTDOWN = 4;
// Sibling Vm process has exited on the hypervisor.
SIBLING_VM_EXITED = 5;
}
// Message used in the signal for when a VM has stopped.
message VmStoppedSignal {
// The name of the VM which has stopped.
string name = 1;
// The owner of the vm.
string owner_id = 2;
// The virtual socket context id assigned to the VM that was stopped.
int64 cid = 3;
// Why the VM has stopped.
VmStopReason reason = 4;
}
// Message used in the signal for when a VM is stopping.
message VmStoppingSignal {
// The name of the VM which is stopping.
string name = 1;
// The owner of the vm.
string owner_id = 2;
// The virtual socket context id assigned to the VM that is stopping.
int64 cid = 3;
}
// Information that must be included with every SuspendVm dbus message.
message SuspendVmRequest {
// The name of the VM to be stopped.
string name = 1;
// The owner of the vm.
string owner_id = 2;
}
// Information that must be included with every ResumeVm dbus message.
message ResumeVmRequest {
// The name of the VM to be stopped.
string name = 1;
// The owner of the vm.
string owner_id = 2;
}
// Response to a SyncTimes RPC.
message SyncVmTimesResponse {
// The total number of VMs we attempted to update.
uint32 requests = 1;
// Number of failed requests.
uint32 failures = 2;
// Reasons for failures, if any.
repeated string failure_reason = 3;
}
// Request for information about the VM.
message GetVmInfoRequest {
// The name of the VM to query.
string name = 1;
// The owner of the vm.
string owner_id = 2;
}
// Response sent back by vm_concierge for a GetVmInfo dbus message.
message GetVmInfoResponse {
// If true, the requested VM exists and info was returned.
bool success = 1;
// Information about the VM that was requested.
VmInfo vm_info = 2;
}
// Request for the balloon information of a VM.
message GetBalloonInfoRequest {
// The name of the VM to query.
string name = 1;
// The owner of the vm.
string owner_id = 2;
}
// Response sent back by vm_concierge for a GetBalloonInfo dbus message.
message GetBalloonInfoResponse {
// If true, the requested VM exists and info was returned.
bool success = 1;
// Balloon information of the VM that was requested.
BalloonInfo balloon_info = 2;
}
// Request for information about the VM that is specific to
// enterprise reporting.
message GetVmEnterpriseReportingInfoRequest {
// The name of the VM.
string vm_name = 1;
// The owner of the VM (cryptohome id).
string owner_id = 2;
}
// Response sent back by vm_concierge after it receives a
// GetEnterpriseReportingInfo call. Right now this only returns the kernel
// version of the Termina VM. The VM must be running in order for the call to
// deliver the kernel version.
message GetVmEnterpriseReportingInfoResponse {
bool success = 1;
string failure_reason = 2;
string vm_kernel_version = 3;
}
// Request for completing the boot process of the ARC VM
message ArcVmCompleteBootRequest {
// The owner of the vm.
string owner_id = 1;
}
// Result of an ArcVmCompleteBootRequest
enum ArcVmCompleteBootResult {
// Not used
UNKNOWN = 0;
// ArcVm boot completion operations completed successfully.
SUCCESS = 1;
// The incoming boot complete request was mal-formed
BAD_REQUEST = 2;
// ArcVm does not exist or could not be found
ARCVM_NOT_FOUND = 3;
}
// Response sent back by vm_concierge for a ArcVmCompleteBoot dbus message.
message ArcVmCompleteBootResponse {
ArcVmCompleteBootResult result = 1;
}
// Request for setting balloon timer interval.
message SetBalloonTimerRequest {
// The interval of the balloon timer in milliseconds.
uint64 timer_interval_millis = 1;
}
// The type of storage location for a disk image.
enum StorageLocation {
// Subdirectory under /home/root/<id>/crosvm.
STORAGE_CRYPTOHOME_ROOT = 0;
// Subdirectory under /home/root/<id>/pvm.
STORAGE_CRYPTOHOME_PLUGINVM = 1;
}
// Any changes here must be reflected in the CrostiniDiskImageStatus enum in
// Chrome's enums.xml.
enum DiskImageStatus {
// Unknown status.
DISK_STATUS_UNKNOWN = 0;
// The disk image was created.
DISK_STATUS_CREATED = 1;
// The disk already existed.
DISK_STATUS_EXISTS = 2;
// Unable to create the disk image.
DISK_STATUS_FAILED = 3;
// Specified Disk does not exist.
DISK_STATUS_DOES_NOT_EXIST = 4;
// The specified disk was destroyed.
DISK_STATUS_DESTROYED = 5;
// The command is executing.
DISK_STATUS_IN_PROGRESS = 6;
// The disk image was resized.
DISK_STATUS_RESIZED = 7;
// Operation failed because of lack of disk space.
DISK_STATUS_NOT_ENOUGH_SPACE = 8;
// Operation failed due to bad provided source image
DISK_STATUS_BAD_IMAGE = 9;
}
enum DiskImageAllocationType {
// Determine the allocation type based on the specified disk size. If the disk
// size is unspecified or 0, the disk image will be sparse. Otherwise the disk
// image will be preallocated.
// This default value exists to preserve the old behaviors for existing
// callers. New callers should specify either DISK_ALLOCATION_TYPE_SPARSE or
// DISK_ALLOCATION_TYPE_PREALLOCATE.
DISK_ALLOCATION_TYPE_AUTO = 0;
// Sparse disk image.
DISK_ALLOCATION_TYPE_SPARSE = 1;
// Non-sparse disk image with preallocated space.
DISK_ALLOCATION_TYPE_PREALLOCATE = 2;
}
// Request to concierge to create a disk image.
message CreateDiskImageRequest {
// The cryptohome id for the user's encrypted storage.
string cryptohome_id = 1;
// The name of the VM.
string vm_name = 2;
// The logical size of the new disk image, in bytes.
// If a non-zero value is combined with DISK_ALLOCATION_TYPE_AUTO or
// DISK_ALLOCATION_TYPE_PREALLOCATE |allocation_type|, the disk image will be
// preallocated and fixed to the given size.
// A non-zero value with DISK_ALLOCATION_TYPE_SPARSE |allocation_type| results
// in a sparse disk image of the specified size.
// If unspecified or 0, a sparse disk image of an automatically chosen size
// will be created, in which case |allocation_type| must not be
// DISK_ALLOCATION_TYPE_PREALLOCATE.
uint64 disk_size = 3;
// The type of disk image to be created.
DiskImageType image_type = 4;
// The storage location for the disk image.
StorageLocation storage_location = 5;
// Size of the source media associated with this image.
uint64 source_size = 6;
// Parameters to pass to Plugin VM helper to facilitate creating
// new image.
repeated string params = 7;
// Will create the specified filesystem on the image. If unspecified, no
// filesystem will be created.
FilesystemType filesystem_type = 8;
// Sets up the disk image to support storage ballooning. This setting is used
// exclusively with sparse images, i.e., if set to true, |allocation_type|
// must be DISK_ALLOCATION_TYPE_SPARSE (or DISK_ALLOCATION_TYPE_AUTO combined
// with |disk_size| = 0).
bool storage_ballooning = 9;
// Options passed to `mkfs` when creating a filesystem on the image. If
// unspecified, the default ones will be used.
repeated string mkfs_opts = 10;
// Options passed to `tune2fs` when creating a filesystem on the image. If
// unspecified or |filesystem_type| is not EXT4, `tune2fs` will not run.
repeated string tune2fs_opts = 11;
// Specifies whether the disk image should be sparse or not. If unspecified or
// DISK_ALLOCATION_TYPE_AUTO, the disk image will be sparse if and only if
// |disk_size| is unspecified or 0. DISK_ALLOCATION_TYPE_PREALLOCATE must be
// combined with a non-zero |disk_size|.
DiskImageAllocationType allocation_type = 12;
// Switch indicating that a zstd-compressed image has been passed as an FD,
// which will be decompressed and written as the disk image contents.
// Currently this is only used for baguette vm's.
bool copy_baguette_image = 13;
// Identify the vm type to write to the disk image.
VmInfo.VmType vm_type = 14;
}
// Response to a CreateDiskImageRequest.
message CreateDiskImageResponse {
// If true, the disk image has been successfully created.
DiskImageStatus status = 1;
// The absolute path to the created disk image, if it was successfully
// created or already existed.
string disk_path = 2;
// The failure reason if the disk image could not be created or doesn't exist.
string failure_reason = 3;
// Command identifier if status is DISK_STATUS_IN_PROGRESS.
string command_uuid = 4;
}
// Request to concierge to destroy a disk image.
message DestroyDiskImageRequest {
// The cryptohome id for the user's encrypted storage.
string cryptohome_id = 1;
// The name of the VM.
string vm_name = 2;
}
// Response to a DestroyDiskImageRequest.
message DestroyDiskImageResponse {
// If DISK_STATUS_DESTROYED, the disk image has been successfully destroyed.
// If DISK_STATUS_DOES_NOT_EXIST, the disk image had already been removed.
DiskImageStatus status = 1;
// The failure reason if the disk image could not be destroyed or doesn't
// exist.
string failure_reason = 3;
}
// Request to concierge to resize a disk image.
message ResizeDiskImageRequest {
// The cryptohome id for the user's encrypted storage.
string cryptohome_id = 1;
// The name of the vm image.
string vm_name = 2;
// The desired logical size of the disk image, in bytes.
uint64 disk_size = 3;
}
// Response to a ResizeDiskImageRequest.
message ResizeDiskImageResponse {
// If DISK_STATUS_RESIZED, the disk image has been successfully resized.
DiskImageStatus status = 1;
// The failure reason if the disk image could not be resized.
string failure_reason = 2;
// Command identifier if status is DISK_STATUS_IN_PROGRESS.
string command_uuid = 3;
}
// Request to concierge to export a disk image.
// Must be accompanied by at least 1 FD, the contents of the image will be
// written to the first passed FD. Takes an optional second FD which takes the
// sha256 digest.
message ExportDiskImageRequest {
// The cryptohome id for the user's encrypted storage.
string cryptohome_id = 1;
// The name of the VM.
string vm_name = 2;
// Whether we should calculate SHA256 digest of the resulting image. The
// digest is supposed to be written into the second attached file descriptor.
bool generate_sha256_digest = 3;
// Export image even if it may produce inconsistent result because, for
// example, VM is not shut down.
bool force = 4;
}
// Response to a ExportDiskImageRequest.
message ExportDiskImageResponse {
// If DISK_STATUS_CREATED, the disk image has been successfully exported.
DiskImageStatus status = 1;
// The failure reason if the disk image could not be exported.
string failure_reason = 2;
// Command identifier if status is DISK_STATUS_IN_PROGRESS.
string command_uuid = 3;
}
// Request to concierge to import a disk image. Must be accompanied by an FD.
message ImportDiskImageRequest {
// The cryptohome id for the user's encrypted storage.
string cryptohome_id = 1;
// The name of the VM that's being imported.
string vm_name = 2;
// The storage location for the disk image.
StorageLocation storage_location = 3;
// Size of the source image (corresponding to the passed FD).
// Used to calculate progress of the import operation.
uint64 source_size = 4;
// Identify the vm type to write to the disk image.
VmInfo.VmType vm_type = 5;
}
// Response to a ImportDiskImageRequest.
message ImportDiskImageResponse {
// If DISK_STATUS_CREATED, the disk image has been successfully imported.
DiskImageStatus status = 1;
// The failure reason if the disk image could not be imported.
string failure_reason = 2;
// Command identifier if status is DISK_STATUS_IN_PROGRESS.
string command_uuid = 3;
}
// Request about status of image import, export, or resize command.
message DiskImageStatusRequest {
// Command identifier.
string command_uuid = 1;
}
// Response to DiskImageStatusRequest. Also being sent as a signal.
message DiskImageStatusResponse {
// Command identifier.
string command_uuid = 1;
// Status of the command.
DiskImageStatus status = 2;
// The failure reason if the command could not be completed.
string failure_reason = 3;
// Progress from 0 to 100.
uint32 progress = 4;
}
// Request to cancel image import or export command that is being
// executed.
message CancelDiskImageRequest {
// Command identifier.
string command_uuid = 1;
}
// Request to list all VM disk images in the given storage area.
message ListVmDisksRequest {
// The cryptohome id for the user's encrypted storage.
string cryptohome_id = 1;
// The storage location to check.
StorageLocation storage_location = 2;
// Requester may set this field to 'true' to retrieve data about
// images in all known locations, in which case data in storage_location
// field will be ignored.
bool all_locations = 3;
// Tells concierge to only return data about specified VM with matching
// name. When empty, information about all VMs will be returned.
string vm_name = 4;
}
// Information about VM image.
message VmDiskInfo {
// Name of the image.
string name = 1;
// Location of the image.
StorageLocation storage_location = 2;
// The size of the image in bytes.
uint64 size = 3;
// The minimum size the image may be resized to, or 0 if unknown.
uint64 min_size = 4;
// The type of the disk image (raw, qcow2, etc.).
DiskImageType image_type = 5;
// True if the user chose the size for this disk.
// False if the disk is automatically sized based on free space.
bool user_chosen_size = 6;
// The absolute path to the disk.
string path = 7;
// The available space on the disk, or 0 if unknown.
uint64 available_space = 8;
// VM type of the disk image (mainly used to distinguish baguette and
// crostini).
VmInfo.VmType vm_type = 9;
// True if the disk image file has vm_type xattr and passed via vm_type.
bool has_vm_type = 10;
}
// Response to ListVmDisks {
message ListVmDisksResponse {
// If true, the images array is valid.
bool success = 1;
// List of disk images.
repeated VmDiskInfo images = 2;
// The failure reason if the disks could not be listed.
string failure_reason = 3;
// The total size in bytes on disk of the disk images in the response.
uint64 total_size = 4;
}
// Request to vm_concierge to attach a USB device to a VM.
message AttachUsbDeviceRequest {
// Name of the VM to attach the USB device to.
string vm_name = 1;
// The owner of the VM.
string owner_id = 2;
// The USB bus the USB device is connected to. This value should fit
// in a uint8_t.
uint32 bus_number = 3;
// The port number of the USB device on the bus. This value should
// fit in a uint8_t.
uint32 port_number = 4;
// Vendor ID of the USB device. This value should fit in a uint16_t.
uint32 vendor_id = 5;
// Produce ID of the USB device. This value should fit in a
// uint16_t.
uint32 product_id = 6;
}
// Response sent back by vm_concierge after it receives an
// AttachUsbDeviceRequest call.
message AttachUsbDeviceResponse {
// Was the USB device successfully attached?
bool success = 1;
// The USB port number that was allocated to the USB device on the guest.
uint32 guest_port = 2;
// The reason for the failure, if there was one.
string reason = 3;
}
// Request to vm_concierge to attach a security key to a VM.
message AttachKeyRequest {
// Name of the VM to attach the key to.
string vm_name = 1;
// The owner of the VM.
string owner_id = 2;
// String path to the hidraw device on the host.
string hidraw = 3;
}
// Response sent back by vm_concierge after it receives an
// AttachKeyRequest call.
message AttachKeyResponse {
// Was the key successfully attached?
bool success = 1;
// The USB port number that was allocated to the key on the guest.
uint32 guest_port = 2;
// The reason for the failure, if there was one.
string reason = 3;
}
// Request sent to remove a USB device from a VM.
message DetachUsbDeviceRequest {
// The name of the VM.
string vm_name = 1;
// The owner of the VM.
string owner_id = 2;
// The USB port the device is attached to on the guest. This value
// should fit in a uint8_t.
uint32 guest_port = 3;
}
// Request sent to get a list of all USB devices attached to a guest VM.
message ListUsbDeviceRequest {
// The name of the VM.
string vm_name = 1;
// The owner of the VM.
string owner_id = 2;
}
// A description of a single USB device.
message UsbDeviceMessage {
// The port it's attached to.
uint32 guest_port = 1;
// The vendor ID of the device.
uint32 vendor_id = 2;
// The product ID of the device.
uint32 product_id = 3;
// The name of the device.
string device_name = 4;
}
// Response sent back by vm_concierge after it receives a
// ListUsbDeviceRequest call.
message ListUsbDeviceResponse {
// Did the request succeed?
bool success = 1;
// List of USB device descriptors, one for each attached USB device.
repeated UsbDeviceMessage usb_devices = 2;
}
// Request to vm_concierge to attach an additional net tap device as a PCI
// device to a VM.
message AttachNetDeviceRequest {
// Name of the VM associated with vm_id
string vm_name = 1;
// The owner of the VM.
string owner_id = 2;
// The host interface name of the tap device.
string tap_name = 3;
}
// Response sent back by vm_concierge after it receives an
// AttachNetDeviceRequest call.
message AttachNetDeviceResponse {
// Was the device successfully attached?
bool success = 1;
// The PCI bus allocated to the PCI network device on the guest. Fits in u8.
uint32 guest_bus = 2;
// The reason for failure, if success is false.
string failure_reason = 3;
}
// Request sent to remove a hotplugged net tap PCI device from a VM.
message DetachNetDeviceRequest {
// Name of the VM associated with vm_id
string vm_name = 1;
// The owner of the VM.
string owner_id = 2;
// The PCI bus num for the device to remove. Fits in u8.
uint32 guest_bus = 3;
}
// Response sent back by vm_concierge after it receives a GetDnsSettings call.
// Also being broadcast via DnsSettingsChanged signal.
message DnsSettings {
// List of DNS servers.
repeated string nameservers = 1;
// List of search domains.
repeated string search_domains = 2;
}
enum CpuCgroup {
// The CPU cgroup for all Termina VM processes.
CPU_CGROUP_TERMINA = 0;
// The CPU cgroup for all Plugin VM processes.
CPU_CGROUP_PLUGINVM = 1;
// The CPU cgroup for all ARCVM processes.
CPU_CGROUP_ARCVM = 2;
}
enum CpuRestrictionState {
// The CPU usage is relaxed.
CPU_RESTRICTION_FOREGROUND = 0;
// The CPU usage is tightly restricted with cpu.shares.
CPU_RESTRICTION_BACKGROUND = 1;
// The CPU usage is tightly restricted with both cpu.shares and
// cpu.cfs_quota_us cgroup. The latter sets an absolute quota for the VM
// even when other (non-VM) processes are not busy. Currently, this works
// only for ARCVM.
CPU_RESTRICTION_BACKGROUND_WITH_CFS_QUOTA_ENFORCED = 2;
}
// Information that must be included with every SetVmCpuRestriction dbus
// message.
message SetVmCpuRestrictionRequest {
// The CPU cpu cgroup to change.
CpuCgroup cpu_cgroup = 1;
// The CPU restriction state to apply.
CpuRestrictionState cpu_restriction_state = 2;
}
// Response sent back by vm_concierge after it receives a SetVmCpuRestriction
// call.
message SetVmCpuRestrictionResponse {
// Did the request succeed?
bool success = 1;
}
// Request to adjust parameters of a given VM.
message AdjustVmRequest {
// An identifier for this VM.
string name = 1;
// The cryptohome id of the owner of this VM.
string owner_id = 2;
// Adjustment to be performed.
string operation = 3;
// Additional parameters for the adjustment operation.
repeated string params = 4;
}
// Request to reclaim memory of a given VM.
message ReclaimVmMemoryRequest {
// An identifier for this VM.
string name = 1;
// The current cyptohome id of this VM.
string owner_id = 2;
// number of pages allowed to be reclaimed in this round - 0 means unlimited
int32 page_limit = 3;
}
// Response to a ReclaimVmMemoryRequest.
message ReclaimVmMemoryResponse {
// If true, the memory of the VM was successfully reclaimed.
bool success = 1;
// If the attempt to reclaim memory failed, the reason for failure.
string failure_reason = 2;
}
// Request a list of all VMs owned by an id. Returns all VMs in Concierge's
// VmMap that match the owner_id, which includes starting and running VMs, but
// not stopped.
message ListVmsRequest {
// The cryptohome id to get the list of VMs for.
string owner_id = 1;
}
// Message used for listing VMs.
// TODO(b/325620275): remove in favor of extending VmInfo directly.
message ExtendedVmInfo {
// The name of the VM which has started.
string name = 1;
// The owner of the vm.
string owner_id = 2;
// Information about the VM that was started, if successful.
VmInfo vm_info = 3;
// Status of the VM.
VmStatus status = 4;
}
// Response to a ListVmsRequest.
message ListVmsResponse {
// If true, vms is valid.
bool success = 1;
// If getting a list of VMs failed, the reason for the failure.
string failure_reason = 2;
// The list of VMs that concierge is managing.
repeated ExtendedVmInfo vms = 3;
}
message GetVmGpuCachePathRequest {
// The name of the VM.
string name = 1;
// The owner of the VM.
string owner_id = 2;
}
message GetVmGpuCachePathResponse {
// Path to VM's GPU cache path.
string path = 1;
}
message AddGroupPermissionMesaRequest {
// The name of the VM.
string name = 1;
// The owner of the VM.
string owner_id = 2;
}
message GetVmLaunchAllowedRequest {}
message GetVmLaunchAllowedResponse {
// Whether the launch would be allowed.
bool allowed = 1;
// If not allowed, the reason why.
string reason = 2;
}
message GetVmLogsRequest {
// The name of the VM to get logs for.
string name = 1;
// The owner of the vm.
string owner_id = 2;
}
message GetVmLogsResponse {
// The log for the vm.
string log = 1;
}
// Vmm swap operations.
enum SwapOperation {
// Disable vmm swap.
DISABLE = 0;
// Ask to enable vmm swap and staging memory if possible.
ENABLE = 1;
// Forcibly swap out guest memory to disk if there is pending swap out.
SWAPOUT = 2;
// Enable vmm swap and staging memory regardless of vm conditions.
FORCE_ENABLE = 3;
}
// Vmm swap state.
enum SwappingState {
// Swapping out means the vm memory is swapping out to the disk.
SWAPPING_OUT = 0;
// Swapping in means the vm memory is swapping in from the disk.
SWAPPING_IN = 1;
}
// Request sent to vm_concierge for executing vmm swap operation on a VM.
message SwapVmRequest {
// The name of the VM.
string name = 1;
// The owner of the VM.
string owner_id = 2;
// The swap state changing operation.
SwapOperation operation = 3;
}
// Message used in the signal for notify a VM experiencing vmm swap IN/OUT.
message VmSwappingSignal {
// The name of the VM.
string name = 1;
// The owner of the VM.
string owner_id = 2;
// The state of vmm swap.
SwappingState state = 3;
}
// Installs Pflash associated with VM |vm_name| owned by |owner_id|. Requires
// the sender to also send an fd to a Pflash file.
//
// Fails if installing the pflash didn't succeed or a pflash file was already
// installed before.
message InstallPflashRequest {
// The name of the VM.
string vm_name = 1;
// The owner of the VM.
string owner_id = 2;
}
// Request sent to vm_concierge to inflate balloon in a vm until perceptible
// processes are tried to kill.
message AggressiveBalloonRequest {
// The name of the VM.
string name = 1;
// The owner of the VM.
string owner_id = 2;
// Whether enable inflating aggressive balloon or not.
bool enable = 3;
}
// Request to get an open FD to the VM Memory Management kills server.
message GetVmMemoryManagementKillsConnectionRequest {}
// Response to an GetVmMemoryManagementKillsConnection request.
// A successful response must be accompanied with the fd that was opened to the
// server.
message GetVmMemoryManagementKillsConnectionResponse {
// Whether the request was successful.
bool success = 1;
// The timeout the client should use for kill requests.
uint32 host_kill_request_timeout_ms = 3;
// The reason for failure.
string failure_reason = 2;
}
// Request sent to set up a new user within a VM.
message SetUpVmUserRequest {
// Name of the target VM.
string vm_name = 1;
// The owner of the VM.
string owner_id = 2;
// The username for the new user.
string username = 3;
// Optional UID for the new user.
optional uint32 uid = 4;
// Optional groups for the new user.
repeated string group_names = 5;
}
// Response sent for a SetUpVmUser call.
message SetUpVmUserResponse {
// Whether the user was successfully set up.
bool success = 1;
// The failure_reason if the user was not set up successfully.
string failure_reason = 2;
// If the uid specified in SetUpVmUserRequest already exists,
// this is the corresponding username. Otherwise, this is the
// username specified in SetUpVmUserRequest.
string username = 3;
}
// Fake battery set action
enum FakePowerAction {
// VM starts reporting fake power status
SET = 0;
// VM stops reporting fake power status
CANCEL = 1;
}
// Request send to SET/CANCEL fake battery config
message ModifyFakePowerConfigRequest {
// The name of the VM which has started.
string name = 1;
// The owner of the vm.
string owner_id = 2;
// Whether to set or cancel the fake power configuration
FakePowerAction action = 3;
// The maximum battery capacity bat device can report to guest. This field
// should only be set when the action is SET.
uint32 capacity_limit = 4;
}
// Request to mute/unmute vm audio
message MuteVmAudioRequest {
// The name of the VM to be muted/unmuted.
string name = 1;
// The owner of the vm.
string owner_id = 2;
// Set to true to mute, and false to unmute.
bool muted = 3;
}
// Response containing the URL of the Baguette image to download. This is a
// constant baked into the concierge binary.
message GetBaguetteImageUrlResponse {
string url = 1;
string sha256 = 2;
}