}
return false;
}
+
+static virDomainNetAllocateActualDeviceImpl netAllocate;
+static virDomainNetNotifyActualDeviceImpl netNotify;
+static virDomainNetReleaseActualDeviceImpl netRelease;
+
+void
+virDomainNetSetDeviceImpl(virDomainNetAllocateActualDeviceImpl allocate,
+ virDomainNetNotifyActualDeviceImpl notify,
+ virDomainNetReleaseActualDeviceImpl release)
+{
+ netAllocate = allocate;
+ netNotify = notify;
+ netRelease = release;
+}
+
+int
+virDomainNetAllocateActualDevice(virDomainDefPtr dom,
+ virDomainNetDefPtr iface)
+{
+ if (!netAllocate) {
+ virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ _("Network device allocation not available"));
+ return -1;
+ }
+
+ return netAllocate(dom, iface);
+}
+
+void
+virDomainNetNotifyActualDevice(virDomainDefPtr dom,
+ virDomainNetDefPtr iface)
+{
+ if (!netNotify) {
+ virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ _("Network device notification not available"));
+ return;
+ }
+
+ netNotify(dom, iface);
+}
+
+
+int
+virDomainNetReleaseActualDevice(virDomainDefPtr dom,
+ virDomainNetDefPtr iface)
+{
+ if (!netRelease) {
+ virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ _("Network device release not available"));
+ return -1;
+ }
+
+ return netRelease(dom, iface);
+}
virDomainDefLifecycleActionAllowed(virDomainLifecycle type,
virDomainLifecycleAction action);
+typedef int
+(*virDomainNetAllocateActualDeviceImpl)(virDomainDefPtr dom,
+ virDomainNetDefPtr iface);
+
+typedef void
+(*virDomainNetNotifyActualDeviceImpl)(virDomainDefPtr dom,
+ virDomainNetDefPtr iface);
+
+typedef int
+(*virDomainNetReleaseActualDeviceImpl)(virDomainDefPtr dom,
+ virDomainNetDefPtr iface);
+
+void
+virDomainNetSetDeviceImpl(virDomainNetAllocateActualDeviceImpl allocate,
+ virDomainNetNotifyActualDeviceImpl notify,
+ virDomainNetReleaseActualDeviceImpl release);
+
+int
+virDomainNetAllocateActualDevice(virDomainDefPtr dom,
+ virDomainNetDefPtr iface)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+
+void
+virDomainNetNotifyActualDevice(virDomainDefPtr dom,
+ virDomainNetDefPtr iface)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+
+int
+virDomainNetReleaseActualDevice(virDomainDefPtr dom,
+ virDomainNetDefPtr iface)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+
+
+
#endif /* __DOMAIN_CONF_H */
virDomainMemoryRemove;
virDomainMemorySourceTypeFromString;
virDomainMemorySourceTypeToString;
+virDomainNetAllocateActualDevice;
virDomainNetAppendIPAddress;
virDomainNetDefClear;
virDomainNetDefFormat;
virDomainNetGetActualVirtPortProfile;
virDomainNetGetActualVlan;
virDomainNetInsert;
+virDomainNetNotifyActualDevice;
+virDomainNetReleaseActualDevice;
virDomainNetRemove;
virDomainNetRemoveHostdev;
+virDomainNetSetDeviceImpl;
virDomainNetTypeFromString;
virDomainNetTypeSharesHostView;
virDomainNetTypeToString;
#include "virtime.h"
#include "locking/domain_lock.h"
#include "xen_common.h"
-#include "network/bridge_driver.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
/* cleanup actual device */
virDomainNetRemoveHostdev(vm->def, net);
- networkReleaseActualDevice(vm->def, net);
+ virDomainNetReleaseActualDevice(vm->def, net);
}
}
* network's pool of devices, or resolve bridge device name
* to the one defined in the network definition.
*/
- if (networkAllocateActualDevice(def, net) < 0)
+ if (virDomainNetAllocateActualDevice(def, net) < 0)
return -1;
actualType = virDomainNetGetActualType(net);
#include "viraccessapicheck.h"
#include "viratomic.h"
#include "virhostdev.h"
-#include "network/bridge_driver.h"
#include "locking/domain_lock.h"
#include "virnetdevtap.h"
#include "cpu/cpu.h"
* network's pool of devices, or resolve bridge device name
* to the one defined in the network definition.
*/
- if (networkAllocateActualDevice(vm->def, net) < 0)
+ if (virDomainNetAllocateActualDevice(vm->def, net) < 0)
goto cleanup;
actualType = virDomainNetGetActualType(net);
vm->def->nets[vm->def->nnets++] = net;
} else {
virDomainNetRemoveHostdev(vm->def, net);
- networkReleaseActualDevice(vm->def, net);
+ virDomainNetReleaseActualDevice(vm->def, net);
}
virObjectUnref(cfg);
return ret;
cleanup:
libxl_device_nic_dispose(&nic);
if (!ret) {
- networkReleaseActualDevice(vm->def, detach);
+ virDomainNetReleaseActualDevice(vm->def, detach);
virDomainNetRemove(vm->def, detachidx);
}
virObjectUnref(cfg);
#include "domain_audit.h"
#include "domain_nwfilter.h"
#include "nwfilter_conf.h"
-#include "network/bridge_driver.h"
#include "virinitctl.h"
#include "virnetdev.h"
#include "virnetdevtap.h"
* network's pool of devices, or resolve bridge device name
* to the one defined in the network definition.
*/
- if (networkAllocateActualDevice(vm->def, net) < 0)
+ if (virDomainNetAllocateActualDevice(vm->def, net) < 0)
return -1;
actualType = virDomainNetGetActualType(net);
ret = 0;
cleanup:
if (!ret) {
- networkReleaseActualDevice(vm->def, detach);
+ virDomainNetReleaseActualDevice(vm->def, detach);
virDomainNetRemove(vm->def, detachidx);
virDomainNetDefFree(detach);
}
#include "virnetdevopenvswitch.h"
#include "virtime.h"
#include "domain_nwfilter.h"
-#include "network/bridge_driver.h"
#include "viralloc.h"
#include "domain_audit.h"
#include "virerror.h"
iface->ifname));
ignore_value(virNetDevVethDelete(iface->ifname));
}
- networkReleaseActualDevice(vm->def, iface);
+ virDomainNetReleaseActualDevice(vm->def, iface);
}
virDomainConfVMNWFilterTeardown(vm);
if (virLXCProcessValidateInterface(net) < 0)
return -1;
- if (networkAllocateActualDevice(def, net) < 0)
+ if (virDomainNetAllocateActualDevice(def, net) < 0)
goto cleanup;
if (VIR_EXPAND_N(*veths, *nveths, 1) < 0)
ignore_value(virNetDevOpenvswitchRemovePort(
virDomainNetGetActualBridgeName(iface),
iface->ifname));
- networkReleaseActualDevice(def, iface);
+ virDomainNetReleaseActualDevice(def, iface);
}
}
return ret;
*
* Returns 0 on success, -1 on failure.
*/
-int
+static int
networkAllocateActualDevice(virDomainDefPtr dom,
virDomainNetDefPtr iface)
{
*
* No return value (but does log any failures)
*/
-void
+static void
networkNotifyActualDevice(virDomainDefPtr dom,
virDomainNetDefPtr iface)
{
*
* Returns 0 on success, -1 on failure.
*/
-int
+static int
networkReleaseActualDevice(virDomainDefPtr dom,
virDomainNetDefPtr iface)
{
return -1;
if (virRegisterStateDriver(&networkStateDriver) < 0)
return -1;
+
+ virDomainNetSetDeviceImpl(
+ networkAllocateActualDevice,
+ networkNotifyActualDevice,
+ networkReleaseActualDevice);
+
return 0;
}
networkRegister(void);
# if WITH_NETWORK
-int
-networkAllocateActualDevice(virDomainDefPtr dom,
- virDomainNetDefPtr iface)
- ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
-
-void
-networkNotifyActualDevice(virDomainDefPtr dom,
- virDomainNetDefPtr iface)
- ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
-
-int
-networkReleaseActualDevice(virDomainDefPtr dom,
- virDomainNetDefPtr iface)
- ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
int
networkGetNetworkAddress(const char *netname,
# else
/* Define no-op replacements that don't drag in any link dependencies. */
-# define networkAllocateActualDevice(dom, iface) 0
# define networkGetActualType(iface) (iface->type)
# define networkGetNetworkAddress(netname, netaddr) (-2)
# define networkDnsmasqConfContents(network, pidfile, configstr, \
dctx, caps) 0
-static inline void
-networkNotifyActualDevice(virDomainDefPtr dom ATTRIBUTE_UNUSED,
- virDomainNetDefPtr iface ATTRIBUTE_UNUSED)
-{
-}
-
-static inline int
-networkReleaseActualDevice(virDomainDefPtr dom ATTRIBUTE_UNUSED,
- virDomainNetDefPtr iface ATTRIBUTE_UNUSED)
-{
- return 0;
-}
-
static inline bool
networkBandwidthChangeAllowed(virDomainNetDefPtr iface ATTRIBUTE_UNUSED,
virNetDevBandwidthPtr newBandwidth ATTRIBUTE_UNUSED)
#include "virprocess.h"
#include "qemu_cgroup.h"
#include "locking/domain_lock.h"
-#include "network/bridge_driver.h"
#include "virnetdev.h"
#include "virnetdevbridge.h"
#include "virnetdevtap.h"
* network's pool of devices, or resolve bridge device name
* to the one defined in the network definition.
*/
- if (networkAllocateActualDevice(vm->def, net) < 0)
+ if (virDomainNetAllocateActualDevice(vm->def, net) < 0)
goto cleanup;
actualType = virDomainNetGetActualType(net);
virDomainNetRemoveHostdev(vm->def, net);
- networkReleaseActualDevice(vm->def, net);
+ virDomainNetReleaseActualDevice(vm->def, net);
}
VIR_FREE(nicstr);
* free it if we fail for any reason
*/
if (newdev->type == VIR_DOMAIN_NET_TYPE_NETWORK &&
- networkAllocateActualDevice(vm->def, newdev) < 0) {
+ virDomainNetAllocateActualDevice(vm->def, newdev) < 0) {
goto cleanup;
}
/* this function doesn't work with HOSTDEV networks yet, thus
* no need to change the pointer in the hostdev structure */
- networkReleaseActualDevice(vm->def, olddev);
+ virDomainNetReleaseActualDevice(vm->def, olddev);
virDomainNetDefFree(olddev);
/* move newdev into the nets list, and NULL it out from the
* virDomainDeviceDef that we were given so that the caller
* replace the entire device object.
*/
if (newdev)
- networkReleaseActualDevice(vm->def, newdev);
+ virDomainNetReleaseActualDevice(vm->def, newdev);
return ret;
}
virDomainHostdevDefFree(hostdev);
if (net) {
- networkReleaseActualDevice(vm->def, net);
+ virDomainNetReleaseActualDevice(vm->def, net);
virDomainNetDefFree(net);
}
qemuDomainNetDeviceVportRemove(net);
- networkReleaseActualDevice(vm->def, net);
+ virDomainNetReleaseActualDevice(vm->def, net);
virDomainNetDefFree(net);
ret = 0;
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT)
ignore_value(virNetDevMacVLanReserveName(net->ifname, false));
- networkNotifyActualDevice(def, net);
+ virDomainNetNotifyActualDevice(def, net);
}
}
* network's pool of devices, or resolve bridge device name
* to the one defined in the network definition.
*/
- if (networkAllocateActualDevice(def, net) < 0)
+ if (virDomainNetAllocateActualDevice(def, net) < 0)
goto cleanup;
actualType = virDomainNetGetActualType(net);
/* kick the device out of the hostdev list too */
virDomainNetRemoveHostdev(def, net);
- networkReleaseActualDevice(vm->def, net);
+ virDomainNetReleaseActualDevice(vm->def, net);
}
retry: