Rather than a bunch of embedded union structs, let's create structs
for each of the structs within the union and make the struct easier
to read.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/conf/node_device_conf.h | 224 ++++++++++++++++++++++++--------------------
1 file changed, 125 insertions(+), 99 deletions(-)
diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h
index f05e61b..1107a88 100644
--- a/src/conf/node_device_conf.h
+++ b/src/conf/node_device_conf.h
@@ -103,108 +103,134 @@ typedef enum {
VIR_ENUM_DECL(virNodeDevDRM)
+typedef struct _virNodeDevCapSystemHardware {
+ char *vendor_name;
+ char *version;
+ char *serial;
+ unsigned char uuid[VIR_UUID_BUFLEN];
+} virNodeDevSystemHardware, *virNodeDevSystemHardwarePtr;
+
+typedef struct _virNodeDevCapSystemFirmware {
+ char *vendor_name;
+ char *version;
+ char *release_date;
+} virNodeDevSystemFirmware, *virNodeDevSystemFirmwarePtr;
+
+typedef struct _virNodeDevCapSystem {
+ char *product_name;
+ virNodeDevSystemHardware hardware;
+ virNodeDevSystemFirmware firmware;
+} virNodeDevCapSystem, *virNodeDevCapSystemPtr;
+
+typedef struct _virNodeDevCapPCIDev {
+ unsigned int domain;
+ unsigned int bus;
+ unsigned int slot;
+ unsigned int function;
+ unsigned int product;
+ unsigned int vendor;
+ unsigned int class;
+ char *product_name;
+ char *vendor_name;
+ virPCIDeviceAddressPtr physical_function;
+ virPCIDeviceAddressPtr *virtual_functions;
+ size_t num_virtual_functions;
+ unsigned int max_virtual_functions;
+ unsigned int flags;
+ virPCIDeviceAddressPtr *iommuGroupDevices;
+ size_t nIommuGroupDevices;
+ unsigned int iommuGroupNumber;
+ int numa_node;
+ virPCIEDeviceInfoPtr pci_express;
+ int hdrType; /* enum virPCIHeaderType or -1 */
+} virNodeDevCapPCIDev, *virNodeDevCapPCIDevPtr;
+
+typedef struct _virNodeDevCapUSBDev {
+ unsigned int bus;
+ unsigned int device;
+ unsigned int product;
+ unsigned int vendor;
+ char *product_name;
+ char *vendor_name;
+} virNodeDevCapUSBDev, *virNodeDevCapUSBDevPtr;
+
+typedef struct _virNodeDevCapUSBIf {
+ unsigned int number;
+ unsigned int _class; /* "class" is reserved in C */
+ unsigned int subclass;
+ unsigned int protocol;
+ char *description;
+} virNodeDevCapUSBIf, *virNodeDevCapUSBIfPtr;
+
+typedef struct _virNodeDevCapNet {
+ char *address;
+ unsigned int address_len;
+ char *ifname;
+ virNetDevIfLink lnk;
+ virNodeDevNetCapType subtype; /* LAST -> no subtype */
+ virBitmapPtr features; /* enum virNetDevFeature */
+} virNodeDevCapNet, *virNodeDevCapNetPtr;
+
+typedef struct _virNodeDevCapSCSIHost {
+ unsigned int host;
+ int unique_id;
+ char *wwnn;
+ char *wwpn;
+ char *fabric_wwn;
+ unsigned int flags;
+ int max_vports;
+ int vports;
+} virNodeDevCapSCSIHost, *virNodeDevCapSCSIHostPtr;
+
+typedef struct _virNodeDevCapSCSITarget {
+ char *name;
+} virNodeDevCapSCSITarget, *virNodeDevCapSCSITargetPtr;
+
+typedef struct _virNodeDevCapSCSI {
+ unsigned int host;
+ unsigned int bus;
+ unsigned int target;
+ unsigned int lun;
+ char *type;
+} virNodeDevCapSCSI, *virNodeDevCapSCSIPtr;
+
+typedef struct _virNodeDevCapStorage {
+ unsigned long long size;
+ unsigned long long num_blocks;
+ unsigned long long logical_block_size;
+ unsigned long long removable_media_size;
+ char *block;
+ char *bus;
+ char *drive_type;
+ char *model;
+ char *vendor;
+ char *serial;
+ char *media_label;
+ unsigned int flags; /* virNodeDevStorageCapFlags bits */
+} virNodeDevCapStorage, *virNodeDevCapStoragePtr;
+
+typedef struct _virNodeDevCapSCSIGeneric {
+ char *path;
+} virNodeDevCapSCSIGeneric, *virNodeDevCapSCSIGenericPtr;
+
+typedef struct _virNodeDevCapDRM {
+ virNodeDevDRMType type;
+} virNodeDevCapDRM, *virNodeDevCapDRMPtr;
+
typedef struct _virNodeDevCapData {
virNodeDevCapType type;
union {
- struct {
- char *product_name;
- struct {
- char *vendor_name;
- char *version;
- char *serial;
- unsigned char uuid[VIR_UUID_BUFLEN];
- } hardware;
- struct {
- char *vendor_name;
- char *version;
- char *release_date;
- } firmware;
- } system;
- struct {
- unsigned int domain;
- unsigned int bus;
- unsigned int slot;
- unsigned int function;
- unsigned int product;
- unsigned int vendor;
- unsigned int class;
- char *product_name;
- char *vendor_name;
- virPCIDeviceAddressPtr physical_function;
- virPCIDeviceAddressPtr *virtual_functions;
- size_t num_virtual_functions;
- unsigned int max_virtual_functions;
- unsigned int flags;
- virPCIDeviceAddressPtr *iommuGroupDevices;
- size_t nIommuGroupDevices;
- unsigned int iommuGroupNumber;
- int numa_node;
- virPCIEDeviceInfoPtr pci_express;
- int hdrType; /* enum virPCIHeaderType or -1 */
- } pci_dev;
- struct {
- unsigned int bus;
- unsigned int device;
- unsigned int product;
- unsigned int vendor;
- char *product_name;
- char *vendor_name;
- } usb_dev;
- struct {
- unsigned int number;
- unsigned int _class; /* "class" is reserved in C */
- unsigned int subclass;
- unsigned int protocol;
- char *description;
- } usb_if;
- struct {
- char *address;
- unsigned int address_len;
- char *ifname;
- virNetDevIfLink lnk;
- virNodeDevNetCapType subtype; /* LAST -> no subtype */
- virBitmapPtr features; /* enum virNetDevFeature */
- } net;
- struct {
- unsigned int host;
- int unique_id;
- char *wwnn;
- char *wwpn;
- char *fabric_wwn;
- unsigned int flags;
- int max_vports;
- int vports;
- } scsi_host;
- struct {
- char *name;
- } scsi_target;
- struct {
- unsigned int host;
- unsigned int bus;
- unsigned int target;
- unsigned int lun;
- char *type;
- } scsi;
- struct {
- unsigned long long size;
- unsigned long long num_blocks;
- unsigned long long logical_block_size;
- unsigned long long removable_media_size;
- char *block;
- char *bus;
- char *drive_type;
- char *model;
- char *vendor;
- char *serial;
- char *media_label;
- unsigned int flags; /* virNodeDevStorageCapFlags bits */
- } storage;
- struct {
- char *path;
- } sg; /* SCSI generic device */
- struct {
- virNodeDevDRMType type;
- } drm;
+ virNodeDevCapSystem system;
+ virNodeDevCapPCIDev pci_dev;
+ virNodeDevCapUSBDev usb_dev;
+ virNodeDevCapUSBIf usb_if;
+ virNodeDevCapNet net;
+ virNodeDevCapSCSIHost scsi_host;
+ virNodeDevCapSCSITarget scsi_target;
+ virNodeDevCapSCSI scsi;
+ virNodeDevCapStorage storage;
+ virNodeDevCapSCSIGeneric sg;
+ virNodeDevCapDRM drm;
};
} virNodeDevCapData, *virNodeDevCapDataPtr;
--
2.9.3