1 // Copyright 2017 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 syntax = "proto3"; 6 option optimize_for = LITE_RUNTIME; 7 8 // This file defines messages used for starting, stopping, and managing VMs. 9 package vm_tools.concierge; 10 11 // Specification of the key components of a VM. 12 message VirtualMachineSpec { 13 // Path to the kernel that should be used for the VM. 14 string kernel = 1; 15 16 // Path to the disk image that should be used as the root file system for 17 // the VM. 18 string rootfs = 2; 19 } 20 21 // The type of disk image. 22 enum DiskImageType { 23 // A raw file. 24 DISK_IMAGE_RAW = 0; 25 26 // A qcow2-compatible disk image. 27 DISK_IMAGE_QCOW2 = 1; 28 } 29 30 // Describes any additional disk images that should be mounted inside the VM. 31 message DiskImage { 32 // Path to the disk image on the host. 33 string path = 1; 34 35 // Path where this disk image will be mounted inside the VM. 36 string mount_point = 2; 37 38 // The file system type for this disk image. 39 string fstype = 3; 40 41 // Any special flags to be used when mounting the file system. Specified the 42 // same way as in mount(2). 43 uint64 flags = 4; 44 45 // Any additional data associated with the mount. 46 string data = 5; 47 48 // If true, the disk image will be mounted writable. 49 bool writable = 6; 50 51 // If true, the disk image will be mounted. 52 bool do_mount = 7; 53 54 // Image type of the disk. 55 DiskImageType image_type = 8; 56 } 57 58 // Information about a particular VM. 59 message VmInfo { 60 // The IPv4 address assigned to the VM, in network byte order. 61 fixed32 ipv4_address = 1; 62 63 // The process ID of the main crosvm process for the VM. 64 int32 pid = 2; 65 66 // The virtual socket context id assigned to the VM. 67 int64 cid = 3; 68 } 69 70 // Information that must be included with every StartVm dbus message. 71 message StartVmRequest { 72 // The VM that should be started. This is ignored if starting a termina VM, 73 // which will always use the latest component from imageloader. 74 VirtualMachineSpec vm = 1; 75 76 // Any additional disks that should be mounted inside the VM. 77 repeated DiskImage disks = 2; 78 79 // Path to a shared directory that will be mounted via NFS inside the VM. 80 string shared_directory = 3; 81 82 // The human-readable name to be assigned to this VM. 83 string name = 4; 84 85 // If true, concierge should also perform termina-specific setup. 86 bool start_termina = 5; 87 } 88 89 // Information sent back by vm_concierge in response to a StartVm dbus message. 90 message StartVmResponse { 91 // If true, the VM was started successfully. |vm_info| will have non-default 92 // values only if this is true. 93 bool success = 1; 94 95 // If the VM failed to start, the reason for the failure. 96 string failure_reason = 2; 97 98 // Information about the VM that was started, if successful. 99 VmInfo vm_info = 3; 100 } 101 102 // Information that must be included with every StopVm dbus message. 103 message StopVmRequest { 104 // The name of the VM to be stopped. 105 string name = 1; 106 } 107 108 // Response sent back by vm_concierge when it receives a StopVm dbus message. 109 message StopVmResponse { 110 // If true, the requested VM was stopped. 111 bool success = 1; 112 113 // The failure_reason if the requested VM could not be stopped. 114 string failure_reason = 2; 115 } 116 117 // Request for information about the VM. 118 message GetVmInfoRequest { 119 // The name of the VM to query. 120 string name = 1; 121 } 122 123 // Response sent back by vm_concierge for a GetVmInfo dbus message. 124 message GetVmInfoResponse { 125 // If true, the requested VM exists and info was returned. 126 bool success = 1; 127 128 // Information about the VM that was requested. 129 VmInfo vm_info = 2; 130 } 131 132 // The type of storage location for a disk image. 133 enum StorageLocation { 134 // Subdirectory under /home/root/<id>/crosvm. 135 STORAGE_CRYPTOHOME_ROOT = 0; 136 137 // The user's Downloads directory, under /home/user/<id>/Downloads. 138 STORAGE_CRYPTOHOME_DOWNLOADS = 1; 139 } 140 141 enum DiskImageStatus { 142 // Unknown status. 143 DISK_STATUS_UNKNOWN = 0; 144 145 // The disk image was created. 146 DISK_STATUS_CREATED = 1; 147 148 // The disk already existed. 149 DISK_STATUS_EXISTS = 2; 150 151 // Unable to create the disk image. 152 DISK_STATUS_FAILED = 3; 153 154 // Specified Disk does not exist. 155 DISK_STATUS_DOES_NOT_EXIST = 4; 156 157 // The specified disk was destroyed. 158 DISK_STATUS_DESTROYED = 5; 159 } 160 161 // Request to concierge to create a disk image. 162 message CreateDiskImageRequest { 163 // The cryptohome id for the user's encrypted storage. 164 string cryptohome_id = 1; 165 166 // The path to the disk image. This must be a relative path, and any 167 // directories must already exist. 168 string disk_path = 2; 169 170 // The logical size of the new disk image, in bytes. 171 uint64 disk_size = 3; 172 173 // The type of disk image to be created. 174 DiskImageType image_type = 4; 175 176 // The storage location for the disk image. 177 StorageLocation storage_location = 5; 178 } 179 180 // Response to a CreateDiskImageRequest. 181 message CreateDiskImageResponse { 182 // If true, the disk image has been successfully created. 183 DiskImageStatus status = 1; 184 185 // The absolute path to the created disk image, if it was successfully 186 // created or already existed. 187 string disk_path = 2; 188 189 // The failure reason if the disk image could not be created or doesn't exist. 190 string failure_reason = 3; 191 } 192 193 // Request to concierge to destroy a disk image. 194 message DestroyDiskImageRequest { 195 // The cryptohome id for the user's encrypted storage. 196 string cryptohome_id = 1; 197 198 // The path to the disk image. This must be a relative path. 199 string disk_path = 2; 200 201 // The storage location for the disk image. 202 StorageLocation storage_location = 3; 203 } 204 205 // Response to a DestroyDiskImageRequest. 206 message DestroyDiskImageResponse { 207 // If DISK_STATUS_DESTROYED, the disk image has been successfully destroyed. 208 // If DISK_STATUS_DOES_NOT_EXIST, the disk image had already been removed. 209 DiskImageStatus status = 1; 210 211 // The failure reason if the disk image could not be destroyed or doesn't exist. 212 string failure_reason = 3; 213 } 214