diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index a6a15915c378caccb6f2521dba887c7bf80fe839..ddc80a1fac6b2cfa9cc3b5de4043f9cff2502586 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -2453,67 +2453,6 @@ qemuDomainRemoveControllerDevice(virQEMUDriverPtr driver, } -static void -qemuDomainRemoveNetDevice(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virDomainNetDefPtr net) -{ - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - virNetDevVPortProfilePtr vport; - virDomainEventPtr event; - size_t i; - - VIR_DEBUG("Removing network interface %s from domain %p %s", - net->info.alias, vm, vm->def->name); - - virDomainAuditNet(vm, net, NULL, "detach", true); - - event = virDomainEventDeviceRemovedNewFromObj(vm, net->info.alias); - if (event) - qemuDomainEventQueue(driver, event); - - for (i = 0; i < vm->def->nnets; i++) { - if (vm->def->nets[i] == net) { - virDomainNetRemove(vm->def, i); - break; - } - } - - qemuDomainReleaseDeviceAddress(vm, &net->info, NULL); - virDomainConfNWFilterTeardown(net); - - if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) { - ignore_value(virNetDevMacVLanDeleteWithVPortProfile( - net->ifname, &net->mac, - virDomainNetGetActualDirectDev(net), - virDomainNetGetActualDirectMode(net), - virDomainNetGetActualVirtPortProfile(net), - cfg->stateDir)); - VIR_FREE(net->ifname); - } - - if (cfg->macFilter && (net->ifname != NULL)) { - if ((errno = networkDisallowMacOnPort(driver, - net->ifname, - &net->mac))) { - virReportSystemError(errno, - _("failed to remove ebtables rule on '%s'"), - net->ifname); - } - } - - vport = virDomainNetGetActualVirtPortProfile(net); - if (vport && vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH) - ignore_value(virNetDevOpenvswitchRemovePort( - virDomainNetGetActualBridgeName(net), - net->ifname)); - - networkReleaseActualDevice(net); - virDomainNetDefFree(net); - virObjectUnref(cfg); -} - - static void qemuDomainRemovePCIHostDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, @@ -2644,6 +2583,67 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver, } +static void +qemuDomainRemoveNetDevice(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virDomainNetDefPtr net) +{ + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + virNetDevVPortProfilePtr vport; + virDomainEventPtr event; + size_t i; + + VIR_DEBUG("Removing network interface %s from domain %p %s", + net->info.alias, vm, vm->def->name); + + virDomainAuditNet(vm, net, NULL, "detach", true); + + event = virDomainEventDeviceRemovedNewFromObj(vm, net->info.alias); + if (event) + qemuDomainEventQueue(driver, event); + + for (i = 0; i < vm->def->nnets; i++) { + if (vm->def->nets[i] == net) { + virDomainNetRemove(vm->def, i); + break; + } + } + + qemuDomainReleaseDeviceAddress(vm, &net->info, NULL); + virDomainConfNWFilterTeardown(net); + + if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) { + ignore_value(virNetDevMacVLanDeleteWithVPortProfile( + net->ifname, &net->mac, + virDomainNetGetActualDirectDev(net), + virDomainNetGetActualDirectMode(net), + virDomainNetGetActualVirtPortProfile(net), + cfg->stateDir)); + VIR_FREE(net->ifname); + } + + if (cfg->macFilter && (net->ifname != NULL)) { + if ((errno = networkDisallowMacOnPort(driver, + net->ifname, + &net->mac))) { + virReportSystemError(errno, + _("failed to remove ebtables rule on '%s'"), + net->ifname); + } + } + + vport = virDomainNetGetActualVirtPortProfile(net); + if (vport && vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH) + ignore_value(virNetDevOpenvswitchRemovePort( + virDomainNetGetActualBridgeName(net), + net->ifname)); + + networkReleaseActualDevice(net); + virDomainNetDefFree(net); + virObjectUnref(cfg); +} + + static void qemuDomainRemoveChrDevice(virQEMUDriverPtr driver, virDomainObjPtr vm,