From nobody Sat Jun 13 12:16:46 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1776877016; cv=none; d=zohomail.com; s=zohoarc; b=arFTFG3+/Xr9lIf9AfdwyHRDRSQzC9up+uV8AYvW58Ez9Y/fviNH+T1GZyXTz3kcjr7Tn4GLX1MdWHsnZLZYN9dabqO3ijCwObU0RboedxoO75/GUDGExBKEULIXk0V2tt7mluqbZvIzZLcp7Vc55r+YlBCmCIiTSPDi/Pt7pRo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776877016; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=UnPRs+Q66p/fFZtcKPyTxm03BMKhUtQy+4uCU9RzEvA=; b=APcFrBvGEKGQVcUuSjZGLXJeTUwLY1K2I2G9oVzHPZYAqR/kz4OGXcM3wlP8HkoQE8zY4DqVrXEcCuuJDpJcGvbYZYJW2bzWswErh/+uX+L7r4+0hKAgp0peiYUWTFKHRYAgmjYO8vWznxLxUXfDPjCedusI7MEGjp99rQ+NfrM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 177687701662367.18092033689811; Wed, 22 Apr 2026 09:56:56 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 1C37D3F311; Wed, 22 Apr 2026 12:56:55 -0400 (EDT) Received: from [172.19.199.9] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 604E441B57; Wed, 22 Apr 2026 12:49:11 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id ED30141958; Wed, 22 Apr 2026 12:48:55 -0400 (EDT) Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 9AE2A41851 for ; Wed, 22 Apr 2026 12:48:51 -0400 (EDT) Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-ba36357195bso681692166b.0 for ; Wed, 22 Apr 2026 09:48:51 -0700 (PDT) Received: from tulp.my.domain (2001-1c02-1a15-3000-ee82-4536-a8f2-9e22.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:ee82:4536:a8f2:9e22]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ba451210e26sm573097766b.8.2026.04.22.09.48.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 09:48:49 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776876530; x=1777481330; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UnPRs+Q66p/fFZtcKPyTxm03BMKhUtQy+4uCU9RzEvA=; b=mQdJaU5IDdoPzfZTo9c5Z0lh602ggNpXWfcoai3T3YcJYIfIiQ2kr8y47f8R719c3b hc1cXeIqhgcoDg5PLQMknk9hTEKcqomKtIj1m/zYiOi4tO+h0nqloYFQZi4RePynfHTO GyLu6t5JgvOccjFkj9szsMnu9itoK0Q9Y7bAMVrm7fak7HmpHpSwAJdAJAKS7LeS54FL tl0mOTDjQFP+/RsnhmdJvCT6nEFI7YugEC1cLD2QBOa0l4tz2dU3yzJnoJnaBkhjxA8S HzfA5MkTdun5D7AL8+a7ECxPuTAzgTC0sCb0gix4DmaqTVkzYm1KHWT2kyGXTIfsBj+8 7dsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776876530; x=1777481330; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=UnPRs+Q66p/fFZtcKPyTxm03BMKhUtQy+4uCU9RzEvA=; b=IIuG3jYNOgVkvgtae1+NO9+Fb/wn2kgx20xX8Aw80Hdavk/sUMR0pViwvwgDWXdKxc Ur0Gc0tSfZl7km1uGXTO7wKzLSCKXmDqQfp4rqnwcr2kDAPL6tf5kKPAvXFcloC9YrCe OpL8qShTOZC9QjUq+tsSqo4VaSM9rJ9nejAHNumuzjpb7gFNWXv5KBD5PeNiXiASVuYP f7q4Lby+SmpDwcWhH+YX7Fsroq7wSySt/Rh3YUuRVfQTLBEhG+W78yspM+028jwSWE6t iQbc3cOHeX5mfeRUbZ2/4kKi1p4uuRhf1uefqnYcwhjIvkfVNKRAy3QWYXaBvftkx1y2 ywDw== X-Gm-Message-State: AOJu0YztT3Aba6ZGsNVS+X9CiW7nIbxZ33LeJZS0qecBxw6S0/Vh+Tbz +Hex63v94Y2h/2yF1671BgZo/25B9hoq9klwQ3Ass7X5YHx8CBW3Ij/DOqqi7iid X-Gm-Gg: AeBDieveuH/FUBwi6oQ1oQKmbT8oDmiQP01B2mMJe9j4lc8xZFdblW6/AEHkldQBjWk ehMzz97xNUI7PobfQJUHDD7ZjP6We+ee04pFuZeLuKshIqKpa0w2WH1sbSspK9b+uaaL+lwnQRC WiqeFc+jSJCyoWi9IooP+SM2mtGdKhkoeSNQCYcS5jWUEVIfBgcVCHtj3UdpNN0QWEBUFCJqdMC oayKz5niid3zYWm0Mx5huNKyr2OkafGLGWrh2drMz4z+ZxWK6RC5ntARdU1lFb/t/l1IXb5R9YM meJ3S2YBwuhQ4MHqir4ZDeejesFMONkUsPL0L5Mc6KcZ0Ej1wt1gFttuKqgXYDsJD/57SJbl8WD 1NJN5KnkxTG8FlmxTk/OaSgJy2269Zhj5V9RBDtHtpt+mm8ERw9k9wd8NCJaHje3ztAaZqsxlyf 2LhQW7Hr3eUXC7y+r4QRbrSdI0sgXmBfPQa9TJBC23+4UIkPGt69upV2Pha4/F3OqEjSeBGF+s9 8LycjNmk6f8HzHoacrKqRGavvbOxMEiSDKx2YiKpsTNyL1z X-Received: by 2002:a17:907:1c97:b0:b98:155e:609 with SMTP id a640c23a62f3a-ba41a82643amr1002694566b.36.1776876529606; Wed, 22 Apr 2026 09:48:49 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH v2 1/2] bhyve: add virtio-console support Date: Wed, 22 Apr 2026 18:46:46 +0200 Message-ID: <20260422164647.84558-2-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260422164647.84558-1-bogorodskiy@gmail.com> References: <20260422164647.84558-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: EYPC57DHCGNRP5EPQADWOLCPBDU43U37 X-Message-ID-Hash: EYPC57DHCGNRP5EPQADWOLCPBDU43U37 X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1776877018621158500 Content-Type: text/plain; charset="utf-8" Bhyve supports virtio-console devices using the following syntax: -s 2:0,virtio-console,org.qemu.guest_agent.0=3D/path/to/unix/socket,other.= port=3D/other/socket,... There are two details about that to consider. The first one is that only up to 16 ports per console is supported. This is different from the default (31), so update the code to manually add the virtio-serial controllers with 16 ports. For the existing controllers, make sure to set max ports to 16 or error out if ports count greater than 16 was specified. The second one is that bhyve does not clean up UNIX sockets for these devices. So update virBhyveProcessStop() to remove leftover sockets. Not adding capabilities probing as the virtio-console device is available on all supported FreeBSD versions and on all supported arches. Signed-off-by: Roman Bogorodskiy Reviewed-by: Peter Krempa --- src/bhyve/bhyve_command.c | 42 +++++- src/bhyve/bhyve_device.c | 42 +++++- src/bhyve/bhyve_domain.c | 70 ++++++++-- src/bhyve/bhyve_process.c | 14 ++ ...exml2argv-2-virtio-console-mixed-addr.args | 10 ++ ...ml2argv-2-virtio-console-mixed-addr.ldargs | 4 + ...vexml2argv-2-virtio-console-mixed-addr.xml | 26 ++++ .../bhyvexml2argv-virtio-console-addr.args | 10 ++ .../bhyvexml2argv-virtio-console-addr.ldargs | 4 + .../bhyvexml2argv-virtio-console-addr.xml | 25 ++++ ...vexml2argv-virtio-console-controllers.args | 11 ++ ...xml2argv-virtio-console-controllers.ldargs | 4 + ...yvexml2argv-virtio-console-controllers.xml | 31 +++++ ...vexml2argv-virtio-console-invalid-name.xml | 21 +++ ...vexml2argv-virtio-console-invalid-path.xml | 21 +++ ...v-virtio-console-multiple-controllers.args | 11 ++ ...virtio-console-multiple-controllers.ldargs | 4 + ...gv-virtio-console-multiple-controllers.xml | 89 +++++++++++++ ...xml2argv-virtio-console-too-many-ports.xml | 25 ++++ .../x86_64/bhyvexml2argv-virtio-console.args | 10 ++ .../bhyvexml2argv-virtio-console.ldargs | 4 + .../x86_64/bhyvexml2argv-virtio-console.xml | 21 +++ tests/bhyvexml2argvtest.c | 8 ++ ...xml2xmlout-2-virtio-console-mixed-addr.xml | 40 ++++++ .../bhyvexml2xmlout-virtio-console-addr.xml | 35 +++++ ...exml2xmlout-virtio-console-controllers.xml | 43 ++++++ ...ut-virtio-console-multiple-controllers.xml | 123 ++++++++++++++++++ .../x86_64/bhyvexml2xmlout-virtio-console.xml | 35 +++++ tests/bhyvexml2xmltest.c | 8 ++ 29 files changed, 780 insertions(+), 11 deletions(-) create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-c= onsole-mixed-addr.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-c= onsole-mixed-addr.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-c= onsole-mixed-addr.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-addr.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-addr.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-addr.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-controllers.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-controllers.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-controllers.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-invalid-name.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-invalid-path.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-multiple-controllers.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-multiple-controllers.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-multiple-controllers.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole-too-many-ports.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-con= sole.xml create mode 100644 tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-2-virt= io-console-mixed-addr.xml create mode 100644 tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio= -console-addr.xml create mode 100644 tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio= -console-controllers.xml create mode 100644 tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio= -console-multiple-controllers.xml create mode 100644 tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio= -console.xml diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index 931d7dd551..8671644cc8 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -490,6 +490,43 @@ bhyveBuildNVMeControllerArgStr(const virDomainDef *def, return 0; } =20 +static int +bhyveBuildVirtioSerialControllerArgStr(const virDomainDef *def, + virDomainControllerDef *controller, + struct _bhyveConn *driver G_GNUC_UN= USED, + virCommand *cmd) +{ + g_auto(virBuffer) opt =3D VIR_BUFFER_INITIALIZER; + size_t i; + + for (i =3D 0; i < def->nchannels; i++) { + virDomainChrDef *channel =3D def->channels[i]; + + if (channel->info.addr.vioserial.controller !=3D controller->idx) + continue; + + if (channel->source->type !=3D VIR_DOMAIN_CHR_TYPE_UNIX) + continue; + + if (channel->targetType !=3D VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VI= RTIO) + continue; + + virBufferAsprintf(&opt, + ",%s=3D%s", + channel->target.name, + channel->source->data.nix.path); + } + + if (virBufferUse(&opt) > 0) { + virCommandAddArg(cmd, "-s"); + virCommandAddArgFormat(cmd, "%d:0,virtio-console%s", + controller->info.addr.pci.slot, + virBufferContentAndReset(&opt)); + } + + return 0; +} + static int bhyveBuildVirtIODiskArgStr(const virDomainDef *def G_GNUC_UNUSED, virDomainDiskDef *disk, @@ -606,9 +643,12 @@ bhyveBuildControllerArgStr(const virDomainDef *def, if (bhyveBuildNVMeControllerArgStr(def, controller, driver, cmd) <= 0) return -1; break; + case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: + if (bhyveBuildVirtioSerialControllerArgStr(def, controller, driver= , cmd) < 0) + return -1; + break; case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: - case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: case VIR_DOMAIN_CONTROLLER_TYPE_LAST: diff --git a/src/bhyve/bhyve_device.c b/src/bhyve/bhyve_device.c index 54511383bb..cf3a9fa4fb 100644 --- a/src/bhyve/bhyve_device.c +++ b/src/bhyve/bhyve_device.c @@ -31,6 +31,36 @@ =20 VIR_LOG_INIT("bhyve.bhyve_device"); =20 + +static int +bhyveDomainAssignVirtioSerialAddresses(virDomainDef *def) +{ + int ret =3D -1; + size_t i; + virDomainVirtioSerialAddrSet *addrs =3D NULL; + + if (!(addrs =3D virDomainVirtioSerialAddrSetCreateFromDomain(def))) + goto cleanup; + + VIR_DEBUG("Finished reserving existing ports"); + + for (i =3D 0; i < def->nchannels; i++) { + virDomainChrDef *chr =3D def->channels[i]; + if (chr->deviceType =3D=3D VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && + chr->targetType =3D=3D VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRT= IO && + !virDomainVirtioSerialAddrIsComplete(&chr->info) && + virDomainVirtioSerialAddrAutoAssignFromCache(def, addrs, + &chr->info, false= ) < 0) + goto cleanup; + } + + ret =3D 0; + + cleanup: + virDomainVirtioSerialAddrSetFree(addrs); + return ret; +} + static int bhyveCollectPCIAddress(virDomainDef *def G_GNUC_UNUSED, virDomainDeviceDef *device G_GNUC_UNUSED, @@ -39,7 +69,8 @@ bhyveCollectPCIAddress(virDomainDef *def G_GNUC_UNUSED, { virDomainPCIAddressSet *addrs =3D NULL; virPCIDeviceAddress *addr =3D NULL; - if (info->type =3D=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) + + if (info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) return 0; =20 addrs =3D opaque; @@ -116,6 +147,7 @@ bhyveAssignDevicePCISlots(virDomainDef *def, (def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_S= ATA) || (def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_N= VME) || (def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_S= CSI) || + (def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_V= IRTIO_SERIAL) || ((def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_= USB) && (def->controllers[i]->model =3D=3D VIR_DOMAIN_CONTROLLER_MODE= L_USB_NEC_XHCI)) || def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_IS= A) { @@ -242,5 +274,11 @@ int bhyveDomainAssignPCIAddresses(virDomainDef *def, =20 int bhyveDomainAssignAddresses(virDomainDef *def, virDomainObj *obj) { - return bhyveDomainAssignPCIAddresses(def, obj); + if (bhyveDomainAssignVirtioSerialAddresses(def) < 0) + return -1; + + if (bhyveDomainAssignPCIAddresses(def, obj) < 0) + return -1; + + return 0; } diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 170f6edc56..484f7b9d6e 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -29,6 +29,7 @@ #include "viralloc.h" #include "virfile.h" #include "virlog.h" +#include "virstring.h" #include "virutil.h" =20 #define VIR_FROM_THIS VIR_FROM_BHYVE @@ -89,6 +90,11 @@ bhyveDomainDefPostParse(virDomainDef *def, { struct _bhyveConn *driver =3D opaque; g_autoptr(virCaps) caps =3D bhyveDriverGetCapabilities(driver); + size_t i; + size_t virtio_channels =3D 0; + size_t virtio_serial_controllers =3D 0; + size_t virtio_serial_existing_controllers =3D 0; + size_t virtio_serial_controllers_to_create =3D 0; if (!caps) return -1; =20 @@ -141,6 +147,27 @@ bhyveDomainDefPostParse(virDomainDef *def, def->os.loader->type =3D VIR_DOMAIN_LOADER_TYPE_ROM; } =20 + for (i =3D 0; i < def->nchannels; i++) + if (def->channels[i]->targetType =3D=3D VIR_DOMAIN_CHR_CHANNEL_TAR= GET_TYPE_VIRTIO) + virtio_channels++; + + for (i =3D 0; i < def->ncontrollers; i++) + if (def->controllers[i]->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_VI= RTIO_SERIAL) + virtio_serial_existing_controllers++; + + /* bhyve supports 16 ports per virtio-console device */ + virtio_serial_controllers =3D (virtio_channels / 16) + (virtio_channel= s % 16 !=3D 0); + if (virtio_serial_controllers > virtio_serial_existing_controllers) { + virtio_serial_controllers_to_create =3D virtio_serial_controllers = - virtio_serial_existing_controllers; + + for (i =3D 0; i < virtio_serial_controllers_to_create; i++) { + virDomainControllerDef *cont; + + cont =3D virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_= TYPE_VIRTIO_SERIAL, -1, -1); + cont->opts.vioserial.ports =3D 16; + } + } + return 0; } =20 @@ -225,6 +252,10 @@ bhyveDomainDeviceDefPostParse(virDomainDeviceDef *dev, virReportError(VIR_ERR_XML_ERROR, "%s", _("pci-root and pcie-root controllers should ha= ve index 0")); return -1; + } else if (cont->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SER= IAL) { + /* bhyve supports 16 ports per controller */ + if (cont->opts.vioserial.ports =3D=3D -1) + cont->opts.vioserial.ports =3D 16; } } =20 @@ -287,13 +318,21 @@ bhyveDomainDeviceDefValidate(const virDomainDeviceDef= *dev, void *parseOpaque G_GNUC_UNUSED) { switch (dev->type) { - case VIR_DOMAIN_DEVICE_CONTROLLER: - if (dev->data.controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_I= SA && - dev->data.controller->idx !=3D 0) { + case VIR_DOMAIN_DEVICE_CONTROLLER: { + virDomainControllerDef *controller =3D dev->data.controller; + + if (controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_ISA && + controller->idx !=3D 0) { return -1; + } else if (controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_VIRT= IO_SERIAL) { + if (controller->opts.vioserial.ports > 16) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Bhyve virtio-serial controller supports = up to 16 ports")); + return -1; + } } break; - + } case VIR_DOMAIN_DEVICE_RNG: if (dev->data.rng->model =3D=3D VIR_DOMAIN_RNG_MODEL_VIRTIO) { if (dev->data.rng->backend =3D=3D VIR_DOMAIN_RNG_BACKEND_RANDO= M) { @@ -314,9 +353,9 @@ bhyveDomainDeviceDefValidate(const virDomainDeviceDef *= dev, } break; =20 - case VIR_DOMAIN_DEVICE_CHR: - if (dev->data.chr->deviceType =3D=3D VIR_DOMAIN_CHR_DEVICE_TYPE_SE= RIAL) { - virDomainChrDef *chr =3D dev->data.chr; + case VIR_DOMAIN_DEVICE_CHR: { + virDomainChrDef *chr =3D dev->data.chr; + if (chr->deviceType =3D=3D VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL) { if (chr->source->type !=3D VIR_DOMAIN_CHR_TYPE_NMDM && chr->source->type !=3D VIR_DOMAIN_CHR_TYPE_TCP) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -341,9 +380,24 @@ bhyveDomainDeviceDefValidate(const virDomainDeviceDef = *dev, return -1; } } + } else if (chr->deviceType =3D=3D VIR_DOMAIN_CHR_DEVICE_TYPE_CHANN= EL && + chr->targetType =3D=3D VIR_DOMAIN_CHR_CHANNEL_TARGET_TY= PE_VIRTIO && + chr->source->type =3D=3D VIR_DOMAIN_CHR_TYPE_UNIX) { + if (virStringHasChars(chr->target.name, ",")) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Commas (',') are not allowed in chan= nel names")); + return -1; + } + if (chr->source->data.nix.path) { + if (virStringHasChars(chr->source->data.nix.path, ",")) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Commas (',') are not allowed in UNIX= socket paths")); + return -1; + } + } } break; - + } case VIR_DOMAIN_DEVICE_DISK: { virDomainDiskDef *disk =3D dev->data.disk; =20 diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index 26320200c5..963a9b479b 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -515,6 +515,7 @@ virBhyveProcessStop(struct _bhyveConn *driver, virDomainObj *vm, virDomainShutoffReason reason) { + size_t i =3D 0; int ret =3D -1; g_autoptr(virCommand) cmd =3D NULL; bhyveDomainObjPrivate *priv =3D vm->privateData; @@ -554,6 +555,19 @@ virBhyveProcessStop(struct _bhyveConn *driver, } } =20 + /* UNIX sockets cleanup */ + for (i =3D 0; i < vm->def->nchannels; i++) { + virDomainChrDef *channel =3D vm->def->channels[i]; + + if (channel->source->type !=3D VIR_DOMAIN_CHR_TYPE_UNIX) + continue; + if (channel->targetType !=3D VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VI= RTIO) + continue; + + if (virFileExists(channel->source->data.nix.path)) + virFileRemove(channel->source->data.nix.path, 0, 0); + } + ret =3D 0; =20 virCloseCallbacksDomainRemove(vm, NULL, bhyveProcessAutoDestroy); diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-console-= mixed-addr.args b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-con= sole-mixed-addr.args new file mode 100644 index 0000000000..0942e75c1e --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-console-mixed-a= ddr.args @@ -0,0 +1,10 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,virtio-console,org.qemu.guest_agent.0=3D/var/run/libvirt/bhyve/bhyv= e.agent,org.qemu.guest_agent.1=3D/var/run/libvirt/bhyve/bhyve.agent-2 \ +-s 3:0,ahci,hd:/tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-console-= mixed-addr.ldargs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-c= onsole-mixed-addr.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-console-mixed-a= ddr.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-console-= mixed-addr.xml b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-cons= ole-mixed-addr.xml new file mode 100644 index 0000000000..7df574916e --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-2-virtio-console-mixed-a= ddr.xml @@ -0,0 +1,26 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + +
+ + + + +
+ + + + + + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-ad= dr.args b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-addr.= args new file mode 100644 index 0000000000..b44c7b44c6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-addr.args @@ -0,0 +1,10 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 1:0,ahci,hd:/tmp/freebsd.img \ +-s 2:0,virtio-console,org.qemu.guest_agent.0=3D/var/run/libvirt/bhyve/bhyv= e.agent \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-ad= dr.ldargs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-add= r.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-addr.ldar= gs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-ad= dr.xml b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-addr.x= ml new file mode 100644 index 0000000000..519fec6b85 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-addr.xml @@ -0,0 +1,25 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + +
+ + + + + +
+ + + + +
+ + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-co= ntrollers.args b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-consol= e-controllers.args new file mode 100644 index 0000000000..939e5d6a86 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-controlle= rs.args @@ -0,0 +1,11 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,virtio-console,org.qemu.guest_agent.1=3D/var/run/libvirt/bhyve/bhyv= e.agent-1 \ +-s 3:0,virtio-console,org.qemu.guest_agent.2=3D/var/run/libvirt/bhyve/bhyv= e.agent-2 \ +-s 4:0,ahci,hd:/tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-co= ntrollers.ldargs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-cons= ole-controllers.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-controlle= rs.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-co= ntrollers.xml b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console= -controllers.xml new file mode 100644 index 0000000000..2d82addb12 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-controlle= rs.xml @@ -0,0 +1,31 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + +
+ + + + + + + + +
+ + + + +
+ + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-in= valid-name.xml b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-consol= e-invalid-name.xml new file mode 100644 index 0000000000..d108115feb --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-invalid-n= ame.xml @@ -0,0 +1,21 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + +
+ + + + + + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-in= valid-path.xml b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-consol= e-invalid-path.xml new file mode 100644 index 0000000000..c17e2c5380 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-invalid-p= ath.xml @@ -0,0 +1,21 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + +
+ + + + + + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-mu= ltiple-controllers.args b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virt= io-console-multiple-controllers.args new file mode 100644 index 0000000000..e3d6b6d4a7 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-multiple-= controllers.args @@ -0,0 +1,11 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,virtio-console,org.qemu.guest_agent.1=3D/var/run/libvirt/bhyve/bhyv= e.agent-1,org.qemu.guest_agent.2=3D/var/run/libvirt/bhyve/bhyve.agent-2,org= .qemu.guest_agent.3=3D/var/run/libvirt/bhyve/bhyve.agent-3,org.qemu.guest_a= gent.4=3D/var/run/libvirt/bhyve/bhyve.agent-4,org.qemu.guest_agent.5=3D/var= /run/libvirt/bhyve/bhyve.agent-5,org.qemu.guest_agent.6=3D/var/run/libvirt/= bhyve/bhyve.agent-6,org.qemu.guest_agent.7=3D/var/run/libvirt/bhyve/bhyve.a= gent-7,org.qemu.guest_agent.8=3D/var/run/libvirt/bhyve/bhyve.agent-8,org.qe= mu.guest_agent.9=3D/var/run/libvirt/bhyve/bhyve.agent-9,org.qemu.guest_agen= t.10=3D/var/run/libvirt/bhyve/bhyve.agent-10,org.qemu.guest_agent.11=3D/var= /run/libvirt/bhyve/bhyve.agent-11,org.qemu.guest_agent.12=3D/var/run/libvir= t/bhyve/bhyve.agent-12,org.qemu.guest_agent.13=3D/var/run/libvirt/bhyve/bhy= ve.agent-13,org.qemu.guest_agent.14=3D/var/run/libvirt/bhyve/bhyve.agent-14= ,org.qemu.guest_agent.15=3D/var/run/libvirt/bhyve/bhyve.agent-15 \ +-s 3:0,virtio-console,org.qemu.guest_agent.16=3D/var/run/libvirt/bhyve/bhy= ve.agent-16,org.qemu.guest_agent.17=3D/var/run/libvirt/bhyve/bhyve.agent-17= ,org.qemu.guest_agent.18=3D/var/run/libvirt/bhyve/bhyve.agent-18 \ +-s 4:0,ahci,hd:/tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-mu= ltiple-controllers.ldargs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-vi= rtio-console-multiple-controllers.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-multiple-= controllers.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-mu= ltiple-controllers.xml b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virti= o-console-multiple-controllers.xml new file mode 100644 index 0000000000..b8dc39ed83 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-multiple-= controllers.xml @@ -0,0 +1,89 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-to= o-many-ports.xml b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-cons= ole-too-many-ports.xml new file mode 100644 index 0000000000..04ec8abc43 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console-too-many-= ports.xml @@ -0,0 +1,25 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + +
+ + +
+ + + + +
+ + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console.ar= gs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console.args new file mode 100644 index 0000000000..66f4905f65 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console.args @@ -0,0 +1,10 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,virtio-console,org.qemu.guest_agent.0=3D/var/run/libvirt/bhyve/bhyv= e.agent \ +-s 3:0,ahci,hd:/tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console.ld= args b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console.xm= l b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console.xml new file mode 100644 index 0000000000..f7178849b9 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-virtio-console.xml @@ -0,0 +1,21 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + +
+ + + + + + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 71c67ba2a2..eb2c1d33b8 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -293,6 +293,14 @@ mymain(void) DO_TEST_FAILURE("blkiotune-invalid-device"); DO_TEST_FAILURE("blkiotune-multiple-devices"); DO_TEST_FAILURE("blkiotune-weight"); + DO_TEST("virtio-console"); + DO_TEST("virtio-console-addr"); + DO_TEST("2-virtio-console-mixed-addr"); + DO_TEST("virtio-console-multiple-controllers"); + DO_TEST("virtio-console-controllers"); + DO_TEST_FAILURE("virtio-console-too-many-ports"); + DO_TEST_FAILURE("virtio-console-invalid-name"); + DO_TEST_FAILURE("virtio-console-invalid-path"); =20 /* Address allocation tests */ DO_TEST("addr-single-sata-disk"); diff --git a/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-2-virtio-cons= ole-mixed-addr.xml b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-2-vir= tio-console-mixed-addr.xml new file mode 100644 index 0000000000..7243d95d0a --- /dev/null +++ b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-2-virtio-console-mix= ed-addr.xml @@ -0,0 +1,40 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + + +
+ + +
+ + + + +
+ + + + +
+ + + diff --git a/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio-consol= e-addr.xml b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio-consol= e-addr.xml new file mode 100644 index 0000000000..08735831b1 --- /dev/null +++ b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio-console-addr.= xml @@ -0,0 +1,35 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + +
+ + + +
+ + + + +
+ + + diff --git a/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio-consol= e-controllers.xml b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio= -console-controllers.xml new file mode 100644 index 0000000000..1fd1e1dfb1 --- /dev/null +++ b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio-console-contr= ollers.xml @@ -0,0 +1,43 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + +
+ + +
+ + + +
+ + + + +
+ + + + +
+ + + diff --git a/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio-consol= e-multiple-controllers.xml b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlo= ut-virtio-console-multiple-controllers.xml new file mode 100644 index 0000000000..241828ef0c --- /dev/null +++ b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio-console-multi= ple-controllers.xml @@ -0,0 +1,123 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + + +
+ + +
+ + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + diff --git a/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio-consol= e.xml b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio-console.xml new file mode 100644 index 0000000000..ec82054df7 --- /dev/null +++ b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-virtio-console.xml @@ -0,0 +1,35 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + + +
+ + +
+ + + + +
+ + + diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c index 9fa8a9765d..120bdd42e5 100644 --- a/tests/bhyvexml2xmltest.c +++ b/tests/bhyvexml2xmltest.c @@ -137,6 +137,14 @@ mymain(void) DO_TEST_FAILURE("blkiotune-invalid-device"); DO_TEST_FAILURE("blkiotune-weight"); DO_TEST_FAILURE("blkiotune-multiple-devices"); + DO_TEST_DIFFERENT("virtio-console"); + DO_TEST_DIFFERENT("virtio-console-addr"); + DO_TEST_DIFFERENT("2-virtio-console-mixed-addr"); + DO_TEST_DIFFERENT("virtio-console-multiple-controllers"); + DO_TEST_DIFFERENT("virtio-console-controllers"); + DO_TEST_FAILURE("virtio-console-too-many-ports"); + DO_TEST_FAILURE("virtio-console-invalid-name"); + DO_TEST_FAILURE("virtio-console-invalid-path"); =20 /* Address allocation tests */ DO_TEST_DIFFERENT("addr-single-sata-disk"); --=20 2.52.0 From nobody Sat Jun 13 12:16:46 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1776876686; cv=none; d=zohomail.com; s=zohoarc; b=e7/EzcCXYOIP5NKynJo1uhZsNw5jaDhMQBnv++QttrAvOvSV5I39BeZP4sRmNYrswQNBJ3LkpMvlMHk2b+R4mqQ7isAMH7xsdbbOVPbvL/g+pbxl4CkuULe1t+Aki3OkwGlPYIFuxXB1byqxSq2S2abAJSC5m2QV/37nTa8RnbE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1776876686; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=ToM0UzazddOyPTebF1U8QPlyfJfK1j820hjPy1QhX84=; b=OaBpWjjAD8fAbC7fPhNFfrdl/cwAhYXna1EDyZpcOqSdUXinpIq80aBerPw7/vVW8EDl+IFnTSVqiRRv2w66n54T39qDOOJdlcfewWeHSWwxNQ39Ryy9jDfmN7jbnnt+tPrJS8lWF94pTtDTyZl/zNUJ8B94Q7VWfejhqZKqe6Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 177687668645596.50864562688741; Wed, 22 Apr 2026 09:51:26 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id F16CD419FF; Wed, 22 Apr 2026 12:51:24 -0400 (EDT) Received: from [172.19.199.9] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 9CD8A41B04; Wed, 22 Apr 2026 12:49:05 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 42FF041906; Wed, 22 Apr 2026 12:48:53 -0400 (EDT) Received: from mail-ed1-x536.google.com (mail-ed1-x536.google.com [IPv6:2a00:1450:4864:20::536]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id E7A364190B for ; Wed, 22 Apr 2026 12:48:51 -0400 (EDT) Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-6771d4d33e1so967302a12.1 for ; Wed, 22 Apr 2026 09:48:51 -0700 (PDT) Received: from tulp.my.domain (2001-1c02-1a15-3000-ee82-4536-a8f2-9e22.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:ee82:4536:a8f2:9e22]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ba451210e26sm573097766b.8.2026.04.22.09.48.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2026 09:48:49 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776876530; x=1777481330; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ToM0UzazddOyPTebF1U8QPlyfJfK1j820hjPy1QhX84=; b=njFa1ZxnEXL48GvG6YP8y1PJvuyt24YORlNgv5xybjzR+1bIVEvhhCH3jvkffzIVqA KPv/vzJPYtqNb5UVA3zzvyNYEWg+X8m7XbWCc1/gVUdT8xobjvzbYfWXKcWvJ4KT+JQp ihHVKhuok8jAtcKiS10eI/7Py8qB8hW+jX4Br1RX1n55E1EDg52SW0wVYCkeZi6oq+ru lhXqohxYqfIFFBKCiFLCb97+T9LgvHY+9r/TJeiQzyQVAv3ThS/5v/ay4GU7uaMronUr K5ZzFVJUWYpZONFe0zW4NjrOQd5sw5C7AT1+EjyWDaFhWJWZVFFioRYFfw1PyKuK5+TT eUSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776876530; x=1777481330; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ToM0UzazddOyPTebF1U8QPlyfJfK1j820hjPy1QhX84=; b=rAucJWw8PEt72zqBZew/v8NtNgUINN2HdrogJm+zIcuX9XB1qZuQvWGrOpOSUhME/s TmKcE0wYMLqX5bKYpYnmKn08BBwD4BN/Tlhflx0oCcXZNU3MovMaCjmU+x7kzJbJSTYX GBwdZHLQY6okKAyTN+J2HetXhRBSY7wMltIWZRZX5KTpGOBQyB02cS8jGuhur9ojiaSV IZI+u6F3SCdAAMuExA2bkvi8Fbt7Zb35VsdQJP5LFrdCnxLu+sc+tHLZ3kl6vholmmJS A/Y9uK5dbLhQ0+9tBHWzdZK4wkHvv5XWhqj6UZZ3W2C+sjQbwFm19dkiaCH/4pAIQWa+ LHBA== X-Gm-Message-State: AOJu0YwmsoYxwUboBN773f6X6LrvxQaHSECWY7wUu9l5xwQe257hbjk2 +Y+ncc9lQ1aIT5q0JOddJEU38d/HLDAfeNF4azJ2DEImqqGucrtm+ANv9ZQmQQWt X-Gm-Gg: AeBDiet8/C9YIsVO8fZs+ewQQMg/3WFGC5TIMGVs7wSE0a1dlu3MJLzMmZbiDmoku6h K8XR4RdL7UZuLWC4AaaOQUZc3dcjl828WaZNlKwWK6nwN5XLFaog2nbTdPL88kqO+lZ99XcqQXD zur74C2ZfiQdK90WwKsC5LNBtcWQH7JDayF/bwkE9u7br9HK78JoLh53DaIFnczSxKvW/rRq1Zo cLORp178O+7lfsOrAmx8xfqeEmzYENCPUbE990WIQkHZZiuRkm/gPibuMXoGciZUwoohOH1T1L+ l9Gwm1M/0LWGn0z96Tc2onBWIzPIjDG6YHFVh8Yuq/blPWyuBKcivprIqC8RuWWE8wjAtNkMKXU 87+BkI/ncAE8bRDObglVYGiBS9e/nh4wV9r7l9z1QJ6uY9fEgRyl+ghL3AABUycdzORTXvkQEHZ yMmZBwrrtwX70miy+wZEIimgo9EkjUmg3c5CUw+zgYxKHRq6nNucHHS53tXYWGrL9E9Hr77p+IO RnYBHt6MhHO3TK3lZB8cOwUjzgIXgha4cwSM3aLFSniTjp9mnaVLlBhJ0g= X-Received: by 2002:a17:907:86a3:b0:ba8:8c8c:1c5d with SMTP id a640c23a62f3a-ba88c8c2648mr666536966b.47.1776876530315; Wed, 22 Apr 2026 09:48:50 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH v2 2/2] bhyve: improve ISA controller validation error reporting Date: Wed, 22 Apr 2026 18:46:47 +0200 Message-ID: <20260422164647.84558-3-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260422164647.84558-1-bogorodskiy@gmail.com> References: <20260422164647.84558-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 54CJEDQRSERM6ATRV4557F3LLYV3LJAW X-Message-ID-Hash: 54CJEDQRSERM6ATRV4557F3LLYV3LJAW X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1776876688536158500 Content-Type: text/plain; charset="utf-8" Report error in case when incorrect index is specified for the ISA controller. Signed-off-by: Roman Bogorodskiy Reviewed-by: Peter Krempa --- src/bhyve/bhyve_domain.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 484f7b9d6e..d60e2b2ca0 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -323,6 +323,8 @@ bhyveDomainDeviceDefValidate(const virDomainDeviceDef *= dev, =20 if (controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_ISA && controller->idx !=3D 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Bhyve ISA controller can only have index \'0= \'")); return -1; } else if (controller->type =3D=3D VIR_DOMAIN_CONTROLLER_TYPE_VIRT= IO_SERIAL) { if (controller->opts.vioserial.ports > 16) { --=20 2.52.0