mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-05 00:13:48 +00:00
Misc tweaks to node device impl
This commit is contained in:
parent
83928c2074
commit
145bb1e821
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
|||||||
|
Fri Nov 21 12:46:14 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
|
Misc tweaks to node device impl
|
||||||
|
* src/libvirt.c: Log registration of new node device driver impls
|
||||||
|
* src/node_device_conf.h, src/node_device.c: Merge block capability
|
||||||
|
into storage. Print vendor/product IDs in hex
|
||||||
|
* src/node_device_devkit.c: Change block to storage
|
||||||
|
* src/node_device_hal.c: Merge block cap into storage. Skip
|
||||||
|
devices without any capabilities listed
|
||||||
|
* src/virsh.c: Sort device list alphabetically
|
||||||
|
|
||||||
Fri Nov 21 12:40:14 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
Fri Nov 21 12:40:14 BST 2008 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
Python binding for node device APIs (David Lively)
|
Python binding for node device APIs (David Lively)
|
||||||
|
@ -562,6 +562,9 @@ virRegisterDeviceMonitor(virDeviceMonitorPtr driver)
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEBUG ("registering %s as device driver %d",
|
||||||
|
driver->name, virDeviceMonitorTabCount);
|
||||||
|
|
||||||
virDeviceMonitorTab[virDeviceMonitorTabCount] = driver;
|
virDeviceMonitorTab[virDeviceMonitorTabCount] = driver;
|
||||||
return virDeviceMonitorTabCount++;
|
return virDeviceMonitorTabCount++;
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,6 @@ VIR_ENUM_IMPL(virNodeDevCap, VIR_NODE_DEV_CAP_LAST,
|
|||||||
"usb_device",
|
"usb_device",
|
||||||
"usb",
|
"usb",
|
||||||
"net",
|
"net",
|
||||||
"block",
|
|
||||||
"scsi_host",
|
"scsi_host",
|
||||||
"scsi",
|
"scsi",
|
||||||
"storage");
|
"storage");
|
||||||
@ -221,14 +220,14 @@ char *virNodeDeviceDefFormat(virConnectPtr conn,
|
|||||||
data->pci_dev.slot);
|
data->pci_dev.slot);
|
||||||
virBufferVSprintf(&buf, " <function>%d</function>\n",
|
virBufferVSprintf(&buf, " <function>%d</function>\n",
|
||||||
data->pci_dev.function);
|
data->pci_dev.function);
|
||||||
virBufferVSprintf(&buf, " <product id='%d'",
|
virBufferVSprintf(&buf, " <product id='0x%04x'",
|
||||||
data->pci_dev.product);
|
data->pci_dev.product);
|
||||||
if (data->pci_dev.product_name)
|
if (data->pci_dev.product_name)
|
||||||
virBufferEscapeString(&buf, ">%s</product>\n",
|
virBufferEscapeString(&buf, ">%s</product>\n",
|
||||||
data->pci_dev.product_name);
|
data->pci_dev.product_name);
|
||||||
else
|
else
|
||||||
virBufferAddLit(&buf, " />\n");
|
virBufferAddLit(&buf, " />\n");
|
||||||
virBufferVSprintf(&buf, " <vendor id='%d'",
|
virBufferVSprintf(&buf, " <vendor id='0x%04x'",
|
||||||
data->pci_dev.vendor);
|
data->pci_dev.vendor);
|
||||||
if (data->pci_dev.vendor_name)
|
if (data->pci_dev.vendor_name)
|
||||||
virBufferEscapeString(&buf, ">%s</vendor>\n",
|
virBufferEscapeString(&buf, ">%s</vendor>\n",
|
||||||
@ -240,14 +239,14 @@ char *virNodeDeviceDefFormat(virConnectPtr conn,
|
|||||||
virBufferVSprintf(&buf, " <bus>%d</bus>\n", data->usb_dev.bus);
|
virBufferVSprintf(&buf, " <bus>%d</bus>\n", data->usb_dev.bus);
|
||||||
virBufferVSprintf(&buf, " <device>%d</device>\n",
|
virBufferVSprintf(&buf, " <device>%d</device>\n",
|
||||||
data->usb_dev.device);
|
data->usb_dev.device);
|
||||||
virBufferVSprintf(&buf, " <product id='%d'",
|
virBufferVSprintf(&buf, " <product id='0x%04x'",
|
||||||
data->usb_dev.product);
|
data->usb_dev.product);
|
||||||
if (data->usb_dev.product_name)
|
if (data->usb_dev.product_name)
|
||||||
virBufferEscapeString(&buf, ">%s</product>\n",
|
virBufferEscapeString(&buf, ">%s</product>\n",
|
||||||
data->usb_dev.product_name);
|
data->usb_dev.product_name);
|
||||||
else
|
else
|
||||||
virBufferAddLit(&buf, " />\n");
|
virBufferAddLit(&buf, " />\n");
|
||||||
virBufferVSprintf(&buf, " <vendor id='%d'",
|
virBufferVSprintf(&buf, " <vendor id='0x%04x'",
|
||||||
data->usb_dev.vendor);
|
data->usb_dev.vendor);
|
||||||
if (data->usb_dev.vendor_name)
|
if (data->usb_dev.vendor_name)
|
||||||
virBufferEscapeString(&buf, ">%s</vendor>\n",
|
virBufferEscapeString(&buf, ">%s</vendor>\n",
|
||||||
@ -280,10 +279,6 @@ char *virNodeDeviceDefFormat(virConnectPtr conn,
|
|||||||
virBufferVSprintf(&buf, " <capability type='%s'/>\n", subtyp);
|
virBufferVSprintf(&buf, " <capability type='%s'/>\n", subtyp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VIR_NODE_DEV_CAP_BLOCK:
|
|
||||||
virBufferVSprintf(&buf, " <device>%s</device>\n",
|
|
||||||
data->block.device);
|
|
||||||
break;
|
|
||||||
case VIR_NODE_DEV_CAP_SCSI_HOST:
|
case VIR_NODE_DEV_CAP_SCSI_HOST:
|
||||||
virBufferVSprintf(&buf, " <host>%d</host>\n",
|
virBufferVSprintf(&buf, " <host>%d</host>\n",
|
||||||
data->scsi_host.host);
|
data->scsi_host.host);
|
||||||
@ -299,6 +294,8 @@ char *virNodeDeviceDefFormat(virConnectPtr conn,
|
|||||||
data->scsi.type);
|
data->scsi.type);
|
||||||
break;
|
break;
|
||||||
case VIR_NODE_DEV_CAP_STORAGE:
|
case VIR_NODE_DEV_CAP_STORAGE:
|
||||||
|
virBufferVSprintf(&buf, " <block>%s</block>\n",
|
||||||
|
data->storage.block);
|
||||||
if (data->storage.bus)
|
if (data->storage.bus)
|
||||||
virBufferVSprintf(&buf, " <bus>%s</bus>\n",
|
virBufferVSprintf(&buf, " <bus>%s</bus>\n",
|
||||||
data->storage.bus);
|
data->storage.bus);
|
||||||
@ -380,15 +377,13 @@ void virNodeDevCapsDefFree(virNodeDevCapsDefPtr caps)
|
|||||||
VIR_FREE(data->net.interface);
|
VIR_FREE(data->net.interface);
|
||||||
VIR_FREE(data->net.address);
|
VIR_FREE(data->net.address);
|
||||||
break;
|
break;
|
||||||
case VIR_NODE_DEV_CAP_BLOCK:
|
|
||||||
VIR_FREE(data->block.device);
|
|
||||||
break;
|
|
||||||
case VIR_NODE_DEV_CAP_SCSI_HOST:
|
case VIR_NODE_DEV_CAP_SCSI_HOST:
|
||||||
break;
|
break;
|
||||||
case VIR_NODE_DEV_CAP_SCSI:
|
case VIR_NODE_DEV_CAP_SCSI:
|
||||||
VIR_FREE(data->scsi.type);
|
VIR_FREE(data->scsi.type);
|
||||||
break;
|
break;
|
||||||
case VIR_NODE_DEV_CAP_STORAGE:
|
case VIR_NODE_DEV_CAP_STORAGE:
|
||||||
|
VIR_FREE(data->storage.block);
|
||||||
VIR_FREE(data->storage.bus);
|
VIR_FREE(data->storage.bus);
|
||||||
VIR_FREE(data->storage.drive_type);
|
VIR_FREE(data->storage.drive_type);
|
||||||
VIR_FREE(data->storage.model);
|
VIR_FREE(data->storage.model);
|
||||||
|
@ -34,7 +34,6 @@ enum virNodeDevCapType {
|
|||||||
VIR_NODE_DEV_CAP_USB_DEV, /* USB device */
|
VIR_NODE_DEV_CAP_USB_DEV, /* USB device */
|
||||||
VIR_NODE_DEV_CAP_USB_INTERFACE, /* USB interface */
|
VIR_NODE_DEV_CAP_USB_INTERFACE, /* USB interface */
|
||||||
VIR_NODE_DEV_CAP_NET, /* Network device */
|
VIR_NODE_DEV_CAP_NET, /* Network device */
|
||||||
VIR_NODE_DEV_CAP_BLOCK, /* Block device */
|
|
||||||
VIR_NODE_DEV_CAP_SCSI_HOST, /* SCSI Host Bus Adapter */
|
VIR_NODE_DEV_CAP_SCSI_HOST, /* SCSI Host Bus Adapter */
|
||||||
VIR_NODE_DEV_CAP_SCSI, /* SCSI device */
|
VIR_NODE_DEV_CAP_SCSI, /* SCSI device */
|
||||||
VIR_NODE_DEV_CAP_STORAGE, /* Storage device */
|
VIR_NODE_DEV_CAP_STORAGE, /* Storage device */
|
||||||
@ -106,9 +105,6 @@ struct _virNodeDevCapsDef {
|
|||||||
char *interface;
|
char *interface;
|
||||||
enum virNodeDevNetCapType subtype; /* LAST -> no subtype */
|
enum virNodeDevNetCapType subtype; /* LAST -> no subtype */
|
||||||
} net;
|
} net;
|
||||||
struct {
|
|
||||||
char *device;
|
|
||||||
} block;
|
|
||||||
struct {
|
struct {
|
||||||
unsigned host;
|
unsigned host;
|
||||||
} scsi_host;
|
} scsi_host;
|
||||||
@ -122,6 +118,7 @@ struct _virNodeDevCapsDef {
|
|||||||
struct {
|
struct {
|
||||||
unsigned long long size;
|
unsigned long long size;
|
||||||
unsigned long long removable_media_size;
|
unsigned long long removable_media_size;
|
||||||
|
char *block;
|
||||||
char *bus;
|
char *bus;
|
||||||
char *drive_type;
|
char *drive_type;
|
||||||
char *model;
|
char *model;
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "uuid.h"
|
#include "uuid.h"
|
||||||
|
#include "logging.h"
|
||||||
|
|
||||||
#include "node_device.h"
|
#include "node_device.h"
|
||||||
|
|
||||||
@ -133,12 +134,12 @@ static int gather_net_cap(DevkitDevice *dkdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int gather_block_cap(DevkitDevice *dkdev,
|
static int gather_storage_cap(DevkitDevice *dkdev,
|
||||||
union _virNodeDevCapData *d)
|
union _virNodeDevCapData *d)
|
||||||
{
|
{
|
||||||
const char *device = devkit_device_get_device_file(dkdev);
|
const char *device = devkit_device_get_device_file(dkdev);
|
||||||
|
|
||||||
if (device && ((d->block.device = strdup(device)) == NULL))
|
if (device && ((d->storage.block = strdup(device)) == NULL))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -158,7 +159,7 @@ static caps_tbl_entry caps_tbl[] = {
|
|||||||
{ "pci", VIR_NODE_DEV_CAP_PCI_DEV, gather_pci_cap },
|
{ "pci", VIR_NODE_DEV_CAP_PCI_DEV, gather_pci_cap },
|
||||||
{ "usb", VIR_NODE_DEV_CAP_USB_DEV, gather_usb_cap },
|
{ "usb", VIR_NODE_DEV_CAP_USB_DEV, gather_usb_cap },
|
||||||
{ "net", VIR_NODE_DEV_CAP_NET, gather_net_cap },
|
{ "net", VIR_NODE_DEV_CAP_NET, gather_net_cap },
|
||||||
{ "block", VIR_NODE_DEV_CAP_BLOCK, gather_block_cap },
|
{ "block", VIR_NODE_DEV_CAP_STORAGE, gather_storage_cap },
|
||||||
// TODO: more caps!
|
// TODO: more caps!
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -211,14 +211,6 @@ static int gather_net_cap(LibHalContext *ctx, const char *udi,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int gather_block_cap(LibHalContext *ctx, const char *udi,
|
|
||||||
union _virNodeDevCapData *d)
|
|
||||||
{
|
|
||||||
(void)get_str_prop(ctx, udi, "block.device", &d->block.device);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int gather_scsi_host_cap(LibHalContext *ctx, const char *udi,
|
static int gather_scsi_host_cap(LibHalContext *ctx, const char *udi,
|
||||||
union _virNodeDevCapData *d)
|
union _virNodeDevCapData *d)
|
||||||
{
|
{
|
||||||
@ -243,6 +235,7 @@ static int gather_storage_cap(LibHalContext *ctx, const char *udi,
|
|||||||
union _virNodeDevCapData *d)
|
union _virNodeDevCapData *d)
|
||||||
{
|
{
|
||||||
int val;
|
int val;
|
||||||
|
(void)get_str_prop(ctx, udi, "block.device", &d->storage.block);
|
||||||
(void)get_str_prop(ctx, udi, "storage.bus", &d->storage.bus);
|
(void)get_str_prop(ctx, udi, "storage.bus", &d->storage.bus);
|
||||||
(void)get_str_prop(ctx, udi, "storage.drive_type", &d->storage.drive_type);
|
(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.model", &d->storage.model);
|
||||||
@ -307,7 +300,6 @@ static caps_tbl_entry caps_tbl[] = {
|
|||||||
{ "usb", VIR_NODE_DEV_CAP_USB_INTERFACE, gather_usb_cap },
|
{ "usb", VIR_NODE_DEV_CAP_USB_INTERFACE, gather_usb_cap },
|
||||||
{ "usb_device", VIR_NODE_DEV_CAP_USB_DEV, gather_usb_device_cap },
|
{ "usb_device", VIR_NODE_DEV_CAP_USB_DEV, gather_usb_device_cap },
|
||||||
{ "net", VIR_NODE_DEV_CAP_NET, gather_net_cap },
|
{ "net", VIR_NODE_DEV_CAP_NET, gather_net_cap },
|
||||||
{ "block", VIR_NODE_DEV_CAP_BLOCK, gather_block_cap },
|
|
||||||
{ "scsi_host", VIR_NODE_DEV_CAP_SCSI_HOST, gather_scsi_host_cap },
|
{ "scsi_host", VIR_NODE_DEV_CAP_SCSI_HOST, gather_scsi_host_cap },
|
||||||
{ "scsi", VIR_NODE_DEV_CAP_SCSI, gather_scsi_cap },
|
{ "scsi", VIR_NODE_DEV_CAP_SCSI, gather_scsi_cap },
|
||||||
{ "storage", VIR_NODE_DEV_CAP_STORAGE, gather_storage_cap },
|
{ "storage", VIR_NODE_DEV_CAP_STORAGE, gather_storage_cap },
|
||||||
@ -438,6 +430,13 @@ static void dev_create(char *udi)
|
|||||||
rv = gather_capabilities(ctx, udi, &dev->def->caps);
|
rv = gather_capabilities(ctx, udi, &dev->def->caps);
|
||||||
if (rv != 0) goto failure;
|
if (rv != 0) goto failure;
|
||||||
|
|
||||||
|
if (dev->def->caps == NULL) {
|
||||||
|
virNodeDeviceDefFree(dev->def);
|
||||||
|
VIR_FREE(dev);
|
||||||
|
VIR_FREE(udi);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (VIR_REALLOC_N(driverState->devs.objs, driverState->devs.count + 1) < 0)
|
if (VIR_REALLOC_N(driverState->devs.objs, driverState->devs.count + 1) < 0)
|
||||||
goto failure;
|
goto failure;
|
||||||
|
|
||||||
|
@ -4462,6 +4462,7 @@ cmdNodeListDevices (vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
|
|||||||
free(devices);
|
free(devices);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
qsort(&devices[0], num_devices, sizeof(char*), namesorter);
|
||||||
for (i = 0; i < num_devices; i++) {
|
for (i = 0; i < num_devices; i++) {
|
||||||
vshPrint(ctl, "%s\n", devices[i]);
|
vshPrint(ctl, "%s\n", devices[i]);
|
||||||
free(devices[i]);
|
free(devices[i]);
|
||||||
|
Loading…
Reference in New Issue
Block a user