New file |
| | |
| | | /* |
| | | * cpu_info_common.cpp |
| | | * |
| | | * Created on: Jan 19, 2020 |
| | | * Author: GC |
| | | */ |
| | | #include <unordered_map> |
| | | #include "cpu_info.hpp" |
| | | |
| | | namespace license { |
| | | namespace os { |
| | | using namespace std; |
| | | |
| | | const unordered_map<string, VIRTUALIZATION_DETAIL> 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 |