From 638afcf5c92c93995c0a1c15fea890d8f7fc619f Mon Sep 17 00:00:00 2001 From: Taowei Date: Thu, 2 Oct 2014 11:30:30 +0800 Subject: [PATCH] vbox: Rewrite vboxConnectNumOfDefinedNetworks --- src/vbox/vbox_network.c | 45 +++++++++++++++++++++++++++++++++++ src/vbox/vbox_tmpl.c | 34 -------------------------- src/vbox/vbox_uniformed_api.h | 1 + 3 files changed, 46 insertions(+), 34 deletions(-) diff --git a/src/vbox/vbox_network.c b/src/vbox/vbox_network.c index 0d09041160..a0f7e66ee8 100644 --- a/src/vbox/vbox_network.c +++ b/src/vbox/vbox_network.c @@ -197,3 +197,48 @@ int vboxConnectListNetworks(virConnectPtr conn, char **const names, int nnames) return ret; } + +int vboxConnectNumOfDefinedNetworks(virConnectPtr conn) +{ + vboxGlobalData *data = conn->privateData; + vboxArray networkInterfaces = VBOX_ARRAY_INITIALIZER; + IHost *host = NULL; + size_t i = 0; + int ret = -1; + + if (!data->vboxObj) + return ret; + + gVBoxAPI.UIVirtualBox.GetHost(data->vboxObj, &host); + if (!host) + return ret; + + gVBoxAPI.UArray.vboxArrayGet(&networkInterfaces, host, + gVBoxAPI.UArray.handleHostGetNetworkInterfaces(host)); + + ret = 0; + for (i = 0; i < networkInterfaces.count; i++) { + IHostNetworkInterface *networkInterface = networkInterfaces.items[i]; + PRUint32 status = HostNetworkInterfaceStatus_Unknown; + PRUint32 interfaceType = 0; + + if (!networkInterface) + continue; + + gVBoxAPI.UIHNInterface.GetInterfaceType(networkInterface, &interfaceType); + if (interfaceType != HostNetworkInterfaceType_HostOnly) + continue; + + gVBoxAPI.UIHNInterface.GetStatus(networkInterface, &status); + + if (status == HostNetworkInterfaceStatus_Down) + ret++; + } + + gVBoxAPI.UArray.vboxArrayRelease(&networkInterfaces); + + VBOX_RELEASE(host); + + VIR_DEBUG("numActive: %d", ret); + return ret; +} diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index c7aae25dda..fec9ce1709 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -2060,40 +2060,6 @@ _registerDomainEvent(virDriverPtr driver) * The Network Functions here on */ -static int vboxConnectNumOfDefinedNetworks(virConnectPtr conn) -{ - VBOX_OBJECT_HOST_CHECK(conn, int, 0); - vboxArray networkInterfaces = VBOX_ARRAY_INITIALIZER; - size_t i = 0; - - vboxArrayGet(&networkInterfaces, host, host->vtbl->GetNetworkInterfaces); - - for (i = 0; i < networkInterfaces.count; i++) { - IHostNetworkInterface *networkInterface = networkInterfaces.items[i]; - - if (networkInterface) { - PRUint32 interfaceType = 0; - - networkInterface->vtbl->GetInterfaceType(networkInterface, &interfaceType); - if (interfaceType == HostNetworkInterfaceType_HostOnly) { - PRUint32 status = HostNetworkInterfaceStatus_Unknown; - - networkInterface->vtbl->GetStatus(networkInterface, &status); - - if (status == HostNetworkInterfaceStatus_Down) - ret++; - } - } - } - - vboxArrayRelease(&networkInterfaces); - - VBOX_RELEASE(host); - - VIR_DEBUG("numActive: %d", ret); - return ret; -} - static int vboxConnectListDefinedNetworks(virConnectPtr conn, char **const names, int nnames) { VBOX_OBJECT_HOST_CHECK(conn, int, 0); vboxArray networkInterfaces = VBOX_ARRAY_INITIALIZER; diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h index ec8e3341a0..2ca90ffde2 100644 --- a/src/vbox/vbox_uniformed_api.h +++ b/src/vbox/vbox_uniformed_api.h @@ -550,6 +550,7 @@ virDrvOpenStatus vboxNetworkOpen(virConnectPtr conn, int vboxNetworkClose(virConnectPtr conn); int vboxConnectNumOfNetworks(virConnectPtr conn); int vboxConnectListNetworks(virConnectPtr conn, char **const names, int nnames); +int vboxConnectNumOfDefinedNetworks(virConnectPtr conn); /* Version specified functions for installing uniformed API */ void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI); -- GitLab