Add avb.vbmeta-version to CompatibilityMatrix and RuntimeInfo
RuntimeInfo fetch avb vbmeta version by reading the following two sysprops:
- ro.boot.vbmeta.avb_version
- ro.boot.avb_version
If the sysprop does not exist, 0.0 is set.
Test: libvintf_test
Test: adb shell vintf (shows 0.0 because CLs
for sysprops are not merged yet)
Bug: 35322304
Change-Id: I345bc792d1a7ceb585d246ec657707814b42ceff
diff --git a/parse_xml.cpp b/parse_xml.cpp
index 207d4ed..28806ba 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -647,6 +647,18 @@
const HalManifestConverter halManifestConverter{};
+const XmlTextConverter<Version> avbVersionConverter{"vbmeta-version"};
+struct AvbConverter : public XmlNodeConverter<Version> {
+ std::string elementName() const override { return "avb"; }
+ void mutateNode(const Version &m, NodeType *root, DocType *d) const override {
+ appendChild(root, avbVersionConverter(m, d));
+ }
+ bool buildObject(Version *object, NodeType *root) const override {
+ return parseChild(root, avbVersionConverter, object);
+ }
+};
+const AvbConverter avbConverter{};
+
struct CompatibilityMatrixConverter : public XmlNodeConverter<CompatibilityMatrix> {
std::string elementName() const override { return "compatibility-matrix"; }
void mutateNode(const CompatibilityMatrix &m, NodeType *root, DocType *d) const override {
@@ -656,6 +668,7 @@
if (m.mType == SchemaType::FRAMEWORK) {
appendChildren(root, matrixKernelConverter, m.framework.mKernels, d);
appendChild(root, sepolicyConverter(m.framework.mSepolicy, d));
+ appendChild(root, avbConverter(m.framework.mAvbMetaVersion, d));
} else if (m.mType == SchemaType::DEVICE) {
appendChild(root, vndkConverter(m.device.mVndk, d));
}
@@ -671,7 +684,8 @@
if (object->mType == SchemaType::FRAMEWORK) {
if (!parseChildren(root, matrixKernelConverter, &object->framework.mKernels) ||
- !parseChild(root, sepolicyConverter, &object->framework.mSepolicy)) {
+ !parseChild(root, sepolicyConverter, &object->framework.mSepolicy) ||
+ !parseChild(root, avbConverter, &object->framework.mAvbMetaVersion)) {
return false;
}
} else if (object->mType == SchemaType::DEVICE) {