Skip to content

Commit

Permalink
Merge branch 'feature/pc_identifiers' of
Browse files Browse the repository at this point in the history
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
  • Loading branch information
gcontini committed Mar 8, 2020
2 parents 9afdac1 + 46f5b46 commit 6545407
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 19 deletions.
Empty file added build/.gitkeep
Empty file.
9 changes: 8 additions & 1 deletion src/library/os/execution_environment.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@
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 {
Expand All @@ -35,8 +41,9 @@ class ExecutionEnvironment {
std::string sys_vendor;
std::string bios_vendor;
std::string bios_description;
//detect if it's a kind of container technology (docker or lxc)
// detect if it's a kind of container technology (docker or lxc)
bool is_container() const;

public:
ExecutionEnvironment();
~ExecutionEnvironment(){};
Expand Down
34 changes: 34 additions & 0 deletions src/library/os/windows/cpu_info.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,38 @@ string CpuInfo::vendor() const {
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 */
61 changes: 43 additions & 18 deletions src/library/os/windows/execution_environment.cpp
Original file line number Diff line number Diff line change
@@ -1,39 +1,64 @@
/*
* 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

0 comments on commit 6545407

Please sign in to comment.