X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fbasic%2Fvirt.c;h=bccde00f77a50eaff80f348774c3307a151f16bc;hb=893c787a64c37b37e94cdce8e3edcfbc4cbb6984;hp=f1d5145fc30a6dc2c893393e92003fe9ea5ae556;hpb=6fe07bd8f8802afd7cfe020dca0f26300227bc54;p=elogind.git diff --git a/src/basic/virt.c b/src/basic/virt.c index f1d5145fc..bccde00f7 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -19,15 +19,22 @@ along with systemd; If not, see . ***/ -#include #include +#include #include -#include "util.h" +#include "alloc-util.h" +#include "dirent-util.h" +#include "fd-util.h" +#include "fileio.h" #include "process-util.h" +#include "stat-util.h" +#include "string-table.h" +#include "string-util.h" +#include "util.h" #include "virt.h" -#include "fileio.h" +#if 0 /// UNNEEDED by elogind static int detect_vm_cpuid(void) { /* CPUID is an x86 specific interface. */ @@ -263,13 +270,20 @@ int detect_vm(void) { if (cached_found >= 0) return cached_found; - r = detect_vm_cpuid(); + /* We have to use the correct order here: + * Some virtualization technologies do use KVM hypervisor but are + * expected to be detected as something else. So detect DMI first. + * + * An example is Virtualbox since version 5.0, which uses KVM backend. + * Detection via DMI works corretly, the CPU ID would find KVM + * only. */ + r = detect_vm_dmi(); if (r < 0) return r; if (r != VIRTUALIZATION_NONE) goto finish; - r = detect_vm_dmi(); + r = detect_vm_cpuid(); if (r < 0) return r; if (r != VIRTUALIZATION_NONE) @@ -314,6 +328,7 @@ finish: cached_found = r; return r; } +#endif // 0 int detect_container(void) { @@ -325,6 +340,7 @@ int detect_container(void) { { "lxc-libvirt", VIRTUALIZATION_LXC_LIBVIRT }, { "systemd-nspawn", VIRTUALIZATION_SYSTEMD_NSPAWN }, { "docker", VIRTUALIZATION_DOCKER }, + { "rkt", VIRTUALIZATION_RKT }, }; static thread_local int cached_found = _VIRTUALIZATION_INVALID; @@ -402,8 +418,7 @@ finish: return r; } -/// UNNEEDED by elogind -#if 0 +#if 0 /// UNNEEDED by elogind int detect_virtualization(void) { int r; @@ -415,6 +430,17 @@ int detect_virtualization(void) { } #endif // 0 +int running_in_chroot(void) { + int ret; + + ret = files_same("/proc/1/root", "/"); + if (ret < 0) + return ret; + + return ret == 0; +} + +#if 0 /// UNNEEDED by elogind static const char *const virtualization_table[_VIRTUALIZATION_MAX] = { [VIRTUALIZATION_NONE] = "none", [VIRTUALIZATION_KVM] = "kvm", @@ -434,7 +460,9 @@ static const char *const virtualization_table[_VIRTUALIZATION_MAX] = { [VIRTUALIZATION_LXC] = "lxc", [VIRTUALIZATION_OPENVZ] = "openvz", [VIRTUALIZATION_DOCKER] = "docker", + [VIRTUALIZATION_RKT] = "rkt", [VIRTUALIZATION_CONTAINER_OTHER] = "container-other", }; DEFINE_STRING_TABLE_LOOKUP(virtualization, int); +#endif // 0