bhyve: Support setting the disk serial number for VirtIO block devices.
Reviewed by: allanjude Obtained from: illumos Differential Revision: https://reviews.freebsd.org/D31983
This commit is contained in:
parent
7eb138a9e5
commit
c6efcb1281
@ -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
|
||||
|
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user