static virDomainNetReleaseActualDeviceImpl netRelease;
static virDomainNetBandwidthChangeAllowedImpl netBandwidthChangeAllowed;
static virDomainNetBandwidthUpdateImpl netBandwidthUpdate;
+static virDomainNetResolveActualTypeImpl netResolveActualType;
void
virDomainNetNotifyActualDeviceImpl notify,
virDomainNetReleaseActualDeviceImpl release,
virDomainNetBandwidthChangeAllowedImpl bandwidthChangeAllowed,
- virDomainNetBandwidthUpdateImpl bandwidthUpdate)
+ virDomainNetBandwidthUpdateImpl bandwidthUpdate,
+ virDomainNetResolveActualTypeImpl resolveActualType)
{
netAllocate = allocate;
netNotify = notify;
netRelease = release;
netBandwidthChangeAllowed = bandwidthChangeAllowed;
netBandwidthUpdate = bandwidthUpdate;
+ netResolveActualType = resolveActualType;
}
int
return netBandwidthUpdate(iface, newBandwidth);
}
+
+int
+virDomainNetResolveActualType(virDomainNetDefPtr iface)
+{
+ if (!netResolveActualType) {
+ virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ _("Network device resolve type not available"));
+ return -1;
+ }
+
+ return netResolveActualType(iface);
+}
(*virDomainNetBandwidthUpdateImpl)(virDomainNetDefPtr iface,
virNetDevBandwidthPtr newBandwidth);
+typedef int
+(*virDomainNetResolveActualTypeImpl)(virDomainNetDefPtr iface);
+
void
virDomainNetSetDeviceImpl(virDomainNetAllocateActualDeviceImpl allocate,
virDomainNetNotifyActualDeviceImpl notify,
virDomainNetReleaseActualDeviceImpl release,
virDomainNetBandwidthChangeAllowedImpl bandwidthChangeAllowed,
- virDomainNetBandwidthUpdateImpl bandwidthUpdate);
+ virDomainNetBandwidthUpdateImpl bandwidthUpdate,
+ virDomainNetResolveActualTypeImpl resolveActualType);
int
virDomainNetAllocateActualDevice(virDomainDefPtr dom,
virNetDevBandwidthPtr newBandwidth)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+/* XXX this is a nasty hack and should be removed. It should
+ * be by via public API by fetching XML and parsing it. Not
+ * easy right now as code paths in QEMU reying on this don't
+ * have a virConnectPtr handy.
+ */
+int
+virDomainNetResolveActualType(virDomainNetDefPtr iface)
+ ATTRIBUTE_NONNULL(1);
+
#endif /* __DOMAIN_CONF_H */
virDomainNetReleaseActualDevice;
virDomainNetRemove;
virDomainNetRemoveHostdev;
+virDomainNetResolveActualType;
virDomainNetSetDeviceImpl;
virDomainNetTypeFromString;
virDomainNetTypeSharesHostView;
-/* networkGetActualType:
- * @dom: domain definition that @iface belongs to
+/* networkResolveActualType:
* @iface: the original NetDef from the domain
*
* Looks up the network reference by iface, and returns the actual
*
* Returns 0 on success, -1 on failure.
*/
-int
-networkGetActualType(virDomainNetDefPtr iface)
+static int
+networkResolveActualType(virDomainNetDefPtr iface)
{
virNetworkDriverStatePtr driver = networkGetDriver();
virNetworkObjPtr obj = NULL;
networkNotifyActualDevice,
networkReleaseActualDevice,
networkBandwidthChangeAllowed,
- networkBandwidthUpdate);
+ networkBandwidthUpdate,
+ networkResolveActualType);
return 0;
}
# if WITH_NETWORK
-int
-networkGetActualType(virDomainNetDefPtr iface)
- ATTRIBUTE_NONNULL(1);
-
int
networkDnsmasqConfContents(virNetworkObjPtr obj,
const char *pidfile,
# else
/* Define no-op replacements that don't drag in any link dependencies. */
-# define networkGetActualType(iface) (iface->type)
# define networkDnsmasqConfContents(network, pidfile, configstr, \
dctx, caps) 0
#include "viralloc.h"
#include "virlog.h"
#include "virstring.h"
-#include "network/bridge_driver.h"
#define QEMU_DRIVE_HOST_PREFIX "drive-"
* We must use "-1" as the index because the caller doesn't know
* that we're now looking for a unique hostdevN rather than netN
*/
- if (networkGetActualType(net) == VIR_DOMAIN_NET_TYPE_HOSTDEV)
+ if (virDomainNetResolveActualType(net) == VIR_DOMAIN_NET_TYPE_HOSTDEV)
return qemuAssignDeviceHostdevAlias(def, &net->info.alias, -1);
if (idx == -1) {
#include "qemu_domain_address.h"
#include "qemu_domain.h"
-#include "network/bridge_driver.h"
#include "viralloc.h"
#include "virerror.h"
#include "virlog.h"
* to is of type hostdev. All other kinds of network interfaces don't
* require us to isolate the guest device, so we can skip them */
if (iface->type != VIR_DOMAIN_NET_TYPE_NETWORK ||
- networkGetActualType(iface) != VIR_DOMAIN_NET_TYPE_HOSTDEV) {
+ virDomainNetResolveActualType(iface) != VIR_DOMAIN_NET_TYPE_HOSTDEV) {
goto skip;
}
endif WITH_LIBXL
if WITH_QEMU
-test_programs += qemuxml2argvtest qemuxml2xmltest \
+test_programs += qemuxml2xmltest \
qemuargv2xmltest qemuhelptest domainsnapshotxml2xmltest \
qemumonitortest qemumonitorjsontest qemuhotplugtest \
qemuagenttest qemucapabilitiestest qemucaps2xmltest \
qemucommandutiltest \
qemublocktest \
$(NULL)
+if WITH_NETWORK
+# Dep on the network driver callback for resolving NIC
+# actual type. XXX remove this dep.
+test_programs += qemuxml2xmltest
+endif WITH_NETWORK
test_helpers += qemucapsprobe
test_libraries += libqemumonitortestutils.la \
libqemutestdriver.la \
qemuxml2argvtest_SOURCES = \
qemuxml2argvtest.c testutilsqemu.c testutilsqemu.h \
testutils.c testutils.h
-qemuxml2argvtest_LDADD = libqemutestdriver.la $(LDADDS) $(LIBXML_LIBS)
+qemuxml2argvtest_LDADD = libqemutestdriver.la \
+ ../src/libvirt_driver_network_impl.la \
+ $(LDADDS) $(LIBXML_LIBS)
qemuxml2argvmock_la_SOURCES = \
qemuxml2argvmock.c
# include "cpu/cpu_map.h"
# include "virstring.h"
# include "storage/storage_driver.h"
+# include "network/bridge_driver.h"
# include "virmock.h"
# define __QEMU_CAPSPRIV_H_ALLOW__
if (qemuTestDriverInit(&driver) < 0)
return EXIT_FAILURE;
+ if (networkRegister() < 0)
+ return EXIT_FAILURE;
+
driver.privileged = true;
VIR_FREE(driver.config->defaultTLSx509certdir);