From nobody Wed Jun 24 21:43:07 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=1781026378; cv=none; d=zohomail.com; s=zohoarc; b=P2YZ1mPg/DvSXNyVOUTZtVBw77cqGbQr/yKBWJewKufzKY/2UURhA6GEsQ2UZbvtaOjoxCXENPoxF7AcCuGpYJNMLwJkqO+VylcK9d+Ibj5tjQy3lxUF58QwYqTXVP33LEfMDugGqmlp/DDSCD/eapZGwfgVZUe5uTx0oGZtgJE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781026378; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=1chKg9EnpXJCqj5wp+onWIsduhnl44a99OT7oR4zrs8=; b=POEZru9HXJv0X3E9issHe7QOZAnAA9FrpMHkJhei3rvgYn7u+fpJdkYlSHzjU3RfqJx2fCXnBFBYIAEyYnvwG272+QATA5Hi6gL8tiZhd0eAub08v3hFvQrY4rbHW3LafGKmcfgXhXRr0mnJy0BRc9SgRofZrr2P4zXYBosJLok= 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 1781026378978883.6475731356376; Tue, 9 Jun 2026 10:32:58 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 6A5CA41B4A; Tue, 9 Jun 2026 13:32:57 -0400 (EDT) Received: from [172.19.199.4] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id AA5D441C77; Tue, 9 Jun 2026 13:31:31 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id D5E1541983; Tue, 9 Jun 2026 13:31:23 -0400 (EDT) Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) (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 CEB6B419C8 for ; Tue, 9 Jun 2026 13:31:21 -0400 (EDT) Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-68d232ed3f9so9759541a12.0 for ; Tue, 09 Jun 2026 10:31:21 -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-bf051d82a31sm1089072466b.19.2026.06.09.10.31.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Jun 2026 10:31:19 -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=1781026280; x=1781631080; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=1chKg9EnpXJCqj5wp+onWIsduhnl44a99OT7oR4zrs8=; b=C/CP21RQwaPwpCzqKt7Srz3XCuSNLh4YcNwihOZVRls0YcRkXYL0m9rzPVen8tNG1l faogNh8K5jr+mpELFJbnLx/vD0TaXGIJRcj6I2yxxJAhf4bVh/w4Mx6xUd/gSOgAlNWb xPQkmf0/pdVEmy4/rzAGJvmMrBCZx+ux4j8iTEMEtTtE2VKtEZSOh5G8dliRXLRHsYnj T9pPaX+E3PV/wiaAHC3E1cJInr3ae/CtRNlhA9Tbgt4Y+RNWJOEu3fezMeta0Nrxlp4j SBU7P6jkp61diJA2onU80GpW0x1UNKMqGhIsxzw7DfBkJdjB+U/QRJqmB982I4w4UhaP kRrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781026280; x=1781631080; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=1chKg9EnpXJCqj5wp+onWIsduhnl44a99OT7oR4zrs8=; b=ijtOtB6JNRlNOIajc4Wk+N91XSUPjyKPdYwD/3fs8b/PNv0n87ALVvylHymFfqHMT9 2ZQ+RRrFRoI8HFhs8h4VZhydXaXje3mxPED7zY4Jr1cKU0hvvtWjJBjJP80kLgag7m2y 5n5vOeadPTP0kmqUprM9g0478g/gyt3hj2RUU/MC5glvEzQEyWpx6+CLywCuyhOD9zzg sAzZrEuXfg+OAq9Vph8lx+hAg+rEMS60agsRn+3Q5TTK+OYkjBLkjswhPtGR/XxewuYS 2g4iu0s1y3dpM+goJfij0MARHnMdjxJWSlUcIVowgfZT3rWTJ51FtZCqK4X6xs7Gst03 zwQw== X-Gm-Message-State: AOJu0YyFGpLg3Ehm0iDoqCyFpLPExSbEr2WcEpwN4HTEvz3ChImfIIdr FFkbI75xhGQNyjtXOCU2vgjh4BOgldUhJVNzM0MEpFAcE2afvDqVEka3hqzkA8Xp X-Gm-Gg: Acq92OF0bf8Edjte2UKHc5T2H/0ATSiamDH/I9yA2MBgOkwb24wKKP3jTxKiS2Lmni+ VAax6YynKNwXwlwLFzVfIaIw14ZudaOjGdO7/t+aV2qOmzYSvk9JIZFkjITlFsBJ5D9XvlSkUq8 fwCCGZJ+Rcpc30guTOPInYn+HN6fS58OjFOj0qQFDwj6Mx2+cguHMdn60UV2WpYzMOYnt4U/8Wl Vxe5YAxA3kxc3Ez4P1TYixB5rDXInNx/eUwgvjLyB/NBgzU+xXfyjHssIaLetWcm+8a2pSEgZAe Eg8wJUIlp64+KwpEWSyUIufHnvoVwzrPrUKgqY11Jfn72E6U9TFAEwH7KQY/ZwZBQcXpkUXPY6h BX6PqeidTuFQz1WwOpiQ/+5XXL0wssuM/ZU93Sr/RfvGw7iTztCVx4jujUUFFSK0iaghj9g4mTV 4oGeqwQfjhg7h8yuT+hRTrPG0Wq4991ZLeI1oXIDvisnTVMSs3AHCw5E89tyKPGwKJx98IRHFYR Vi5HPnmHxFBCoTbLmS5W1YfpZYFgTrZUg7VCV5PA/brwXLY X-Received: by 2002:a17:906:cc53:b0:bd9:20b:5117 with SMTP id a640c23a62f3a-bf3742ea2d6mr787830966b.41.1781026279923; Tue, 09 Jun 2026 10:31:19 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH] bhyve: support populating SMBIOS fields Date: Tue, 9 Jun 2026 19:30:40 +0200 Message-ID: <20260609173040.21635-1-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.52.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 7WWFF427C6J5K5SK4EJIMVWQ35JUQLCQ X-Message-ID-Hash: 7WWFF427C6J5K5SK4EJIMVWQ35JUQLCQ 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: 1781026379293158500 Content-Type: text/plain; charset="utf-8" bhyve supports populating SMBIOS fields. Each field is set using the -o option, such as: -o system.product_name=3DVirt-Manager There are 4 groups of options: - bios.* - system.* - board.* - chassis.* As a side note, the '-o' option can be used for setting options not related to the SMBIOS fields. Extend virBhyveProcessBuildBhyveCmd() to build the appropriate arguments for what's specified in the domain's `` section. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_command.c | 147 ++++++++++++++++++ .../x86_64/bhyvexml2argv-sysinfo-smbios.args | 29 ++++ .../bhyvexml2argv-sysinfo-smbios.ldargs | 4 + .../x86_64/bhyvexml2argv-sysinfo-smbios.xml | 52 +++++++ tests/bhyvexml2argvtest.c | 1 + 5 files changed, 233 insertions(+) create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-sm= bios.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-sm= bios.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-sm= bios.xml diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index 1da344f503..941b48eb66 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -928,6 +928,148 @@ bhyveBuildFSArgStr(const virDomainDef *def G_GNUC_UNU= SED, return 0; } =20 +static void +bhyveBuildSysinfoBiosArgStr(virSysinfoBIOSDef *def, + virCommand *cmd) +{ + if (def->vendor) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "bios.vendor", def->vendor); + } + + if (def->version) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "bios.version", def->version); + } + + if (def->date) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "bios.release_date", def->date); + } +} + +static void +bhyveBuildSysinfoSystemArgStr(virSysinfoSystemDef *def, + virCommand *cmd) +{ + if (def->manufacturer) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "system.manufacturer", def->manufacturer= ); + } + + if (def->product) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "system.product_name", def->product); + } + + if (def->serial) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "system.serial_number", def->serial); + } + + if (def->sku) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "system.sku", def->sku); + } + + if (def->version) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "system.version", def->version); + } +} + +static void +bhyveBuildSysinfoBaseBoardArgStr(virSysinfoBaseBoardDef *def, + virCommand *cmd) +{ + if (def->manufacturer) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "board.manufacturer", def->manufacturer); + } + + if (def->product) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "board.product_name", def->product); + } + + if (def->version) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "board.version", def->version); + } + + if (def->serial) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "board.serial_number", def->serial); + } + + if (def->asset) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "board.asset_tag", def->asset); + } + + if (def->location) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "board.location", def->location); + } +} + +static void +bhyveBuildSysinfoChassisArgStr(virSysinfoChassisDef *def, + virCommand *cmd) +{ + if (def->manufacturer) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "chassis.manufacturer", def->manufacture= r); + } + + if (def->version) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "chassis.version", def->version); + } + + if (def->serial) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "chassis.serial_number", def->serial); + } + + if (def->asset) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "chassis.asset_tag", def->asset); + } + + if (def->sku) { + virCommandAddArg(cmd, "-o"); + virCommandAddArgPair(cmd, "chassis.sku", def->sku); + } +} + +static int +bhyveBuildSysinfoArgStr(virSysinfoDef *sysinfo, + virCommand *cmd) +{ + size_t i; + + if (sysinfo->bios) + bhyveBuildSysinfoBiosArgStr(sysinfo->bios, cmd); + + if (sysinfo->system) + bhyveBuildSysinfoSystemArgStr(sysinfo->system, cmd); + + if (sysinfo->nbaseBoard > 1) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("bhyve does not support more than one entry to Ty= pe 2 in SMBIOS table")); + return -1; + } + + for (i =3D 0; i < sysinfo->nbaseBoard; i++) + bhyveBuildSysinfoBaseBoardArgStr(&sysinfo->baseBoard[i], cmd); + + if (sysinfo->chassis) + bhyveBuildSysinfoChassisArgStr(sysinfo->chassis, cmd); + + return 0; +} + virCommand * virBhyveProcessBuildBhyveCmd(struct _bhyveConn *driver, virDomainDef *def, bool dryRun) @@ -1164,6 +1306,11 @@ virBhyveProcessBuildBhyveCmd(struct _bhyveConn *driv= er, virDomainDef *def, if (bhyveBuildHostdevArgStr(def, cmd) < 0) return NULL; =20 + for (i =3D 0; i < def->nsysinfo; i++) + if (def->sysinfo[i]->type =3D=3D VIR_SYSINFO_SMBIOS) + if (bhyveBuildSysinfoArgStr(def->sysinfo[i], cmd) < 0) + return NULL; + virCommandAddArg(cmd, def->name); =20 return g_steal_pointer(&cmd); diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-smbios.ar= gs b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-smbios.args new file mode 100644 index 0000000000..f4894a60b0 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-smbios.args @@ -0,0 +1,29 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 2:0,ahci,hd:/tmp/freebsd.img \ +-s 3:0,virtio-net,faketapdev,mac=3D52:54:00:b9:94:02 \ +-o bios.vendor=3DLENOVO \ +-o bios.version=3D14.1 \ +-o bios.release_date=3D11/24/2025 \ +-o system.manufacturer=3DFedora \ +-o system.product_name=3DVirt-Manager \ +-o system.serial_number=3Dxxx-yyy-zzz \ +-o system.sku=3D0000 \ +-o system.version=3D0.9.4 \ +-o board.manufacturer=3DLENOVO \ +-o board.product_name=3D20BE0061MC \ +-o 'board.version=3D0B98401 Pro' \ +-o board.serial_number=3DW1KS427111E \ +-o 'board.asset_tag=3DAsset Tag' \ +-o board.location=3DNowhere \ +-o 'chassis.manufacturer=3DDell Inc.' \ +-o chassis.version=3D2.12 \ +-o chassis.serial_number=3D65X0XF2 \ +-o chassis.asset_tag=3D40000101 \ +-o chassis.sku=3DType3Sku1 \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-smbios.ld= args b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-smbios.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-smbios.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-smbios.xm= l b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-smbios.xml new file mode 100644 index 0000000000..111421211c --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-sysinfo-smbios.xml @@ -0,0 +1,52 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + LENOVO + 14.1 + 11/24/2025 + + + Fedora + Virt-Manager + 0.9.4 + xxx-yyy-zzz + 0000 + + + LENOVO + 20BE0061MC + 0B98401 Pro + W1KS427111E + Asset Tag + Nowhere + + + Dell Inc. + 2.12 + 65X0XF2 + 40000101 + Type3Sku1 + + + + + + + +
+ + + + + +
+ + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 818b51e178..71322d1330 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -303,6 +303,7 @@ mymain(void) DO_TEST_FAILURE("virtio-console-invalid-path"); DO_TEST("memtune"); DO_TEST_FAILURE("memtune-unsupported-params"); + DO_TEST("sysinfo-smbios"); =20 /* Address allocation tests */ DO_TEST("addr-single-sata-disk"); --=20 2.52.0