]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Misc tweaks to node device impl
authorDaniel P. Berrange <berrange@redhat.com>
Fri, 21 Nov 2008 12:46:39 +0000 (12:46 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Fri, 21 Nov 2008 12:46:39 +0000 (12:46 +0000)
ChangeLog
src/libvirt.c
src/node_device_conf.c
src/node_device_conf.h
src/node_device_devkit.c
src/node_device_hal.c
src/virsh.c

index dec23d04dc4eaea2c7552964e53d6bd2422b1aec..4c206155cb4cdd22bffb5a87a88b97ad6f64ca2f 100644 (file)
--- a/ChangeLog
+++ b/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>
 
        Python binding for node device APIs (David Lively)
index 32dc3cc2c36f0a7084b2b62c9e6990b14c3cd53a..f4453332e7550e11fc9087323e4a0747c04496a1 100644 (file)
@@ -562,6 +562,9 @@ virRegisterDeviceMonitor(virDeviceMonitorPtr driver)
         return(-1);
     }
 
+    DEBUG ("registering %s as device driver %d",
+           driver->name, virDeviceMonitorTabCount);
+
     virDeviceMonitorTab[virDeviceMonitorTabCount] = driver;
     return virDeviceMonitorTabCount++;
 }
index d04b73d29de515a24e69bf6343f7af9a1a30e33b..6e0c19fdb9e55dea70e06532ffa7d9d7f8e010e6 100644 (file)
@@ -43,7 +43,6 @@ VIR_ENUM_IMPL(virNodeDevCap, VIR_NODE_DEV_CAP_LAST,
               "usb_device",
               "usb",
               "net",
-              "block",
               "scsi_host",
               "scsi",
               "storage");
@@ -221,14 +220,14 @@ char *virNodeDeviceDefFormat(virConnectPtr conn,
                               data->pci_dev.slot);
             virBufferVSprintf(&buf, "    <function>%d</function>\n",
                               data->pci_dev.function);
