/* * cpu_info_common.cpp * * Created on: Jan 19, 2020 * Author: GC */ #include #include "cpu_info.hpp" namespace license { namespace os { using namespace std; const unordered_map virtual_cpu_names{ {"bhyve bhyve ", V_OTHER}, {"KVMKVMKVM", KVM}, {"Microsoft Hv", HV}, {" lrpepyh vr", HV}, {"prl hyperv ", V_OTHER}, {"VMwareVMware", VMWARE}, {"XenVMMXenVMM", V_XEN}, {"ACRNACRNACRN", V_OTHER}, {"VBoxVBoxVBox", VIRTUALBOX}}; /** * Detect Virtual machine using hypervisor bit. * @return true if the cpu hypervisor bit is set to 1 */ bool CpuInfo::cpu_virtual() const { bool is_virtual = is_hypervisor_set(); if (!is_virtual) { string cpu_vendor = vendor(); auto it = virtual_cpu_names.find(cpu_vendor); is_virtual = (it != virtual_cpu_names.end()); } return is_virtual; } VIRTUALIZATION_DETAIL CpuInfo::virtualization_details() const { string cpu_vendor = vendor(); auto it = virtual_cpu_names.find(cpu_vendor); VIRTUALIZATION_DETAIL result = BARE_TO_METAL; if (it != virtual_cpu_names.end()) { result = it->second; } else if (is_hypervisor_set()) { result = (VIRTUALIZATION_DETAIL)V_OTHER; } return result; } } // namespace os } // namespace license