* PCI address (if specified)
*
* Return: index of match if unique match found
- * -1 if not found
- * -2 if multiple matches
+ * -1 otherwise and an error is logged
*/
int
virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
{
size_t i;
int matchidx = -1;
+ char mac[VIR_MAC_STRING_BUFLEN];
bool PCIAddrSpecified = virDomainDeviceAddressIsValid(&net->info,
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI);
* specify only vendor and product ID, and there may be
* multiples of those.
*/
- matchidx = -2; /* indicates "multiple matches" to caller */
- break;
+ virReportError(VIR_ERR_OPERATION_FAILED,
+ _("multiple devices matching mac address %s found"),
+ virMacAddrFormat(&net->mac, mac));
+ return -1;
}
if (PCIAddrSpecified) {
if (virDevicePCIAddressEqual(&def->nets[i]->info.addr.pci,
matchidx = i;
}
}
+ if (matchidx < 0) {
+ virReportError(VIR_ERR_OPERATION_FAILED,
+ _("no device matching mac address %s found"),
+ virMacAddrFormat(&net->mac, mac));
+ }
return matchidx;
}
int ret = -1;
virDomainNetDefPtr net;
int idx;
- char mac[VIR_MAC_STRING_BUFLEN];
switch (dev->type) {
case VIR_DOMAIN_DEVICE_NET:
net = dev->data.net;
- idx = virDomainNetFindIdx(vmdef, net);
- if (idx == -2) {
- virReportError(VIR_ERR_OPERATION_FAILED,
- _("multiple devices matching mac address %s found"),
- virMacAddrFormat(&net->mac, mac));
- goto cleanup;
- } else if (idx < 0) {
- virReportError(VIR_ERR_OPERATION_FAILED, "%s",
- _("no matching network device was found"));
+ if ((idx = virDomainNetFindIdx(vmdef, net)) < 0)
goto cleanup;
- }
virDomainNetDefFree(vmdef->nets[idx]);
virDomainNetDefPtr net;
virDomainHostdevDefPtr hostdev, det_hostdev;
int idx;
- char mac[VIR_MAC_STRING_BUFLEN];
switch (dev->type) {
case VIR_DOMAIN_DEVICE_DISK:
case VIR_DOMAIN_DEVICE_NET:
net = dev->data.net;
- idx = virDomainNetFindIdx(vmdef, net);
- if (idx == -2) {
- virReportError(VIR_ERR_OPERATION_FAILED,
- _("multiple devices matching mac address %s found"),
- virMacAddrFormat(&net->mac, mac));
- goto cleanup;
- } else if (idx < 0) {
- virReportError(VIR_ERR_OPERATION_FAILED, "%s",
- _("no matching network device was found"));
+ if ((idx = virDomainNetFindIdx(vmdef, net)) < 0)
goto cleanup;
- }
+
/* this is guaranteed to succeed */
virDomainNetDefFree(virDomainNetRemove(vmdef, idx));
ret = 0;
{
int detachidx, ret = -1;
virDomainNetDefPtr detach = NULL;
- char mac[VIR_MAC_STRING_BUFLEN];
virNetDevVPortProfilePtr vport = NULL;
- detachidx = virDomainNetFindIdx(vm->def, dev->data.net);
- if (detachidx == -2) {
- virReportError(VIR_ERR_OPERATION_FAILED,
- _("multiple devices matching mac address %s found"),
- virMacAddrFormat(&dev->data.net->mac, mac));
- goto cleanup;
- } else if (detachidx < 0) {
- virReportError(VIR_ERR_OPERATION_FAILED,
- _("network device %s not found"),
- virMacAddrFormat(&dev->data.net->mac, mac));
+ if ((detachidx = virDomainNetFindIdx(vm->def, dev->data.net)) < 0)
goto cleanup;
- }
+
detach = vm->def->nets[detachidx];
switch (virDomainNetGetActualType(detach)) {
virDomainChrDefPtr chr;
virDomainFSDefPtr fs;
int idx;
- char mac[VIR_MAC_STRING_BUFLEN];
switch (dev->type) {
case VIR_DOMAIN_DEVICE_DISK:
case VIR_DOMAIN_DEVICE_NET:
net = dev->data.net;
- idx = virDomainNetFindIdx(vmdef, net);
- if (idx == -2) {
- virReportError(VIR_ERR_OPERATION_FAILED,
- _("multiple devices matching mac address %s found"),
- virMacAddrFormat(&net->mac, mac));
+ if ((idx = virDomainNetFindIdx(vmdef, net)) < 0)
return -1;
- } else if (idx < 0) {
- virReportError(VIR_ERR_OPERATION_FAILED, "%s",
- _("no matching network device was found"));
- return -1;
- }
+
/* this is guaranteed to succeed */
virDomainNetDefFree(virDomainNetRemove(vmdef, idx));
break;
virDomainDiskDefPtr orig, disk;
virDomainNetDefPtr net;
int pos;
- char mac[VIR_MAC_STRING_BUFLEN];
switch (dev->type) {
case VIR_DOMAIN_DEVICE_NET:
net = dev->data.net;
- pos = virDomainNetFindIdx(vmdef, net);
- if (pos == -2) {
- virMacAddrFormat(&net->mac, mac);
- virReportError(VIR_ERR_OPERATION_FAILED,
- _("couldn't find matching device "
- "with mac address %s"), mac);
- return -1;
- } else if (pos < 0) {
- virMacAddrFormat(&net->mac, mac);
- virReportError(VIR_ERR_OPERATION_FAILED,
- _("couldn't find matching device "
- "with mac address %s"), mac);
+ if ((pos = virDomainNetFindIdx(vmdef, net)) < 0)
return -1;
- }
virDomainNetDefFree(vmdef->nets[pos]);
qemuDomainObjPrivatePtr priv = vm->privateData;
int vlan;
char *hostnet_name = NULL;
- char mac[VIR_MAC_STRING_BUFLEN];
- detachidx = virDomainNetFindIdx(vm->def, dev->data.net);
- if (detachidx == -2) {
- virReportError(VIR_ERR_OPERATION_FAILED,
- _("multiple devices matching mac address %s found"),
- virMacAddrFormat(&dev->data.net->mac, mac));
- goto cleanup;
- }
- else if (detachidx < 0) {
- virReportError(VIR_ERR_OPERATION_FAILED,
- _("network device %s not found"),
- virMacAddrFormat(&dev->data.net->mac, mac));
+ if ((detachidx = virDomainNetFindIdx(vm->def, dev->data.net)) < 0)
goto cleanup;
- }
+
detach = vm->def->nets[detachidx];
if (virDomainNetGetActualType(detach) == VIR_DOMAIN_NET_TYPE_HOSTDEV) {