You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.5 KiB
113 lines
3.5 KiB
/* |
|
* Copyright (C) 2017 The Android Open Source Project |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
*/ |
|
|
|
#ifndef ANDROID_VINTF_RUNTIME_INFO_H |
|
#define ANDROID_VINTF_RUNTIME_INFO_H |
|
|
|
#include "Version.h" |
|
|
|
#include <map> |
|
#include <string> |
|
#include <vector> |
|
|
|
#include <utils/Errors.h> |
|
|
|
#include "DisabledChecks.h" |
|
#include "MatrixKernel.h" |
|
#include "Version.h" |
|
|
|
namespace android { |
|
namespace vintf { |
|
|
|
struct CompatibilityMatrix; |
|
|
|
// Runtime Info sent to OTA server |
|
struct RuntimeInfo { |
|
|
|
RuntimeInfo() {} |
|
|
|
// /proc/version |
|
// utsname.sysname |
|
const std::string &osName() const; |
|
// utsname.nodename |
|
const std::string &nodeName() const; |
|
// utsname.release |
|
const std::string &osRelease() const; |
|
// utsname.version |
|
const std::string &osVersion() const; |
|
// utsname.machine |
|
const std::string &hardwareId() const; |
|
// extract from utsname.release |
|
const KernelVersion &kernelVersion() const; |
|
|
|
const std::map<std::string, std::string> &kernelConfigs() const; |
|
|
|
const Version &bootVbmetaAvbVersion() const; |
|
const Version &bootAvbVersion() const; |
|
|
|
// /proc/cpuinfo |
|
const std::string &cpuInfo() const; |
|
|
|
// /sys/fs/selinux/policyvers |
|
size_t kernelSepolicyVersion() const; |
|
|
|
// Return whether this RuntimeInfo works with the given compatibility matrix. Return true if: |
|
// - mat is a framework compat-mat |
|
// - sepolicy.kernel-sepolicy-version == kernelSepolicyVersion() |
|
// - /proc/config.gz matches the requirements. Note that /proc/config.gz is read when the |
|
// RuntimeInfo object is created (the first time VintfObject::GetRuntimeInfo is called), |
|
// not when RuntimeInfo::checkCompatibility is called. |
|
// - avb-vbmetaversion matches related sysprops |
|
bool checkCompatibility(const CompatibilityMatrix& mat, std::string* error = nullptr, |
|
DisabledChecks disabledChecks = ENABLE_ALL_CHECKS) const; |
|
|
|
private: |
|
friend struct RuntimeInfoFetcher; |
|
friend class VintfObject; |
|
friend struct LibVintfTest; |
|
friend std::string dump(const RuntimeInfo &ki); |
|
|
|
status_t fetchAllInformation(); |
|
|
|
// mKernelVersion = x'.y'.z', minLts = x.y.z, |
|
// match if x == x' , y == y' , and z <= z'. |
|
bool matchKernelVersion(const KernelVersion& minLts) const; |
|
// return true if all kernel configs in matrixConfigs matches. |
|
bool matchKernelConfigs(const std::vector<KernelConfig>& matrixConfigs, |
|
std::string* error = nullptr) const; |
|
|
|
// /proc/config.gz |
|
// Key: CONFIG_xxx; Value: the value after = sign. |
|
std::map<std::string, std::string> mKernelConfigs; |
|
std::string mOsName; |
|
std::string mNodeName; |
|
std::string mOsRelease; |
|
std::string mOsVersion; |
|
std::string mHardwareId; |
|
KernelVersion mKernelVersion; |
|
|
|
std::vector<std::string> mSepolicyFilePaths; |
|
std::string mCpuInfo; |
|
Version mBootVbmetaAvbVersion; |
|
Version mBootAvbVersion; |
|
|
|
size_t mKernelSepolicyVersion = 0u; |
|
}; |
|
|
|
} // namespace vintf |
|
} // namespace android |
|
|
|
#endif // ANDROID_VINTF_RUNTIME_INFO_H
|
|
|