return 0;
}
+
+/**
+ * virDomainInterfaceVportRemove:
+ * @net: a net definition in the VM
+ *
+ * Removes vport profile from corresponding bridge.
+ * NOP if no vport profile is present in @net.
+ */
+void
+virDomainInterfaceVportRemove(virDomainNetDef *net)
+{
+ const virNetDevVPortProfile *vport = virDomainNetGetActualVirtPortProfile(net);
+ const char *brname;
+
+ if (!vport)
+ return;
+
+ if (vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_MIDONET) {
+ ignore_value(virNetDevMidonetUnbindPort(vport));
+ } else if (vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH) {
+ brname = virDomainNetGetActualBridgeName(net);
+ ignore_value(virNetDevOpenvswitchRemovePort(brname, net->ifname));
+ }
+}
+
+
/**
* virDomainInterfaceDeleteDevice:
* @def: domain definition
bool priv_net_created,
char *stateDir)
{
- const virNetDevVPortProfile *vport = NULL;
g_autoptr(virConnect) conn = NULL;
- vport = virDomainNetGetActualVirtPortProfile(net);
switch (virDomainNetGetActualType(net)) {
case VIR_DOMAIN_NET_TYPE_DIRECT:
if (priv_net_created) {
/* release the physical device (or any other resources used by
* this interface in the network driver
*/
- if (vport) {
- if (vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_MIDONET) {
- ignore_value(virNetDevMidonetUnbindPort(vport));
- } else if (vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH) {
- ignore_value(virNetDevOpenvswitchRemovePort(
- virDomainNetGetActualBridgeName(net),
- net->ifname));
- }
- }
+ virDomainInterfaceVportRemove(net);
/* kick the device out of the hostdev list too */
virDomainNetRemoveHostdev(def, net);
int virDomainInterfaceStartDevices(virDomainDef *def);
int virDomainInterfaceStopDevice(virDomainNetDef *net);
int virDomainInterfaceStopDevices(virDomainDef *def);
+void virDomainInterfaceVportRemove(virDomainNetDef *net);
void virDomainInterfaceDeleteDevice(virDomainDef *def,
virDomainNetDef *net,
bool priv_net_created,
virDomainInterfaceStartDevices;
virDomainInterfaceStopDevice;
virDomainInterfaceStopDevices;
+virDomainInterfaceVportRemove;
# hypervisor/virclosecallbacks.h
#include "virhostdev.h"
#include "netdev_bandwidth_conf.h"
#include "virutil.h"
+#include "domain_interface.h"
#define VIR_FROM_THIS VIR_FROM_LXC
int detachidx, ret = -1;
virDomainNetType actualType;
virDomainNetDef *detach = NULL;
- const virNetDevVPortProfile *vport = NULL;
virErrorPtr save_err = NULL;
if ((detachidx = virDomainNetFindIdx(vm->def, dev->data.net)) < 0)
virDomainConfNWFilterTeardown(detach);
- vport = virDomainNetGetActualVirtPortProfile(detach);
- if (vport && vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH)
- ignore_value(virNetDevOpenvswitchRemovePort(
- virDomainNetGetActualBridgeName(detach),
- detach->ifname));
+ virDomainInterfaceVportRemove(detach);
+
ret = 0;
cleanup:
if (!ret) {
#include "virprocess.h"
#include "netdev_bandwidth_conf.h"
#include "virutil.h"
+#include "domain_interface.h"
#define VIR_FROM_THIS VIR_FROM_LXC
{
size_t i;
virLXCDomainObjPrivate *priv = vm->privateData;
- const virNetDevVPortProfile *vport = NULL;
g_autoptr(virLXCDriverConfig) cfg = virLXCDriverGetConfig(driver);
g_autoptr(virConnect) conn = NULL;
for (i = 0; i < vm->def->nnets; i++) {
virDomainNetDef *iface = vm->def->nets[i];
- vport = virDomainNetGetActualVirtPortProfile(iface);
+
if (iface->ifname) {
- if (vport &&
- vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH)
- ignore_value(virNetDevOpenvswitchRemovePort(
- virDomainNetGetActualBridgeName(iface),
- iface->ifname));
+ virDomainInterfaceVportRemove(iface);
ignore_value(virNetDevVethDelete(iface->ifname));
}
if (iface->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
virErrorPreserveLast(&save_err);
for (i = 0; i < def->nnets; i++) {
virDomainNetDef *iface = def->nets[i];
- const virNetDevVPortProfile *vport = virDomainNetGetActualVirtPortProfile(iface);
- if (vport && vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH)
- ignore_value(virNetDevOpenvswitchRemovePort(
- virDomainNetGetActualBridgeName(iface),
- iface->ifname));
+
+ virDomainInterfaceVportRemove(iface);
+
if (iface->type == VIR_DOMAIN_NET_TYPE_NETWORK && netconn)
virDomainNetReleaseActualDevice(netconn, iface);
}
}
-static void
-qemuDomainNetDeviceVportRemove(virDomainNetDef *net)
-{
- const virNetDevVPortProfile *vport = virDomainNetGetActualVirtPortProfile(net);
- const char *brname;
-
- if (!vport)
- return;
-
- if (vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_MIDONET) {
- ignore_value(virNetDevMidonetUnbindPort(vport));
- } else if (vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH) {
- brname = virDomainNetGetActualBridgeName(net);
- ignore_value(virNetDevOpenvswitchRemovePort(brname, net->ifname));
- }
-}
-
-
static int
qemuDomainAttachNetDevice(virQEMUDriver *driver,
virDomainObj *vm,
cfg->stateDir);
}
- qemuDomainNetDeviceVportRemove(net);
+ virDomainInterfaceVportRemove(net);
}
if (teardownlabel &&
VIR_WARN("Unable to restore security label on vhostuser char device");
}
- qemuDomainNetDeviceVportRemove(net);
+ virDomainInterfaceVportRemove(net);
if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
g_autoptr(virConnect) conn = virGetConnectNetwork();