git: c6efcb1281f3 - main - bhyve: Support setting the disk serial number for VirtIO block devices.
John Baldwin
jhb at FreeBSD.org
Fri Sep 17 16:56:27 UTC 2021
The branch main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=c6efcb1281f3518a92fdc579d2c3c3c74eb6070c
commit c6efcb1281f3518a92fdc579d2c3c3c74eb6070c
Author: John Baldwin <jhb at FreeBSD.org>
AuthorDate: 2021-09-17 16:55:06 +0000
Commit: John Baldwin <jhb at FreeBSD.org>
CommitDate: 2021-09-17 16:55:48 +0000
bhyve: Support setting the disk serial number for VirtIO block devices.
Reviewed by: allanjude
Obtained from: illumos
Differential Revision: https://reviews.freebsd.org/D31983
---
usr.sbin/bhyve/bhyve_config.5 | 12 +++++++++++-
usr.sbin/bhyve/pci_virtio_block.c | 27 +++++++++++++++++----------
2 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/usr.sbin/bhyve/bhyve_config.5 b/usr.sbin/bhyve/bhyve_config.5
index a6f621048c1a..25bd818d6148 100644
--- a/usr.sbin/bhyve/bhyve_config.5
+++ b/usr.sbin/bhyve/bhyve_config.5
@@ -23,7 +23,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd April 20, 2021
+.Dd September 17, 2021
.Dt BHYVE_CONFIG 5
.Os
.Sh NAME
@@ -514,6 +514,16 @@ The path of a directory on the host to export to the guest.
.It Va ro Ta bool Ta false Ta
If true, the guest filesystem is read-only.
.El
+.Ss VirtIO Block Device Settings
+In addition to the block device settings described above, each
+VirtIO block device supports the following settings:
+.Bl -column "model" "integer" "generated"
+.It Sy Name Ta Sy Format Ta Sy Default Ta Sy Description
+.It Va ser Ta string Ta generated Ta
+Serial number of up to twenty characters.
+A default serial number is generated using a hash of the backing
+store's pathname.
+.El
.Ss VirtIO Console Device Settings
Each VirtIO Console device contains one or more console ports.
Each port stores its settings in a node named
diff --git a/usr.sbin/bhyve/pci_virtio_block.c b/usr.sbin/bhyve/pci_virtio_block.c
index 3718b2d7eff0..385b812be84c 100644
--- a/usr.sbin/bhyve/pci_virtio_block.c
+++ b/usr.sbin/bhyve/pci_virtio_block.c
@@ -453,7 +453,7 @@ pci_vtblk_init(struct vmctx *ctx, struct pci_devinst *pi, nvlist_t *nvl)
{
char bident[sizeof("XX:X:X")];
struct blockif_ctxt *bctxt;
- const char *path;
+ const char *path, *serial;
MD5_CTX mdctx;
u_char digest[16];
struct pci_vtblk_softc *sc;
@@ -498,16 +498,23 @@ pci_vtblk_init(struct vmctx *ctx, struct pci_devinst *pi, nvlist_t *nvl)
/* sc->vbsc_vq.vq_notify = we have no per-queue notify */
/*
- * Create an identifier for the backing file. Use parts of the
- * md5 sum of the filename
+ * If an explicit identifier is not given, create an
+ * identifier using parts of the md5 sum of the filename.
*/
- path = get_config_value_node(nvl, "path");
- MD5Init(&mdctx);
- MD5Update(&mdctx, path, strlen(path));
- MD5Final(digest, &mdctx);
- snprintf(sc->vbsc_ident, VTBLK_BLK_ID_BYTES,
- "BHYVE-%02X%02X-%02X%02X-%02X%02X",
- digest[0], digest[1], digest[2], digest[3], digest[4], digest[5]);
+ bzero(sc->vbsc_ident, VTBLK_BLK_ID_BYTES);
+ if ((serial = get_config_value_node(nvl, "serial")) != NULL ||
+ (serial = get_config_value_node(nvl, "ser")) != NULL) {
+ strlcpy(sc->vbsc_ident, serial, VTBLK_BLK_ID_BYTES);
+ } else {
+ path = get_config_value_node(nvl, "path");
+ MD5Init(&mdctx);
+ MD5Update(&mdctx, path, strlen(path));
+ MD5Final(digest, &mdctx);
+ snprintf(sc->vbsc_ident, VTBLK_BLK_ID_BYTES,
+ "BHYVE-%02X%02X-%02X%02X-%02X%02X",
+ digest[0], digest[1], digest[2], digest[3], digest[4],
+ digest[5]);
+ }
/* setup virtio block config space */
sc->vbsc_cfg.vbc_capacity = size / VTBLK_BSIZE; /* 512-byte units */
More information about the dev-commits-src-all
mailing list