Merge changes Ia242c505,I5f641294 into main

* changes:
  [rialto] Move request processing to a separate module
  [rialto] Add communication protocol library for host and rialto
diff --git a/pvmfw/src/config.rs b/pvmfw/src/config.rs
index db27001..d0a6b7f 100644
--- a/pvmfw/src/config.rs
+++ b/pvmfw/src/config.rs
@@ -18,7 +18,7 @@
 use core::mem;
 use core::ops::Range;
 use core::result;
-use log::info;
+use log::{info, warn};
 use static_assertions::const_assert_eq;
 use vmbase::util::RangeExt;
 use zerocopy::{FromBytes, LayoutVerified};
@@ -47,8 +47,6 @@
     InvalidMagic,
     /// Version of the header isn't supported.
     UnsupportedVersion(Version),
-    /// Header sets flags incorrectly or uses reserved flags.
-    InvalidFlags(u32),
     /// Header describes configuration data that doesn't fit in the expected buffer.
     InvalidSize(usize),
     /// Header entry is missing.
@@ -64,7 +62,6 @@
             Self::HeaderMisaligned => write!(f, "Reserved region is misaligned"),
             Self::InvalidMagic => write!(f, "Wrong magic number"),
             Self::UnsupportedVersion(v) => write!(f, "Version {v} not supported"),
-            Self::InvalidFlags(v) => write!(f, "Flags value {v:#x} is incorrect or reserved"),
             Self::InvalidSize(sz) => write!(f, "Total size ({sz:#x}) overflows reserved region"),
             Self::MissingEntry(entry) => write!(f, "Mandatory {entry:?} entry is missing"),
             Self::EntryOutOfBounds(entry, range, limits) => {
@@ -88,7 +85,7 @@
         self.total_size as usize
     }
 
-    pub fn body_offset(&self) -> Result<usize> {
+    pub fn body_lowest_bound(&self) -> Result<usize> {
         let entries_offset = mem::size_of::<Self>();
 
         // Ensure that the entries are properly aligned and do not require padding.
@@ -104,6 +101,11 @@
         let last_entry = match self.version {
             Self::VERSION_1_0 => Entry::DebugPolicy,
             Self::VERSION_1_1 => Entry::VmDtbo,
+            v @ Version { major: 1, .. } => {
+                const LATEST: Version = Header::VERSION_1_1;
+                warn!("Parsing unknown config data version {v} as version {LATEST}");
+                return Ok(Entry::COUNT);
+            }
             v => return Err(Error::UnsupportedVersion(v)),
         };
 
@@ -181,8 +183,9 @@
             return Err(Error::InvalidMagic);
         }
 
-        if header.flags != 0 {
-            return Err(Error::InvalidFlags(header.flags));
+        let header_flags = header.flags;
+        if header_flags != 0 {
+            warn!("Ignoring unknown config flags: {header_flags:#x}");
         }
 
         info!("pvmfw config version: {}", header.version);
@@ -206,7 +209,7 @@
         // Validate that we won't get an invalid alignment in the following due to padding to u64.
         const_assert_eq!(mem::size_of::<HeaderEntry>() % mem::size_of::<u64>(), 0);
 
-        let limits = header.body_offset()?..total_size;
+        let limits = header.body_lowest_bound()?..total_size;
         let ranges = [
             // TODO: Find a way to do this programmatically even if the trait
             // `core::marker::Copy` is not implemented for `core::ops::Range<usize>`.
diff --git a/tests/hostside/java/com/android/microdroid/test/PvmfwImgTest.java b/tests/hostside/java/com/android/microdroid/test/PvmfwImgTest.java
index 30ad9e2..320b722 100644
--- a/tests/hostside/java/com/android/microdroid/test/PvmfwImgTest.java
+++ b/tests/hostside/java/com/android/microdroid/test/PvmfwImgTest.java
@@ -143,7 +143,7 @@
     public void testInvalidConfigVersion_doesNotBoot() throws Exception {
         // Disclaimer: Update versions when it becomes valid
         Pvmfw pvmfw =
-                new Pvmfw.Builder(mPvmfwBinFileOnHost, mBccFileOnHost).setVersion(1, 100).build();
+                new Pvmfw.Builder(mPvmfwBinFileOnHost, mBccFileOnHost).setVersion(2, 0).build();
         pvmfw.serialize(mCustomPvmfwBinFileOnHost);
 
         assertThrows(