• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 
18 #define LOG_TAG "libvintf"
19 
20 #include "RuntimeInfo.h"
21 
22 #include "CompatibilityMatrix.h"
23 #include "parse_string.h"
24 
25 namespace android {
26 namespace vintf {
27 
osName() const28 const std::string &RuntimeInfo::osName() const {
29     return mOsName;
30 }
31 
nodeName() const32 const std::string &RuntimeInfo::nodeName() const {
33     return mNodeName;
34 }
35 
osRelease() const36 const std::string &RuntimeInfo::osRelease() const {
37     return mOsRelease;
38 }
39 
osVersion() const40 const std::string &RuntimeInfo::osVersion() const {
41     return mOsVersion;
42 }
43 
hardwareId() const44 const std::string &RuntimeInfo::hardwareId() const {
45     return mHardwareId;
46 }
47 
kernelVersion() const48 const KernelVersion &RuntimeInfo::kernelVersion() const {
49     return mKernel.version();
50 }
51 
kernelConfigs() const52 const std::map<std::string, std::string> &RuntimeInfo::kernelConfigs() const {
53     return mKernel.configs();
54 }
55 
kernelSepolicyVersion() const56 size_t RuntimeInfo::kernelSepolicyVersion() const {
57     return mKernelSepolicyVersion;
58 }
59 
cpuInfo() const60 const std::string &RuntimeInfo::cpuInfo() const {
61     return mCpuInfo;
62 }
63 
bootVbmetaAvbVersion() const64 const Version &RuntimeInfo::bootVbmetaAvbVersion() const {
65     return mBootVbmetaAvbVersion;
66 }
67 
bootAvbVersion() const68 const Version &RuntimeInfo::bootAvbVersion() const {
69     return mBootAvbVersion;
70 }
71 
checkCompatibility(const CompatibilityMatrix & mat,std::string * error,CheckFlags::Type flags) const72 bool RuntimeInfo::checkCompatibility(const CompatibilityMatrix& mat, std::string* error,
73                                      CheckFlags::Type flags) const {
74     if (mat.mType != SchemaType::FRAMEWORK) {
75         if (error != nullptr) {
76             *error = "Should not check runtime info against " + to_string(mat.mType)
77                     + " compatibility matrix.";
78         }
79         return false;
80     }
81     if (kernelSepolicyVersion() < mat.framework.mSepolicy.kernelSepolicyVersion()) {
82         if (error != nullptr) {
83             *error =
84                 "kernelSepolicyVersion = " + to_string(kernelSepolicyVersion()) +
85                 " but required >= " + to_string(mat.framework.mSepolicy.kernelSepolicyVersion());
86         }
87         return false;
88     }
89 
90     // mat.mSepolicy.sepolicyVersion() is checked against static
91     // HalManifest.device.mSepolicyVersion in HalManifest::checkCompatibility.
92 
93     if (flags.isKernelEnabled()) {
94         if (!mKernel.matchKernelRequirements(mat.framework.mKernels, error)) {
95             return false;
96         }
97     }
98 
99     if (flags.isAvbEnabled()) {
100         const Version& matAvb = mat.framework.mAvbMetaVersion;
101         if (mBootAvbVersion.majorVer != matAvb.majorVer ||
102             mBootAvbVersion.minorVer < matAvb.minorVer) {
103             if (error != nullptr) {
104                 std::stringstream ss;
105                 ss << "AVB version " << mBootAvbVersion << " does not match framework matrix "
106                    << matAvb;
107                 *error = ss.str();
108             }
109             return false;
110         }
111         if (mBootVbmetaAvbVersion.majorVer != matAvb.majorVer ||
112             mBootVbmetaAvbVersion.minorVer < matAvb.minorVer) {
113             if (error != nullptr) {
114                 std::stringstream ss;
115                 ss << "Vbmeta version " << mBootVbmetaAvbVersion
116                    << " does not match framework matrix " << matAvb;
117                 *error = ss.str();
118             }
119             return false;
120         }
121     }
122 
123     return true;
124 }
125 
126 } // namespace vintf
127 } // namespace android
128