1ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong/* 2ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * Copyright (C) 2017 The Android Open Source Project 3ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * 4ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * Licensed under the Apache License, Version 2.0 (the "License"); 5ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * you may not use this file except in compliance with the License. 6ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * You may obtain a copy of the License at 7ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * 8ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * http://www.apache.org/licenses/LICENSE-2.0 9ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * 10ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * Unless required by applicable law or agreed to in writing, software 11ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * distributed under the License is distributed on an "AS IS" BASIS, 12ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * See the License for the specific language governing permissions and 14ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong * limitations under the License. 15ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong */ 16ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 17d2b7e64894cd739da60f129ac38d0cf035238206Yifan Hong#ifndef ANDROID_VINTF_RUNTIME_INFO_H 18d2b7e64894cd739da60f129ac38d0cf035238206Yifan Hong#define ANDROID_VINTF_RUNTIME_INFO_H 19ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 20c66ad1e825894b7e1c2999913338c2a3f5936fa0Yifan Hong#include "Version.h" 21c66ad1e825894b7e1c2999913338c2a3f5936fa0Yifan Hong 22ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong#include <map> 23ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong#include <string> 24dc145b385fc9d369335d8176ff6b504b6c37f219Yifan Hong#include <vector> 25ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 26ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong#include <utils/Errors.h> 27ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 28ccf967b6c8422975d000de558ed3f01456ea44beYifan Hongnamespace android { 29ccf967b6c8422975d000de558ed3f01456ea44beYifan Hongnamespace vintf { 30ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 31c66ad1e825894b7e1c2999913338c2a3f5936fa0Yifan Hongstruct CompatibilityMatrix; 32c66ad1e825894b7e1c2999913338c2a3f5936fa0Yifan Hong 33d2b7e64894cd739da60f129ac38d0cf035238206Yifan Hong// Runtime Info sent to OTA server 34a7201e77e0c5221ada625ba5fcf89b25af45c10aYifan Hongstruct RuntimeInfo { 35ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 36a7201e77e0c5221ada625ba5fcf89b25af45c10aYifan Hong RuntimeInfo() {} 37c66ad1e825894b7e1c2999913338c2a3f5936fa0Yifan Hong 38ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong // /proc/version 39ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong // utsname.sysname 40ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong const std::string &osName() const; 41ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong // utsname.nodename 42ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong const std::string &nodeName() const; 43ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong // utsname.release 44ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong const std::string &osRelease() const; 45ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong // utsname.version 46ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong const std::string &osVersion() const; 47ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong // utsname.machine 48ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong const std::string &hardwareId() const; 499346c6184acd2aaed8b7b18476c2494f118be4b4Yifan Hong // extract from utsname.release 509346c6184acd2aaed8b7b18476c2494f118be4b4Yifan Hong const KernelVersion &kernelVersion() const; 51ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 529346c6184acd2aaed8b7b18476c2494f118be4b4Yifan Hong const std::map<std::string, std::string> &kernelConfigs() const; 539346c6184acd2aaed8b7b18476c2494f118be4b4Yifan Hong 549346c6184acd2aaed8b7b18476c2494f118be4b4Yifan Hong const Version &bootVbmetaAvbVersion() const; 559346c6184acd2aaed8b7b18476c2494f118be4b4Yifan Hong const Version &bootAvbVersion() const; 569346c6184acd2aaed8b7b18476c2494f118be4b4Yifan Hong 579499a758bf5cd9daaf2e413727013c7fe8fb0eaeYifan Hong // /proc/cpuinfo 589499a758bf5cd9daaf2e413727013c7fe8fb0eaeYifan Hong const std::string &cpuInfo() const; 599499a758bf5cd9daaf2e413727013c7fe8fb0eaeYifan Hong 60ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong // /sys/fs/selinux/policyvers 61ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong size_t kernelSepolicyVersion() const; 62ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 63dc145b385fc9d369335d8176ff6b504b6c37f219Yifan Hong // Return whether this RuntimeInfo works with the given compatibility matrix. Return true if: 64dc145b385fc9d369335d8176ff6b504b6c37f219Yifan Hong // - mat is a framework compat-mat 65dc145b385fc9d369335d8176ff6b504b6c37f219Yifan Hong // - sepolicy.kernel-sepolicy-version == kernelSepolicyVersion() 66dc145b385fc9d369335d8176ff6b504b6c37f219Yifan Hong // - /proc/config.gz matches the requirements. Note that /proc/config.gz is read when the 67dc145b385fc9d369335d8176ff6b504b6c37f219Yifan Hong // RuntimeInfo object is created (the first time VintfObject::GetRuntimeInfo is called), 68dc145b385fc9d369335d8176ff6b504b6c37f219Yifan Hong // not when RuntimeInfo::checkCompatibility is called. 69dc145b385fc9d369335d8176ff6b504b6c37f219Yifan Hong // - avb-vbmetaversion matches related sysprops 70c66ad1e825894b7e1c2999913338c2a3f5936fa0Yifan Hong bool checkCompatibility(const CompatibilityMatrix &mat, 71c66ad1e825894b7e1c2999913338c2a3f5936fa0Yifan Hong std::string *error = nullptr) const; 72c66ad1e825894b7e1c2999913338c2a3f5936fa0Yifan Hong 73ccf967b6c8422975d000de558ed3f01456ea44beYifan Hongprivate: 74ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 75a7201e77e0c5221ada625ba5fcf89b25af45c10aYifan Hong friend struct RuntimeInfoFetcher; 763daec8116236a720edf3349b59470e41dd6c1056Yifan Hong friend class VintfObject; 77c66ad1e825894b7e1c2999913338c2a3f5936fa0Yifan Hong friend struct LibVintfTest; 78a7201e77e0c5221ada625ba5fcf89b25af45c10aYifan Hong friend std::string dump(const RuntimeInfo &ki); 79ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 803daec8116236a720edf3349b59470e41dd6c1056Yifan Hong status_t fetchAllInformation(); 81ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 82ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong // /proc/config.gz 83ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong // Key: CONFIG_xxx; Value: the value after = sign. 84f1af75256f3daea4089dae7e4abc124e35ea7de8Yifan Hong std::map<std::string, std::string> mKernelConfigs; 85ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong std::string mOsName; 86ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong std::string mNodeName; 87ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong std::string mOsRelease; 88ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong std::string mOsVersion; 89ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong std::string mHardwareId; 90c66ad1e825894b7e1c2999913338c2a3f5936fa0Yifan Hong KernelVersion mKernelVersion; 91ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 9210a218ed30cdc124ad239495c8adbc22a82d0cf4Yifan Hong std::vector<std::string> mSepolicyFilePaths; 939499a758bf5cd9daaf2e413727013c7fe8fb0eaeYifan Hong std::string mCpuInfo; 946a3071a9c6b37e6562b7f5c3ccb82b2536e10bd5Yifan Hong Version mBootVbmetaAvbVersion; 956a3071a9c6b37e6562b7f5c3ccb82b2536e10bd5Yifan Hong Version mBootAvbVersion; 9610a218ed30cdc124ad239495c8adbc22a82d0cf4Yifan Hong 97ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong size_t mKernelSepolicyVersion; 98ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 99ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong}; 100ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 101ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong} // namespace vintf 102ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong} // namespace android 103ccf967b6c8422975d000de558ed3f01456ea44beYifan Hong 104d2b7e64894cd739da60f129ac38d0cf035238206Yifan Hong#endif // ANDROID_VINTF_RUNTIME_INFO_H 105