]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
conf: Introduce virDomainDeviceGetInfo API
authorJiri Denemark <jdenemar@redhat.com>
Thu, 20 Mar 2014 21:34:00 +0000 (22:34 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Thu, 20 Mar 2014 21:42:30 +0000 (22:42 +0100)
The offset of virDomainDeviceInfo structure within a device definition
varies with device type and some types do not contain the info structure
at all. This new API makes it easier to access the info structure from a
generic virDomainDeviceDef structure.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms

index 4dc93c63512eba261678acec546d5ae145c99c3c..95c6c6d8979c4279ad2eb39686640aa627048219 100644 (file)
@@ -2565,6 +2565,53 @@ int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info,
     return 0;
 }
 
+virDomainDeviceInfoPtr
+virDomainDeviceGetInfo(virDomainDeviceDefPtr device)
+{
+    switch ((virDomainDeviceType) device->type) {
+    case VIR_DOMAIN_DEVICE_DISK:
+        return &device->data.disk->info;
+    case VIR_DOMAIN_DEVICE_FS:
+        return &device->data.fs->info;
+    case VIR_DOMAIN_DEVICE_NET:
+        return &device->data.net->info;
+    case VIR_DOMAIN_DEVICE_INPUT:
+        return &device->data.input->info;
+    case VIR_DOMAIN_DEVICE_SOUND:
+        return &device->data.sound->info;
+    case VIR_DOMAIN_DEVICE_VIDEO:
+        return &device->data.video->info;
+    case VIR_DOMAIN_DEVICE_HOSTDEV:
+        return device->data.hostdev->info;
+    case VIR_DOMAIN_DEVICE_WATCHDOG:
+        return &device->data.watchdog->info;
+    case VIR_DOMAIN_DEVICE_CONTROLLER:
+        return &device->data.controller->info;
+    case VIR_DOMAIN_DEVICE_HUB:
+        return &device->data.hub->info;
+    case VIR_DOMAIN_DEVICE_REDIRDEV:
+        return &device->data.redirdev->info;
+    case VIR_DOMAIN_DEVICE_SMARTCARD:
+        return &device->data.smartcard->info;
+    case VIR_DOMAIN_DEVICE_CHR:
+        return &device->data.chr->info;
+    case VIR_DOMAIN_DEVICE_MEMBALLOON:
+        return &device->data.memballoon->info;
+    case VIR_DOMAIN_DEVICE_NVRAM:
+        return &device->data.nvram->info;
+    case VIR_DOMAIN_DEVICE_RNG:
+        return &device->data.rng->info;
+
+    /* The following devices do not contain virDomainDeviceInfo */
+    case VIR_DOMAIN_DEVICE_LEASE:
+    case VIR_DOMAIN_DEVICE_GRAPHICS:
+    case VIR_DOMAIN_DEVICE_LAST:
+    case VIR_DOMAIN_DEVICE_NONE:
+        break;
+    }
+    return NULL;
+}
+
 static bool
 virDomainDeviceInfoIsSet(virDomainDeviceInfoPtr info, unsigned int flags)
 {
index d5d5fd32694d120b4db3bf0ba50a71013f360f1c..bf124149f9c6e8c9b2c2308f075ca0daaf6d5908 100644 (file)
@@ -2291,6 +2291,7 @@ virDomainDeviceDefPtr virDomainDeviceDefCopy(virDomainDeviceDefPtr src,
                                              virDomainXMLOptionPtr xmlopt);
 int virDomainDeviceAddressIsValid(virDomainDeviceInfoPtr info,
                                   int type);
+virDomainDeviceInfoPtr virDomainDeviceGetInfo(virDomainDeviceDefPtr device);
 int virDomainDeviceInfoCopy(virDomainDeviceInfoPtr dst,
                             virDomainDeviceInfoPtr src);
 void virDomainDeviceInfoClear(virDomainDeviceInfoPtr info);
index 793550ca7f7500641cd8ae1b4cfced48cca1198a..e042706a5b395702405950e9a5a8661693dbcdd9 100644 (file)
@@ -178,6 +178,7 @@ virDomainDeviceDefCopy;
 virDomainDeviceDefFree;
 virDomainDeviceDefParse;
 virDomainDeviceFindControllerModel;
+virDomainDeviceGetInfo;
 virDomainDeviceInfoCopy;
 virDomainDeviceInfoIterate;
 virDomainDeviceTypeToString;