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