From 09094be5f2afa21bb5b8221580303f125fd90d0c Mon Sep 17 00:00:00 2001 From: Razvan Corneliu Date: Mon, 10 May 2021 21:02:27 +0100 Subject: [PATCH] Add support for VMware ESXi on ARM Virt-what doesn't recognize VMware VMs for AARCH64/ARM (with licensing implications in ESXi Fling for ARM and Fusion v.Next for ARM). I've created and attached a patch that adds both support for recognizing ESXi and the automated tests for it. --- configure.ac | 2 + tests/esx-arm/Makefile.am | 30 ++++++++++++ tests/esx-arm/proc/cpuinfo | 18 +++++++ .../esx-arm/proc/device-tree/hypervisor/compatible | 1 + tests/esx-arm/proc/device-tree/hypervisor/name | 1 + tests/esx-arm/proc/self/status | 55 ++++++++++++++++++++++ tests/esx-arm/sbin/dmidecode | 2 + tests/esx-arm/sbin/uname | 2 + tests/esx-arm/sbin/virt-what-cpuid-helper | 2 + tests/esx-arm/test.sh | 32 +++++++++++++ virt-what.in | 4 ++ 11 files changed, 149 insertions(+) create mode 100644 tests/esx-arm/Makefile.am create mode 100644 tests/esx-arm/proc/cpuinfo create mode 100644 tests/esx-arm/proc/device-tree/hypervisor/compatible create mode 100644 tests/esx-arm/proc/device-tree/hypervisor/name create mode 100644 tests/esx-arm/proc/self/status create mode 100755 tests/esx-arm/sbin/dmidecode create mode 100755 tests/esx-arm/sbin/uname create mode 100755 tests/esx-arm/sbin/virt-what-cpuid-helper create mode 100755 tests/esx-arm/test.sh diff --git a/configure.ac b/configure.ac index bce03a1..9d0a423 100644 --- a/configure.ac +++ b/configure.ac @@ -41,6 +41,7 @@ tests="\ baremetal \ bhyve \ docker \ + esx-arm \ esx4.1 \ hyperv \ kvm \ @@ -85,6 +86,7 @@ AC_CONFIG_FILES([Makefile tests/baremetal/Makefile tests/bhyve/Makefile tests/docker/Makefile + tests/esx-arm/Makefile tests/esx4.1/Makefile tests/hyperv/Makefile tests/kvm/Makefile diff --git a/tests/esx-arm/Makefile.am b/tests/esx-arm/Makefile.am new file mode 100644 index 0000000..b87ec83 --- /dev/null +++ b/tests/esx-arm/Makefile.am @@ -0,0 +1,30 @@ +# Makefile for virt-what +# Copyright (C) 2008-2011 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +CLEANFILES = *~ + +TESTS = test.sh + +EXTRA_DIST = \ + test.sh \ + proc/cpuinfo \ + proc/device-tree/hypervisor/compatible \ + proc/device-tree/hypervisor/name \ + proc/self/status \ + sbin/dmidecode \ + sbin/uname \ + sbin/virt-what-cpuid-helper diff --git a/tests/esx-arm/proc/cpuinfo b/tests/esx-arm/proc/cpuinfo new file mode 100644 index 0000000..246b574 --- /dev/null +++ b/tests/esx-arm/proc/cpuinfo @@ -0,0 +1,18 @@ +processor : 0 +BogoMIPS : 108.00 +Features : fp asimd evtstrm crc32 cpuid +CPU implementer : 0x41 +CPU architecture: 8 +CPU variant : 0x0 +CPU part : 0xd08 +CPU revision : 3 + +processor : 1 +BogoMIPS : 108.00 +Features : fp asimd evtstrm crc32 cpuid +CPU implementer : 0x41 +CPU architecture: 8 +CPU variant : 0x0 +CPU part : 0xd08 +CPU revision : 3 + diff --git a/tests/esx-arm/proc/device-tree/hypervisor/compatible b/tests/esx-arm/proc/device-tree/hypervisor/compatible new file mode 100644 index 0000000..0554874 --- /dev/null +++ b/tests/esx-arm/proc/device-tree/hypervisor/compatible @@ -0,0 +1 @@ +vmware diff --git a/tests/esx-arm/proc/device-tree/hypervisor/name b/tests/esx-arm/proc/device-tree/hypervisor/name new file mode 100644 index 0000000..d508e44 --- /dev/null +++ b/tests/esx-arm/proc/device-tree/hypervisor/name @@ -0,0 +1 @@ +hypervisor diff --git a/tests/esx-arm/proc/self/status b/tests/esx-arm/proc/self/status new file mode 100644 index 0000000..13dd246 --- /dev/null +++ b/tests/esx-arm/proc/self/status @@ -0,0 +1,55 @@ +Name: cat +Umask: 0022 +State: R (running) +Tgid: 292937 +Ngid: 0 +Pid: 292937 +PPid: 10956 +TracerPid: 0 +Uid: 0 0 0 0 +Gid: 0 0 0 0 +FDSize: 256 +Groups: 0 +NStgid: 292937 +NSpid: 292937 +NSpgid: 292937 +NSsid: 10956 +VmPeak: 6400 kB +VmSize: 6400 kB +VmLck: 0 kB +VmPin: 0 kB +VmHWM: 960 kB +VmRSS: 960 kB +RssAnon: 448 kB +RssFile: 512 kB +RssShmem: 0 kB +VmData: 640 kB +VmStk: 192 kB +VmExe: 64 kB +VmLib: 1600 kB +VmPTE: 384 kB +VmSwap: 0 kB +HugetlbPages: 0 kB +CoreDumping: 0 +THP_enabled: 1 +Threads: 1 +SigQ: 2/3947 +SigPnd: 0000000000000000 +ShdPnd: 0000000000000000 +SigBlk: 0000000000000000 +SigIgn: 0000000000000000 +SigCgt: 0000000000000000 +CapInh: 0000000000000000 +CapPrm: 0000003fffffffff +CapEff: 0000003fffffffff +CapBnd: 0000003fffffffff +CapAmb: 0000000000000000 +NoNewPrivs: 0 +Seccomp: 0 +Speculation_Store_Bypass: vulnerable +Cpus_allowed: 3 +Cpus_allowed_list: 0-1 +Mems_allowed: 01 +Mems_allowed_list: 0 +voluntary_ctxt_switches: 1 +nonvoluntary_ctxt_switches: 0 diff --git a/tests/esx-arm/sbin/dmidecode b/tests/esx-arm/sbin/dmidecode new file mode 100755 index 0000000..e53c12f --- /dev/null +++ b/tests/esx-arm/sbin/dmidecode @@ -0,0 +1,2 @@ +#!/bin/sh - +exit 1 diff --git a/tests/esx-arm/sbin/uname b/tests/esx-arm/sbin/uname new file mode 100755 index 0000000..bd33a2d --- /dev/null +++ b/tests/esx-arm/sbin/uname @@ -0,0 +1,2 @@ +#!/bin/sh - +echo aarch64 diff --git a/tests/esx-arm/sbin/virt-what-cpuid-helper b/tests/esx-arm/sbin/virt-what-cpuid-helper new file mode 100755 index 0000000..77a6692 --- /dev/null +++ b/tests/esx-arm/sbin/virt-what-cpuid-helper @@ -0,0 +1,2 @@ +#!/bin/sh - +# nothing diff --git a/tests/esx-arm/test.sh b/tests/esx-arm/test.sh new file mode 100755 index 0000000..344afef --- /dev/null +++ b/tests/esx-arm/test.sh @@ -0,0 +1,32 @@ +# Test for ESXi on ARM +# Copyright (C) 2008-2011 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +output="$(PATH=../..:$PATH virt-what --test-root=. 2>&1)" +expected="vmware" + +if [ "$output" != "$expected" ]; then + echo "$0: test failed because output did not match expected" + echo "Expected output was:" + echo "----------------------------------------" + echo "$expected" + echo "----------------------------------------" + echo "But the actual output of the program was:" + echo "----------------------------------------" + echo "$output" + echo "----------------------------------------" + exit 1 +fi diff --git a/virt-what.in b/virt-what.in index d52171c..b7d266b 100644 --- a/virt-what.in +++ b/virt-what.in @@ -264,6 +264,10 @@ elif [ "$arch" = "arm" ] || [ "$arch" = "aarch64" ]; then echo xen skip_qemu_kvm=true skip_lkvm=true + elif [ -d "${root}/proc/device-tree/hypervisor" ] && + grep -q "vmware" "${root}/proc/device-tree/hypervisor/compatible"; then + echo vmware + skip_lkvm=true fi elif [ "$arch" = "ia64" ]; then if [ -d "${root}/sys/bus/xen" -a ! -d "${root}/sys/bus/xen-backend" ]; then -- 1.8.3.1