1 // Copyright 2021, The Android Open Source Project 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 //! VM Payload Config 16 17 use serde::{Deserialize, Serialize}; 18 19 /// VM payload config 20 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] 21 pub struct VmPayloadConfig { 22 /// OS config. Default: "microdroid" 23 #[serde(default)] 24 pub os: OsConfig, 25 26 /// Task to run in a VM 27 #[serde(default)] 28 pub task: Option<Task>, 29 30 /// APEXes to activate in a VM 31 #[serde(default)] 32 pub apexes: Vec<ApexConfig>, 33 34 /// Extra APKs to be passed to a VM 35 #[serde(default)] 36 pub extra_apks: Vec<ApkConfig>, 37 38 /// Tells VirtualizationService to use staged APEXes if possible 39 #[serde(default)] 40 pub prefer_staged: bool, 41 42 /// Whether to export the tomsbtones (VM crashes) out of VM to host 43 /// Default: true for debuggable VMs, false for non-debuggable VMs 44 pub export_tombstones: Option<bool>, 45 46 /// Whether the authfs service should be started in the VM. This enables read or write of host 47 /// files with integrity checking, but not confidentiality. 48 #[serde(default)] 49 pub enable_authfs: bool, 50 } 51 52 /// OS config 53 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] 54 pub struct OsConfig { 55 /// The name of OS to use 56 pub name: String, 57 } 58 59 impl Default for OsConfig { default() -> Self60 fn default() -> Self { 61 Self { name: "microdroid".to_owned() } 62 } 63 } 64 65 /// Payload's task can be one of plain executable 66 /// or an .so library which can be started via /system/bin/microdroid_launcher 67 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize, Default)] 68 pub enum TaskType { 69 /// Task's command indicates the path to the executable binary. 70 #[serde(rename = "executable")] 71 #[default] 72 Executable, 73 /// Task's command indicates the .so library in /mnt/apk/lib/{arch} 74 #[serde(rename = "microdroid_launcher")] 75 MicrodroidLauncher, 76 } 77 78 /// Task to run in a VM 79 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] 80 pub struct Task { 81 /// Decides how to execute the command: executable(default) | microdroid_launcher 82 #[serde(default, rename = "type")] 83 pub type_: TaskType, 84 85 /// Command to run 86 /// - For executable task, this is the path to the executable. 87 /// - For microdroid_launcher task, this is the name of .so 88 pub command: String, 89 } 90 91 /// APEX config 92 /// For now, we only pass the name of APEX. 93 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] 94 pub struct ApexConfig { 95 /// The name of APEX 96 pub name: String, 97 } 98 99 /// APK config 100 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] 101 pub struct ApkConfig { 102 /// The path of APK 103 pub path: String, 104 } 105