Merge branch 'feature/pc_identifiers' of
https://github.com/open-license-manager/open-license-manager.git into
feature/pc_identifiers
Conflicts:
src/library/hw_identifier/default_strategy.cpp
src/library/hw_identifier/identification_strategy.hpp
src/library/os/CMakeLists.txt
src/library/os/execution_environment.hpp
src/library/os/windows/cpu_info.cpp
src/library/os/windows/execution_environment.cpp
src/library/os/windows/isvm/BIOSReader.cpp
src/library/os/windows/isvm/BIOSReader.h
src/library/os/windows/os-win.c
| | |
| | | namespace license { |
| | | namespace os { |
| | | |
| | | /* |
| | | * windows bios sometimes reports vm names add execution environment detection from bios |
| | | const char *vmVendors[] = { |
| | | "VMware", "Microsoft Corporation", "Virtual Machine", "innotek GmbH", "PowerVM", "Bochs", "KVM"}; |
| | | */ |
| | | |
| | | typedef enum { NONE, CONTAINER, VM } VIRTUALIZATION; |
| | | |
| | | typedef enum { |
| | |
| | | std::string bios_description; |
| | | //detect if it's a kind of container technology (docker or lxc) |
| | | bool is_container() const; |
| | | |
| | | public: |
| | | ExecutionEnvironment(); |
| | | ~ExecutionEnvironment(){}; |
| | |
| | | return string(reinterpret_cast<const char *>(cpui), 12); |
| | | } |
| | | } // namespace os |
| | | ======= |
| | | using namespace std; |
| | | |
| | | CpuInfo::CpuInfo() {} |
| | | |
| | | CpuInfo::~CpuInfo() {} |
| | | /** |
| | | * Detect Virtual machine using hypervisor bit. |
| | | * @return true if the cpu hypervisor bit is set to 1 |
| | | */ |
| | | bool CpuInfo::is_hypervisor_set() const { |
| | | int cpui[4] = {0}; |
| | | __cpuid(cpui, 0x1); |
| | | |
| | | return ((cpui[2] >> 31) & 1); |
| | | } |
| | | |
| | | uint32_t CpuInfo::model() const { |
| | | int cpui[4] = {0}; |
| | | __cpuid(cpui, 0x1); |
| | | // ax bits 0-3 stepping,4-7 model,8-11 family id,12-13 processor type |
| | | // 14-15 reserved, 16-19 extended model, 20-27 extended family, 27-31 reserved |
| | | // bx bits 0-7 brand index |
| | | return (cpui[0] & 0x3FFF) | (cpui[0] & 0x3FF8000) >> 2 | (cpui[1] & 0xff) << 24; |
| | | } |
| | | |
| | | string CpuInfo::vendor() const { |
| | | // hypervisor flag false, try to get the vendor name, see if it's a virtual cpu |
| | | int cpui[4] = {0}; |
| | | __cpuid(cpui, 0x0); |
| | | return string(reinterpret_cast<const char *>(cpui), 12); |
| | | } |
| | | |
| | | >>>>>>> branch 'feature/pc_identifiers' of https://github.com/open-license-manager/open-license-manager.git |
| | | } /* namespace license */ |
| | |
| | | /* |
| | | * virtualization.cpp |
| | | * |
| | | * Created on: Dec 15, 2019 |
| | | * Author: GC |
| | | */ |
| | | #include <paths.h> |
| | | #include <sys/stat.h> |
| | | #include <unistd.h> |
| | | #include <fstream> |
| | | #include <iostream> |
| | | #include <stdio.h> |
| | | #include <string> |
| | | #include <string.h> |
| | | #include <dirent.h> |
| | | #include <sys/utsname.h> |
| | | |
| | | #include "isvm/BIOSReader.h" |
| | | #include "isvm/Native.h" |
| | | #include "../../base/base.h" |
| | | #include "../../base/StringUtils.h" |
| | | #include "../cpu_info.hpp" |
| | | #include "../execution_environment.hpp" |
| | | |
| | | namespace license { |
| | | namespace os { |
| | | using namespace std; |
| | | |
| | | ExecutionEnvironment::ExecutionEnvironment() { |
| | | |
| | | |
| | | VIRTUALIZATION ExecutionEnvironment::getVirtualization() { |
| | | VIRTUALIZATION result; |
| | | CpuInfo cpuInfo; |
| | | bool isContainer = false; |
| | | if (isContainer) { |
| | | result = CONTAINER; |
| | | } else if (cpuInfo.cpu_virtual() || is_cloud()) { |
| | | result = VM; |
| | | } else { |
| | | result = NONE; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | bool ExecutionEnvironment::is_cloud() { return getCloudProvider() != ON_PREMISE; } |
| | | |
| | | bool ExecutionEnvironment::is_docker() { return false; } |
| | | |
| | | CLOUD_PROVIDER ExecutionEnvironment::getCloudProvider() { |
| | | if (InitEntryPoints()) { |
| | | BIOSReader reader; |
| | | SystemInformation info = reader.readSystemInfo(); |
| | | sys_vendor = toupper_copy(info.Manufacturer); |
| | | bios_vendor = toupper_copy(info.ProductName); |
| | | bios_description = toupper_copy(info.SysVersion) + toupper_copy(info.family); |
| | | |
| | | const char *vmVendors[] = { |
| | | "VMware", "Microsoft Corporation", "Virtual Machine", "innotek GmbH", "PowerVM", "Bochs", "KVM"}; |
| | | |
| | | const int count = _countof(vmVendors); |
| | | for (int i = 0; i != count; ++i) { |
| | | const char *vendor = vmVendors[i]; |
| | | |
| | | if (std::string::npos != info.Manufacturer.find(vendor) || |
| | | std::string::npos != info.ProductName.find(vendor) || |
| | | std::string::npos != info.SerialNum.find(vendor)) { |
| | | std::cout << "Inside virual machine!"; |
| | | return 1; |
| | | } |
| | | } |
| | | } else { |
| | | return -1; |
| | | } |
| | | } |
| | | |
| | | //TODO |
| | | bool ExecutionEnvironment::is_docker() const { return false; } |
| | | //TODO |
| | | bool ExecutionEnvironment::is_container() const { return is_docker(); } |
| | | } // namespace os |
| | | } // namespace license |