-            virBufferVSprintf(&buf, "    <product id='%d'",
+            virBufferVSprintf(&buf, "    <product id='0x%04x'",
                                   data->pci_dev.product);
             if (data->pci_dev.product_name)
                 virBufferEscapeString(&buf, ">%s</product>\n",
                                       data->pci_dev.product_name);
             else
                 virBufferAddLit(&buf, " />\n");
-            virBufferVSprintf(&buf, "    <vendor id='%d'",
+            virBufferVSprintf(&buf, "    <vendor id='0x%04x'",
                                   data->pci_dev.vendor);
             if (data->pci_dev.vendor_name)
                 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, "    <device>%d</device>\n",
                               data->usb_dev.device);
-            virBufferVSprintf(&buf, "    <product id='%d'",
+            virBufferVSprintf(&buf, "    <product id='0x%04x'",
                                   data->usb_dev.product);
             if (data->usb_dev.product_name)
                 virBufferEscapeString(&buf, ">%s</product>\n",
                                       data->usb_dev.product_name);
             else
                 virBufferAddLit(&buf, " />\n");
-            virBufferVSprintf(&buf, "    <vendor id='%d'",
+            virBufferVSprintf(&buf, "    <vendor id='0x%04x'",
                                   data->usb_dev.vendor);
             if (data->usb_dev.vendor_name)
                 virBufferEscapeString(&buf, ">%s</vendor>\n",
@@ -280,10 +279,6 @@ char *virNodeDeviceDefFormat(virConnectPtr conn,
                 virBufferVSprintf(&buf, "    <capability type='%s'/>\n", subtyp);
             }
             break;
-        case VIR_NODE_DEV_CAP_BLOCK:
-            virBufferVSprintf(&buf, "    <device>%s</device>\n",
-                              data->block.device);
-            break;
         case VIR_NODE_DEV_CAP_SCSI_HOST:
             virBufferVSprintf(&buf, "    <host>%d</host>\n",
                               data->scsi_host.host);
@@ -299,6 +294,8 @@ char *virNodeDeviceDefFormat(virConnectPtr conn,
                                   data->scsi.type);
             break;
         case VIR_NODE_DEV_CAP_STORAGE:
+            virBufferVSprintf(&buf, "    <block>%s</block>\n",
+                              data->storage.block);
             if (data->storage.bus)
                 virBufferVSprintf(&buf, "    <bus>%s</bus>\n",
                                   data->storage.bus);
@@ -380,15 +377,13 @@ void virNodeDevCapsDefFree(virNodeDevCapsDefPtr caps)
         VIR_FREE(data->net.interface);
         VIR_FREE(data->net.address);
         break;
-    case VIR_NODE_DEV_CAP_BLOCK:
-        VIR_FREE(data->block.device);
-        break;
     case VIR_NODE_DEV_CAP_SCSI_HOST:
         break;
     case VIR_NODE_DEV_CAP_SCSI:
         VIR_FREE(data->scsi.type);
         break;
     case VIR_NODE_DEV_CAP_STORAGE:
+        VIR_FREE(data->storage.block);
         VIR_FREE(data->storage.bus);
         VIR_FREE(data->storage.drive_type);
         VIR_FREE(data->storage.model);
index 37a7941a329a76bfd34bccbaa879d981594e7278..a2cd844c0c21ce483b10644595e9abcb0973f2d8 100644 (file)
@@ -34,7 +34,6 @@ enum virNodeDevCapType {
     VIR_NODE_DEV_CAP_USB_DEV,          /* USB device */
     VIR_NODE_DEV_CAP_USB_INTERFACE,    /* USB interface */
     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,             /* SCSI device */
     VIR_NODE_DEV_CAP_STORAGE,          /* Storage device */
@@ -106,9 +105,6 @@ struct _virNodeDevCapsDef {
             char *interface;
             enum virNodeDevNetCapType subtype;  /* LAST -> no subtype */
         } net;
-        struct {
-            char *device;
-        } block;
         struct {
             unsigned host;
         } scsi_host;
@@ -122,6 +118,7 @@ struct _virNodeDevCapsDef {
         struct {
             unsigned long long size;
             unsigned long long removable_media_size;
+            char *block;
             char *bus;
             char *drive_type;
             char *model;
index 2679f61bb9b851d89658bbe8c0388656ef3a72f1..846df8c7209cc4acf5518224437d6e54029f1b3a 100644 (file)
@@ -31,6 +31,7 @@
 #include "event.h"
 #include "memory.h"
 #include "uuid.h"
+#include "logging.h"
 
 #include "node_device.h"
 
@@ -133,12 +134,12 @@ static int gather_net_cap(DevkitDevice *dkdev,
 }
 
 
-static int gather_block_cap(DevkitDevice *dkdev,
-                          union _virNodeDevCapData *d)
+static int gather_storage_cap(DevkitDevice *dkdev,
+                              union _virNodeDevCapData *d)
 {
     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 0;
@@ -158,7 +159,7 @@ static caps_tbl_entry caps_tbl[] = {
     { "pci",        VIR_NODE_DEV_CAP_PCI_DEV,   gather_pci_cap },
     { "usb",        VIR_NODE_DEV_CAP_USB_DEV,   gather_usb_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!
 };
 
index ad36778295a29138b397abd40ebeb096b3fedafe..6bca284b361c4225e187239268cea6009c645f8d 100644 (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,
                                 union _virNodeDevCapData *d)
 {
@@ -243,6 +235,7 @@ static int gather_storage_cap(LibHalContext *ctx, const char *udi,
                               union _virNodeDevCapData *d)
 {
     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.drive_type", &d->storage.drive_type);
     (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_device", VIR_NODE_DEV_CAP_USB_DEV,       gather_usb_device_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",       VIR_NODE_DEV_CAP_SCSI,          gather_scsi_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);
     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)
         goto failure;
 
index 193afba880c47a5a16478fc4cb81eab8962497f6..c6b02ee4a1bc48beb0a3f28bf6eecb770f9a68a2 100644 (file)
@@ -4462,6 +4462,7 @@ cmdNodeListDevices (vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
         free(devices);
         return FALSE;
     }
+    qsort(&devices[0], num_devices, sizeof(char*), namesorter);
     for (i = 0; i < num_devices; i++) {
         vshPrint(ctl, "%s\n", devices[i]);
         free(devices[i]);