Misc tweaks to node device impl

This commit is contained in:
Daniel P. Berrange 2008-11-21 12:46:39 +00:00
parent 83928c2074
commit 145bb1e821
7 changed files with 36 additions and 29 deletions

View File

@ -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)

View File

@ -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++;
} }

View File

@ -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);

View File

@ -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;

View File

@ -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!
}; };

View File

@ -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;

View File

@ -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]);