The branch main has been updated by jhb:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=c6efcb1281f3518a92fdc579d2c3c3c74eb6070c

commit c6efcb1281f3518a92fdc579d2c3c3c74eb6070c
Author:     John Baldwin <j...@freebsd.org>
AuthorDate: 2021-09-17 16:55:06 +0000
Commit:     John Baldwin <j...@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 */
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to