Initial work to make VM config file optional
Modify VirtualMachineAppConfig to allow configPath to be omitted;
instead a subset of the available config options can be specified
directly.
Modify VS to map the config options to the Metadata proto file.
At this stage nothing ever sets the payload config directly, and
Microdroid would reject it if it received it, but this at least
establishes the plumbing.
Bug: 243513572
Test: atest MicrodroidTests
Change-Id: I596384abf6e3bbbccd8934ba28fa3a85faa51b56
diff --git a/microdroid/payload/metadata.cc b/microdroid/payload/metadata.cc
index 07083e9..fd07bdd 100644
--- a/microdroid/payload/metadata.cc
+++ b/microdroid/payload/metadata.cc
@@ -40,7 +40,7 @@
}
size = be32toh(*reinterpret_cast<uint32_t*>(content.data()));
if (content.size() < length_prefix_bytes + size) {
- return Error() << "Invalid metadata: size(" << size << ") mimatches to the content size("
+ return Error() << "Invalid metadata: size(" << size << ") doesn't match content size("
<< content.size() - length_prefix_bytes << ")";
}
content = content.substr(length_prefix_bytes, size);
diff --git a/microdroid/payload/metadata.proto b/microdroid/payload/metadata.proto
index 2e92f55..229d03f 100644
--- a/microdroid/payload/metadata.proto
+++ b/microdroid/payload/metadata.proto
@@ -26,7 +26,11 @@
ApkPayload apk = 3;
- string payload_config_path = 4;
+ oneof payload {
+ // Path to JSON config file inside the APK.
+ string config_path = 4;
+ PayloadConfig config = 5;
+ }
}
message ApexPayload {
@@ -58,3 +62,18 @@
string idsig_partition_name = 3;
}
+
+message PayloadConfig {
+ // Required.
+ // Path to the payload binary file inside the APK.
+ string payload_binary_path = 1;
+
+ // Required.
+ // Whether tombstones from crashes inside the VM should be exported to the host.
+ bool export_tombstones = 2;
+
+ // Optional.
+ // Arguments to be passed to the payload.
+ // TODO(b/249064104): Remove this
+ repeated string args = 3;
+}
diff --git a/microdroid/payload/metadata/src/lib.rs b/microdroid/payload/metadata/src/lib.rs
index eb9d90d..bfbec60 100644
--- a/microdroid/payload/metadata/src/lib.rs
+++ b/microdroid/payload/metadata/src/lib.rs
@@ -23,7 +23,9 @@
use std::io::Read;
use std::io::Write;
-pub use microdroid_metadata::metadata::{ApexPayload, ApkPayload, Metadata};
+pub use microdroid_metadata::metadata::{
+ ApexPayload, ApkPayload, Metadata, Metadata_oneof_payload as PayloadMetadata, PayloadConfig,
+};
/// Reads a metadata from a reader
pub fn read_metadata<T: Read>(mut r: T) -> Result<Metadata> {
diff --git a/microdroid/payload/mk_payload.cc b/microdroid/payload/mk_payload.cc
index 4dbcabf..d31333f 100644
--- a/microdroid/payload/mk_payload.cc
+++ b/microdroid/payload/mk_payload.cc
@@ -181,7 +181,7 @@
}
if (config.payload_config_path.has_value()) {
- *metadata.mutable_payload_config_path() = config.payload_config_path.value();
+ *metadata.mutable_config_path() = config.payload_config_path.value();
}
std::ofstream out(filename);