diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 2b99d32790d775481ebbb5b9ad37cd39148e031d..3f57d22b7d37c4eb5dcf99f4b2c46a061392269c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -28926,7 +28926,6 @@ static virDomainNetNotifyActualDeviceImpl netNotify;
static virDomainNetReleaseActualDeviceImpl netRelease;
static virDomainNetBandwidthChangeAllowedImpl netBandwidthChangeAllowed;
static virDomainNetBandwidthUpdateImpl netBandwidthUpdate;
-static virDomainNetResolveActualTypeImpl netResolveActualType;
void
@@ -28934,15 +28933,13 @@ virDomainNetSetDeviceImpl(virDomainNetAllocateActualDeviceImpl allocate,
virDomainNetNotifyActualDeviceImpl notify,
virDomainNetReleaseActualDeviceImpl release,
virDomainNetBandwidthChangeAllowedImpl bandwidthChangeAllowed,
- virDomainNetBandwidthUpdateImpl bandwidthUpdate,
- virDomainNetResolveActualTypeImpl resolveActualType)
+ virDomainNetBandwidthUpdateImpl bandwidthUpdate)
{
netAllocate = allocate;
netNotify = notify;
netRelease = release;
netBandwidthChangeAllowed = bandwidthChangeAllowed;
netBandwidthUpdate = bandwidthUpdate;
- netResolveActualType = resolveActualType;
}
int
@@ -29011,16 +29008,83 @@ virDomainNetBandwidthUpdate(virDomainNetDefPtr iface,
return netBandwidthUpdate(iface, newBandwidth);
}
+/* virDomainNetResolveActualType:
+ * @iface: the original NetDef from the domain
+ *
+ * Looks up the network reference by iface, and returns the actual
+ * type of the connection without allocating any resources.
+ *
+ * Returns 0 on success, -1 on failure.
+ */
int
virDomainNetResolveActualType(virDomainNetDefPtr iface)
{
- if (!netResolveActualType) {
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
- _("Network device resolve type not available"));
+ virConnectPtr conn = NULL;
+ virNetworkPtr net = NULL;
+ char *xml = NULL;
+ virNetworkDefPtr def = NULL;
+ int ret = -1;
+
+ if (iface->type != VIR_DOMAIN_NET_TYPE_NETWORK)
+ return iface->type;
+
+ if (iface->data.network.actual)
+ return iface->data.network.actual->type;
+
+ if (!(conn = virGetConnectNetwork()))
return -1;
+
+ if (!(net = virNetworkLookupByName(conn, iface->data.network.name)))
+ goto cleanup;
+
+ if (!(xml = virNetworkGetXMLDesc(net, 0)))
+ goto cleanup;
+
+ if (!(def = virNetworkDefParseString(xml)))
+ goto cleanup;
+
+ if ((def->forward.type == VIR_NETWORK_FORWARD_NONE) ||
+ (def->forward.type == VIR_NETWORK_FORWARD_NAT) ||
+ (def->forward.type == VIR_NETWORK_FORWARD_ROUTE) ||
+ (def->forward.type == VIR_NETWORK_FORWARD_OPEN)) {
+ /* for these forward types, the actual net type really *is*
+ * NETWORK; we just keep the info from the portgroup in
+ * iface->data.network.actual
+ */
+ ret = VIR_DOMAIN_NET_TYPE_NETWORK;
+
+ } else if ((def->forward.type == VIR_NETWORK_FORWARD_BRIDGE) &&
+ def->bridge) {
+
+ /*
+ * is VIR_DOMAIN_NET_TYPE_BRIDGE
+ */
+
+ ret = VIR_DOMAIN_NET_TYPE_BRIDGE;
+
+ } else if (def->forward.type == VIR_NETWORK_FORWARD_HOSTDEV) {
+
+ ret = VIR_DOMAIN_NET_TYPE_HOSTDEV;
+
+ } else if ((def->forward.type == VIR_NETWORK_FORWARD_BRIDGE) ||
+ (def->forward.type == VIR_NETWORK_FORWARD_PRIVATE) ||
+ (def->forward.type == VIR_NETWORK_FORWARD_VEPA) ||
+ (def->forward.type == VIR_NETWORK_FORWARD_PASSTHROUGH)) {
+
+ /* are all
+ * VIR_DOMAIN_NET_TYPE_DIRECT.
+ */
+
+ ret = VIR_DOMAIN_NET_TYPE_DIRECT;
+
}
- return netResolveActualType(iface);
+ cleanup:
+ virNetworkDefFree(def);
+ VIR_FREE(xml);
+ virObjectUnref(conn);
+ virObjectUnref(net);
+ return ret;
}
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index e6212818aa620666e9439f0bd16be1d1ec5c6ccb..eda69a3c11db3eaa186b07bb6617205e17fd02ad 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3474,17 +3474,13 @@ typedef int
(*virDomainNetBandwidthUpdateImpl)(virDomainNetDefPtr iface,
virNetDevBandwidthPtr newBandwidth);
-typedef int
-(*virDomainNetResolveActualTypeImpl)(virDomainNetDefPtr iface);
-
void
virDomainNetSetDeviceImpl(virDomainNetAllocateActualDeviceImpl allocate,
virDomainNetNotifyActualDeviceImpl notify,
virDomainNetReleaseActualDeviceImpl release,
virDomainNetBandwidthChangeAllowedImpl bandwidthChangeAllowed,
- virDomainNetBandwidthUpdateImpl bandwidthUpdate,
- virDomainNetResolveActualTypeImpl resolveActualType);
+ virDomainNetBandwidthUpdateImpl bandwidthUpdate);
int
virDomainNetAllocateActualDevice(virDomainDefPtr dom,
@@ -3511,11 +3507,6 @@ virDomainNetBandwidthUpdate(virDomainNetDefPtr iface,
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);
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index dd6e3402eaab6a9509dff7c527e549372c0be0ee..898c9461013dc1c65fc0ff40ba45ecbb76eeea3d 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -5146,79 +5146,6 @@ networkReleaseActualDevice(virDomainDefPtr dom,
}
-
-/* networkResolveActualType:
- * @iface: the original NetDef from the domain
- *
- * Looks up the network reference by iface, and returns the actual
- * type of the connection without allocating any resources.
- *
- * Returns 0 on success, -1 on failure.
- */
-static int
-networkResolveActualType(virDomainNetDefPtr iface)
-{
- virNetworkDriverStatePtr driver = networkGetDriver();
- virNetworkObjPtr obj = NULL;
- virNetworkDefPtr netdef = NULL;
- int ret = -1;
-
- if (!driver || iface->type != VIR_DOMAIN_NET_TYPE_NETWORK)
- return iface->type;
-
- if (iface->data.network.actual)
- return iface->data.network.actual->type;
-
- obj = virNetworkObjFindByName(driver->networks, iface->data.network.name);
- if (!obj) {
- virReportError(VIR_ERR_NO_NETWORK,
- _("no network with matching name '%s'"),
- iface->data.network.name);
- return -1;
- }
- netdef = virNetworkObjGetDef(obj);
-
- if ((netdef->forward.type == VIR_NETWORK_FORWARD_NONE) ||
- (netdef->forward.type == VIR_NETWORK_FORWARD_NAT) ||
- (netdef->forward.type == VIR_NETWORK_FORWARD_ROUTE) ||
- (netdef->forward.type == VIR_NETWORK_FORWARD_OPEN)) {
- /* for these forward types, the actual net type really *is*
- * NETWORK; we just keep the info from the portgroup in
- * iface->data.network.actual
- */
- ret = VIR_DOMAIN_NET_TYPE_NETWORK;
-
- } else if ((netdef->forward.type == VIR_NETWORK_FORWARD_BRIDGE) &&
- netdef->bridge) {
-
- /*
- * is VIR_DOMAIN_NET_TYPE_BRIDGE
- */
-
- ret = VIR_DOMAIN_NET_TYPE_BRIDGE;
-
- } else if (netdef->forward.type == VIR_NETWORK_FORWARD_HOSTDEV) {
-
- ret = VIR_DOMAIN_NET_TYPE_HOSTDEV;
-
- } else if ((netdef->forward.type == VIR_NETWORK_FORWARD_BRIDGE) ||
- (netdef->forward.type == VIR_NETWORK_FORWARD_PRIVATE) ||
- (netdef->forward.type == VIR_NETWORK_FORWARD_VEPA) ||
- (netdef->forward.type == VIR_NETWORK_FORWARD_PASSTHROUGH)) {
-
- /* are all
- * VIR_DOMAIN_NET_TYPE_DIRECT.
- */
-
- ret = VIR_DOMAIN_NET_TYPE_DIRECT;
-
- }
-
- virNetworkObjEndAPI(&obj);
- return ret;
-}
-
-
/**
* networkCheckBandwidth:
* @net: network QoS
@@ -5717,8 +5644,7 @@ networkRegister(void)
networkNotifyActualDevice,
networkReleaseActualDevice,
networkBandwidthChangeAllowed,
- networkBandwidthUpdate,
- networkResolveActualType);
+ networkBandwidthUpdate);
return 0;
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 4ff3fa742aa014bcc65c6093efa5e7f362b967ac..d9b3a99477f6b707d85d9493bebf79676885e0ae 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -280,7 +280,7 @@ test_libraries += virmocklibxl.la
endif WITH_LIBXL
if WITH_QEMU
-test_programs += qemuxml2xmltest \
+test_programs += qemuxml2argvtest qemuxml2xmltest \
qemuargv2xmltest qemuhelptest domainsnapshotxml2xmltest \
qemumonitortest qemumonitorjsontest qemuhotplugtest \
qemuagenttest qemucapabilitiestest qemucaps2xmltest \
@@ -288,11 +288,6 @@ test_programs += qemuxml2xmltest \
qemucommandutiltest \
qemublocktest \
$(NULL)
-if WITH_NETWORK
-# Dep on the network driver callback for resolving NIC
-# actual type. XXX remove this dep.
-test_programs += qemuxml2argvtest
-endif WITH_NETWORK
test_helpers += qemucapsprobe
test_libraries += libqemumonitortestutils.la \
libqemutestdriver.la \