mirror of https://gitee.com/openkylin/libvirt.git
extract serial number from HAL storage backend
* src/node_device_hal.c src/node_device_conf.[ch]: add support for serial number in HAL storage backend, patch by Dave Allan * docs/schemas/nodedev.rng tests/nodedevschemadata/storage_serial_3600c0ff000d7a2a5d463ff4902000000.xml: update the schemas and add a test case, also by Dave Allan Daniel
This commit is contained in:
parent
1fbe229b3c
commit
bf5d6f431e
|
@ -1,3 +1,11 @@
|
|||
Thu Jun 11 16:22:22 CEST 2009 Daniel Veillard <veillard@redhat.com>
|
||||
|
||||
* src/node_device_hal.c src/node_device_conf.[ch]: add support
|
||||
for serial number in HAL storage backend, patch by Dave Allan
|
||||
* docs/schemas/nodedev.rng
|
||||
tests/nodedevschemadata/storage_serial_3600c0ff000d7a2a5d463ff4902000000.xml:
|
||||
update the schemas and add a test case, also by Dave Allan
|
||||
|
||||
Thu Jun 11 15:18:44 GMT 2009 Mark McLoughlin <markmc@redhat.com>
|
||||
|
||||
* src/qemu_conf.[ch]: make qemuParseHelpStr() available
|
||||
|
|
|
@ -283,6 +283,11 @@
|
|||
<text/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name='serial'>
|
||||
<text/>
|
||||
</element>
|
||||
</optional>
|
||||
|
||||
<choice>
|
||||
<ref name='capstorageremoveable'/>
|
||||
|
|
|
@ -365,6 +365,9 @@ char *virNodeDeviceDefFormat(virConnectPtr conn,
|
|||
if (data->storage.vendor)
|
||||
virBufferVSprintf(&buf, " <vendor>%s</vendor>\n",
|
||||
data->storage.vendor);
|
||||
if (data->storage.serial)
|
||||
virBufferVSprintf(&buf, " <serial>%s</serial>\n",
|
||||
data->storage.serial);
|
||||
if (data->storage.flags & VIR_NODE_DEV_CAP_STORAGE_REMOVABLE) {
|
||||
int avl = data->storage.flags &
|
||||
VIR_NODE_DEV_CAP_STORAGE_REMOVABLE_MEDIA_AVAILABLE;
|
||||
|
@ -479,6 +482,7 @@ virNodeDevCapStorageParseXML(virConnectPtr conn,
|
|||
data->storage.drive_type = virXPathString(conn, "string(./drive_type[1])", ctxt);
|
||||
data->storage.model = virXPathString(conn, "string(./model[1])", ctxt);
|
||||
data->storage.vendor = virXPathString(conn, "string(./vendor[1])", ctxt);
|
||||
data->storage.serial = virXPathString(conn, "string(./serial[1])", ctxt);
|
||||
|
||||
if ((n = virXPathNodeSet(conn, "./capability", ctxt, &nodes)) < 0) {
|
||||
virNodeDeviceReportError(conn, VIR_ERR_INTERNAL_ERROR,
|
||||
|
@ -1202,6 +1206,7 @@ void virNodeDevCapsDefFree(virNodeDevCapsDefPtr caps)
|
|||
VIR_FREE(data->storage.drive_type);
|
||||
VIR_FREE(data->storage.model);
|
||||
VIR_FREE(data->storage.vendor);
|
||||
VIR_FREE(data->storage.serial);
|
||||
break;
|
||||
case VIR_NODE_DEV_CAP_LAST:
|
||||
/* This case is here to shutup the compiler */
|
||||
|
|
|
@ -143,6 +143,7 @@ struct _virNodeDevCapsDef {
|
|||
char *drive_type;
|
||||
char *model;
|
||||
char *vendor;
|
||||
char *serial;
|
||||
unsigned flags; /* virNodeDevStorageCapFlags bits */
|
||||
} storage;
|
||||
} data;
|
||||
|
|
|
@ -255,6 +255,7 @@ static int gather_storage_cap(LibHalContext *ctx, const char *udi,
|
|||
(void)get_str_prop(ctx, udi, "storage.drive_type", &d->storage.drive_type);
|
||||
(void)get_str_prop(ctx, udi, "storage.model", &d->storage.model);
|
||||
(void)get_str_prop(ctx, udi, "storage.vendor", &d->storage.vendor);
|
||||
(void)get_str_prop(ctx, udi, "storage.serial", &d->storage.serial);
|
||||
if (get_bool_prop(ctx, udi, "storage.removable", &val) == 0 && val) {
|
||||
d->storage.flags |= VIR_NODE_DEV_CAP_STORAGE_REMOVABLE;
|
||||
if (get_bool_prop(ctx, udi, "storage.removable.media_available",
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
<device>
|
||||
<name>storage_serial_3600c0ff000d7a2a5d463ff4902000000</name>
|
||||
<parent>pci_10df_fe00_scsi_host_scsi_device_lun8</parent>
|
||||
<capability type='storage'>
|
||||
<block>/dev/sdj</block>
|
||||
<bus>pci</bus>
|
||||
<drive_type>disk</drive_type>
|
||||
<model>MSA2012fc</model>
|
||||
<vendor>HP</vendor>
|
||||
<serial>3600c0ff000d7a2a5d463ff4902000000</serial>
|
||||
<size>15626928128</size>
|
||||
</capability>
|
||||
</device>
|
||||
|
||||
|
Loading…
Reference in New Issue