From 9ec8a13985063d57652f22895de804586ff0b586 Mon Sep 17 00:00:00 2001 From: Eric Ernst Date: Thu, 12 May 2022 13:39:33 -0700 Subject: [PATCH] virtcontainers: introduce hypervisor_darwin Fixes: #5995 Placeholder skeleton at this point - implementation will be added after basic build refactoring lands. Signed-off-by: Eric Ernst Signed-off-by: Danny Canter --- src/runtime/virtcontainers/hypervisor.go | 8 ++++++ .../virtcontainers/hypervisor_darwin.go | 26 +++++++++++++++++++ .../virtcontainers/hypervisor_linux.go | 1 - 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/runtime/virtcontainers/hypervisor_darwin.go diff --git a/src/runtime/virtcontainers/hypervisor.go b/src/runtime/virtcontainers/hypervisor.go index 955da7d107..b8482e7b4b 100644 --- a/src/runtime/virtcontainers/hypervisor.go +++ b/src/runtime/virtcontainers/hypervisor.go @@ -49,6 +49,9 @@ const ( // DragonballHypervisor is the Dragonball hypervisor. DragonballHypervisor HypervisorType = "dragonball" + // VirtFrameworkHypervisor is the Darwin Virtualization.framework hypervisor + VirtframeworkHypervisor HypervisorType = "virtframework" + // MockHypervisor is a mock hypervisor for testing purposes MockHypervisor HypervisorType = "mock" @@ -84,6 +87,8 @@ var ( ) // In some architectures the maximum number of vCPUs depends on the number of physical cores. +// TODO (dcantah): Find a suitable value for darwin/vfw. Seems perf degrades if > number of host +// cores. var defaultMaxVCPUs = govmm.MaxVCPUs() // agnostic list of kernel root parameters for NVDIMM @@ -177,6 +182,9 @@ func (hType *HypervisorType) Set(value string) error { case "dragonball": *hType = DragonballHypervisor return nil + case "virtframework": + *hType = VirtframeworkHypervisor + return nil case "mock": *hType = MockHypervisor return nil diff --git a/src/runtime/virtcontainers/hypervisor_darwin.go b/src/runtime/virtcontainers/hypervisor_darwin.go new file mode 100644 index 0000000000..26956eced7 --- /dev/null +++ b/src/runtime/virtcontainers/hypervisor_darwin.go @@ -0,0 +1,26 @@ +// Copyright (c) 2023 Apple Inc. +// +// SPDX-License-Identifier: Apache-2.0 +// + +package virtcontainers + +import ( + "fmt" +) + +// NewHypervisor returns a hypervisor from a hypervisor type. +func NewHypervisor(hType HypervisorType) (Hypervisor, error) { + switch hType { + case VirtframeworkHypervisor: + return &virtFramework{}, nil + case MockHypervisor: + return &mockHypervisor{}, nil + default: + return nil, fmt.Errorf("Unknown hypervisor type %s", hType) + } +} + +func availableGuestProtection() (guestProtection, error) { + return noneProtection, nil +} diff --git a/src/runtime/virtcontainers/hypervisor_linux.go b/src/runtime/virtcontainers/hypervisor_linux.go index 3d81c1ada0..f419e0982f 100644 --- a/src/runtime/virtcontainers/hypervisor_linux.go +++ b/src/runtime/virtcontainers/hypervisor_linux.go @@ -27,7 +27,6 @@ func generateVMSocket(id string, vmStogarePath string) (interface{}, error) { // NewHypervisor returns an hypervisor from a hypervisor type. func NewHypervisor(hType HypervisorType) (Hypervisor, error) { - switch hType { case QemuHypervisor: return &qemu{}, nil