80cc3e3eab
proot provides userspace-powered emulation of chroot and mount --bind, lending it to be used on environments without unprivileged user namespaces, or in otherwise restricted environments like Android. In order to achieve this, proot makes use of the kernel's ptrace() facility, which we can use in order to detect its presence. Since it doesn't use any kind of namespacing, including PID namespacing, we don't need to do any tricks when trying to get the tracer's metadata. For our purposes, proot is listed as a "container", since we mostly use this also as the bucket for non-container-but-container-like technologies like WSL. As such, it seems like a good fit for this section as well.
62 lines
1.7 KiB
C
62 lines
1.7 KiB
C
/* SPDX-License-Identifier: LGPL-2.1+ */
|
|
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include "macro.h"
|
|
|
|
enum {
|
|
VIRTUALIZATION_NONE = 0,
|
|
|
|
VIRTUALIZATION_VM_FIRST,
|
|
VIRTUALIZATION_KVM = VIRTUALIZATION_VM_FIRST,
|
|
VIRTUALIZATION_QEMU,
|
|
VIRTUALIZATION_BOCHS,
|
|
VIRTUALIZATION_XEN,
|
|
VIRTUALIZATION_UML,
|
|
VIRTUALIZATION_VMWARE,
|
|
VIRTUALIZATION_ORACLE,
|
|
VIRTUALIZATION_MICROSOFT,
|
|
VIRTUALIZATION_ZVM,
|
|
VIRTUALIZATION_PARALLELS,
|
|
VIRTUALIZATION_BHYVE,
|
|
VIRTUALIZATION_QNX,
|
|
VIRTUALIZATION_ACRN,
|
|
VIRTUALIZATION_VM_OTHER,
|
|
VIRTUALIZATION_VM_LAST = VIRTUALIZATION_VM_OTHER,
|
|
|
|
VIRTUALIZATION_CONTAINER_FIRST,
|
|
VIRTUALIZATION_SYSTEMD_NSPAWN = VIRTUALIZATION_CONTAINER_FIRST,
|
|
VIRTUALIZATION_LXC_LIBVIRT,
|
|
VIRTUALIZATION_LXC,
|
|
VIRTUALIZATION_OPENVZ,
|
|
VIRTUALIZATION_DOCKER,
|
|
VIRTUALIZATION_PODMAN,
|
|
VIRTUALIZATION_RKT,
|
|
VIRTUALIZATION_WSL,
|
|
VIRTUALIZATION_PROOT,
|
|
VIRTUALIZATION_CONTAINER_OTHER,
|
|
VIRTUALIZATION_CONTAINER_LAST = VIRTUALIZATION_CONTAINER_OTHER,
|
|
|
|
_VIRTUALIZATION_MAX,
|
|
_VIRTUALIZATION_INVALID = -1
|
|
};
|
|
|
|
static inline bool VIRTUALIZATION_IS_VM(int x) {
|
|
return x >= VIRTUALIZATION_VM_FIRST && x <= VIRTUALIZATION_VM_LAST;
|
|
}
|
|
|
|
static inline bool VIRTUALIZATION_IS_CONTAINER(int x) {
|
|
return x >= VIRTUALIZATION_CONTAINER_FIRST && x <= VIRTUALIZATION_CONTAINER_LAST;
|
|
}
|
|
|
|
int detect_vm(void);
|
|
int detect_container(void);
|
|
int detect_virtualization(void);
|
|
|
|
int running_in_userns(void);
|
|
int running_in_chroot(void);
|
|
|
|
const char *virtualization_to_string(int v) _const_;
|
|
int virtualization_from_string(const char *s) _pure_;
|