}
static int
-qemuDomainAttachDeviceConfig(virQEMUCapsPtr qemuCaps,
- virDomainDefPtr vmdef,
+qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef,
virDomainDeviceDefPtr dev,
- virConnectPtr conn)
+ virConnectPtr conn,
+ virCapsPtr caps,
+ unsigned int parse_flags,
+ virDomainXMLOptionPtr xmlopt)
{
virDomainDiskDefPtr disk;
virDomainNetDefPtr net;
return -1;
/* vmdef has the pointer. Generic codes for vmdef will do all jobs */
dev->data.disk = NULL;
- if (disk->bus != VIR_DOMAIN_DISK_BUS_VIRTIO)
- if (virDomainDefAddImplicitDevices(vmdef) < 0)
- return -1;
- if (qemuDomainAssignAddresses(vmdef, qemuCaps, NULL) < 0)
- return -1;
break;
case VIR_DOMAIN_DEVICE_NET:
if (virDomainNetInsert(vmdef, net))
return -1;
dev->data.net = NULL;
- if (qemuDomainAssignAddresses(vmdef, qemuCaps, NULL) < 0)
- return -1;
break;
case VIR_DOMAIN_DEVICE_HOSTDEV:
if (virDomainHostdevInsert(vmdef, hostdev))
return -1;
dev->data.hostdev = NULL;
- if (virDomainDefAddImplicitDevices(vmdef) < 0)
- return -1;
- if (qemuDomainAssignAddresses(vmdef, qemuCaps, NULL) < 0)
- return -1;
break;
case VIR_DOMAIN_DEVICE_LEASE:
return -1;
dev->data.controller = NULL;
- if (qemuDomainAssignAddresses(vmdef, qemuCaps, NULL) < 0)
- return -1;
break;
case VIR_DOMAIN_DEVICE_CHR:
if (qemuDomainChrInsert(vmdef, dev->data.chr) < 0)
return -1;
dev->data.chr = NULL;
- if (virDomainDefAddImplicitDevices(vmdef) < 0)
- return -1;
- if (qemuDomainAssignAddresses(vmdef, qemuCaps, NULL) < 0)
- return -1;
break;
case VIR_DOMAIN_DEVICE_FS:
return -1;
dev->data.rng = NULL;
- if (qemuDomainAssignAddresses(vmdef, qemuCaps, NULL) < 0)
- return -1;
break;
case VIR_DOMAIN_DEVICE_MEMORY:
virDomainDeviceTypeToString(dev->type));
return -1;
}
+
+ if (virDomainDefPostParse(vmdef, caps, parse_flags, xmlopt) < 0)
+ return -1;
+
return 0;
}
static int
qemuDomainDetachDeviceConfig(virDomainDefPtr vmdef,
- virDomainDeviceDefPtr dev)
+ virDomainDeviceDefPtr dev,
+ virCapsPtr caps,
+ unsigned int parse_flags,
+ virDomainXMLOptionPtr xmlopt)
{
virDomainDiskDefPtr disk, det_disk;
virDomainNetDefPtr net;
virDomainDeviceTypeToString(dev->type));
return -1;
}
+
+ if (virDomainDefPostParse(vmdef, caps, parse_flags, xmlopt) < 0)
+ return -1;
+
return 0;
}
static int
-qemuDomainUpdateDeviceConfig(virQEMUCapsPtr qemuCaps,
- virDomainDefPtr vmdef,
- virDomainDeviceDefPtr dev)
+qemuDomainUpdateDeviceConfig(virDomainDefPtr vmdef,
+ virDomainDeviceDefPtr dev,
+ virCapsPtr caps,
+ unsigned int parse_flags,
+ virDomainXMLOptionPtr xmlopt)
{
virDomainDiskDefPtr orig, disk;
virDomainGraphicsDefPtr newGraphics;
vmdef->nets[pos] = net;
dev->data.net = NULL;
-
- if (qemuDomainAssignAddresses(vmdef, qemuCaps, NULL) < 0)
- return -1;
break;
case VIR_DOMAIN_DEVICE_FS:
virDomainDeviceTypeToString(dev->type));
return -1;
}
+
+ if (virDomainDefPostParse(vmdef, caps, parse_flags, xmlopt) < 0)
+ return -1;
+
return 0;
}
VIR_DOMAIN_DEVICE_ACTION_ATTACH) < 0)
goto endjob;
- if ((ret = qemuDomainAttachDeviceConfig(qemuCaps, vmdef, dev,
- dom->conn)) < 0)
+ if ((ret = qemuDomainAttachDeviceConfig(vmdef, dev, dom->conn, caps,
+ parse_flags,
+ driver->xmlopt)) < 0)
goto endjob;
}
qemuDomainObjPrivatePtr priv;
virQEMUDriverConfigPtr cfg = NULL;
virCapsPtr caps = NULL;
+ unsigned int parse_flags = VIR_DOMAIN_DEF_PARSE_INACTIVE;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG |
dev = dev_copy = virDomainDeviceDefParse(xml, vm->def,
caps, driver->xmlopt,
- VIR_DOMAIN_DEF_PARSE_INACTIVE);
+ parse_flags);
if (dev == NULL)
goto endjob;
VIR_DOMAIN_DEVICE_ACTION_UPDATE) < 0)
goto endjob;
- if ((ret = qemuDomainUpdateDeviceConfig(qemuCaps, vmdef, dev)) < 0)
+ if ((ret = qemuDomainUpdateDeviceConfig(vmdef, dev, caps,
+ parse_flags,
+ driver->xmlopt)) < 0)
goto endjob;
}
VIR_DOMAIN_DEVICE_ACTION_DETACH) < 0)
goto endjob;
- if ((ret = qemuDomainDetachDeviceConfig(vmdef, dev)) < 0)
+ if ((ret = qemuDomainDetachDeviceConfig(vmdef, dev, caps,
+ parse_flags,
+ driver->xmlopt)) < 0)
goto endjob;
}