• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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     /// This does not have a default & the value is expected to be in json for deserialization
44     pub export_tombstones: bool,
45 }
46 
47 /// OS config
48 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
49 pub struct OsConfig {
50     /// The name of OS to use
51     pub name: String,
52 }
53 
54 impl Default for OsConfig {
default() -> Self55     fn default() -> Self {
56         Self { name: "microdroid".to_owned() }
57     }
58 }
59 
60 /// Payload's task can be one of plain executable
61 /// or an .so library which can be started via /system/bin/microdroid_launcher
62 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
63 pub enum TaskType {
64     /// Task's command indicates the path to the executable binary.
65     #[serde(rename = "executable")]
66     Executable,
67     /// Task's command indicates the .so library in /mnt/apk/lib/{arch}
68     #[serde(rename = "microdroid_launcher")]
69     MicrodroidLauncher,
70 }
71 
72 /// Task to run in a VM
73 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
74 pub struct Task {
75     /// Decides how to execute the command: executable(default) | microdroid_launcher
76     #[serde(default, rename = "type")]
77     pub type_: TaskType,
78 
79     /// Command to run
80     /// - For executable task, this is the path to the executable.
81     /// - For microdroid_launcher task, this is the name of .so
82     pub command: String,
83 
84     /// Args to the command
85     #[serde(default)]
86     pub args: Vec<String>,
87 }
88 
89 impl Default for TaskType {
default() -> TaskType90     fn default() -> TaskType {
91         TaskType::Executable
92     }
93 }
94 
95 /// APEX config
96 /// For now, we only pass the name of APEX.
97 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
98 pub struct ApexConfig {
99     /// The name of APEX
100     pub name: String,
101 }
102 
103 /// APK config
104 #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
105 pub struct ApkConfig {
106     /// The path of APK
107     pub path: String,
108 }
109