---
src/vbox/vbox_network.c | 65 +++++++++++++++++++++++++++++++++++++++++
src/vbox/vbox_tmpl.c | 57 +++++++++---------------------------
src/vbox/vbox_uniformed_api.h | 8 +++++
3 files changed, 86 insertions(+), 44 deletions(-)
diff --git a/src/vbox/vbox_network.c b/src/vbox/vbox_network.c
index 6d2ecdc..0405265 100644
--- a/src/vbox/vbox_network.c
+++ b/src/vbox/vbox_network.c
@@ -59,6 +59,19 @@ VIR_LOG_INIT("vbox.vbox_network");
} \
} while (0)
+#define vboxIIDUnalloc(iid) gVBoxAPI.UIID.vboxIIDUnalloc(data, iid)
+#define vboxIIDToUUID(iid, uuid) gVBoxAPI.UIID.vboxIIDToUUID(data, iid,
uuid)
+#define vboxIIDFromUUID(iid, uuid) gVBoxAPI.UIID.vboxIIDFromUUID(data, iid,
uuid)
+#define vboxIIDIsEqual(iid1, iid2) gVBoxAPI.UIID.vboxIIDIsEqual(data, iid1,
iid2)
+#define DEBUGIID(msg, iid) gVBoxAPI.UIID.DEBUGIID(msg, iid)
+#define vboxIIDFromArrayItem(iid, array, idx) \
+ gVBoxAPI.UIID.vboxIIDFromArrayItem(data, iid, array, idx)
+
+#define VBOX_IID_INITIALIZE(iid) gVBoxAPI.UIID.vboxIIDInitialize(iid)
+
+#define ARRAY_GET_MACHINES \
+ (gVBoxAPI.UArray.handleGetMachines(data->vboxObj))
+
static vboxUniformedAPI gVBoxAPI;
/**
@@ -297,3 +310,55 @@ int vboxConnectListDefinedNetworks(virConnectPtr conn, char **const
names, int n
return ret;
}
+
+virNetworkPtr vboxNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
+{
+ vboxGlobalData *data = conn->privateData;
+ PRUint32 interfaceType = 0;
+ char *nameUtf8 = NULL;
+ PRUnichar *nameUtf16 = NULL;
+ IHostNetworkInterface *networkInterface = NULL;
+ vboxIIDUnion iid;
+ IHost *host = NULL;
+ virNetworkPtr ret = NULL;
+
+ if (!data->vboxObj)
+ return ret;
+
+ gVBoxAPI.UIVirtualBox.GetHost(data->vboxObj, &host);
+ if (!host)
+ return ret;
+
+ VBOX_IID_INITIALIZE(&iid);
+ vboxIIDFromUUID(&iid, uuid);
+
+ /* TODO: "internal" networks are just strings and
+ * thus can't do much with them
+ */
+
+ gVBoxAPI.UIHost.FindHostNetworkInterfaceById(host, &iid,
+ &networkInterface);
+ if (!networkInterface)
+ goto cleanup;
+
+ gVBoxAPI.UIHNInterface.GetInterfaceType(networkInterface, &interfaceType);
+
+ if (interfaceType != HostNetworkInterfaceType_HostOnly)
+ goto cleanup;
+
+ gVBoxAPI.UIHNInterface.GetName(networkInterface, &nameUtf16);
+ VBOX_UTF16_TO_UTF8(nameUtf16, &nameUtf8);
+
+ ret = virGetNetwork(conn, nameUtf8, uuid);
+
+ VIR_DEBUG("Network Name: %s", nameUtf8);
+ DEBUGIID("Network UUID", &iid);
+ VBOX_UTF8_FREE(nameUtf8);
+ VBOX_UTF16_FREE(nameUtf16);
+
+ cleanup:
+ VBOX_RELEASE(networkInterface);
+ VBOX_RELEASE(host);
+ vboxIIDUnalloc(&iid);
+ return ret;
+}
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index ed75656..8675182 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -2061,50 +2061,6 @@ _registerDomainEvent(virDriverPtr driver)
*/
static virNetworkPtr
-vboxNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
-{
- VBOX_OBJECT_HOST_CHECK(conn, virNetworkPtr, NULL);
- vboxIID iid = VBOX_IID_INITIALIZER;
-
- vboxIIDFromUUID(&iid, uuid);
-
- /* TODO: "internal" networks are just strings and
- * thus can't do much with them
- */
- IHostNetworkInterface *networkInterface = NULL;
-
- host->vtbl->FindHostNetworkInterfaceById(host, iid.value,
&networkInterface);
- if (networkInterface) {
- PRUint32 interfaceType = 0;
-
- networkInterface->vtbl->GetInterfaceType(networkInterface,
&interfaceType);
-
- if (interfaceType == HostNetworkInterfaceType_HostOnly) {
- char *nameUtf8 = NULL;
- PRUnichar *nameUtf16 = NULL;
-
- networkInterface->vtbl->GetName(networkInterface, &nameUtf16);
- VBOX_UTF16_TO_UTF8(nameUtf16, &nameUtf8);
-
- ret = virGetNetwork(conn, nameUtf8, uuid);
-
- VIR_DEBUG("Network Name: %s", nameUtf8);
- DEBUGIID("Network UUID", iid.value);
-
- VBOX_UTF8_FREE(nameUtf8);
- VBOX_UTF16_FREE(nameUtf16);
- }
-
- VBOX_RELEASE(networkInterface);
- }
-
- VBOX_RELEASE(host);
-
- vboxIIDUnalloc(&iid);
- return ret;
-}
-
-static virNetworkPtr
vboxNetworkLookupByName(virConnectPtr conn, const char *name)
{
VBOX_OBJECT_HOST_CHECK(conn, virNetworkPtr, NULL);
@@ -5897,6 +5853,14 @@ _displayTakeScreenShotPNGToArray(IDisplay *display
ATTRIBUTE_UNUSED,
}
static nsresult
+_hostFindHostNetworkInterfaceById(IHost *host, vboxIIDUnion *iidu,
+ IHostNetworkInterface **networkInterface)
+{
+ return host->vtbl->FindHostNetworkInterfaceById(host, IID_MEMBER(value),
+ networkInterface);
+}
+
+static nsresult
_hnInterfaceGetInterfaceType(IHostNetworkInterface *hni, PRUint32 *interfaceType)
{
return hni->vtbl->GetInterfaceType(hni, interfaceType);
@@ -6217,6 +6181,10 @@ static vboxUniformedIDisplay _UIDisplay = {
.TakeScreenShotPNGToArray = _displayTakeScreenShotPNGToArray,
};
+static vboxUniformedIHost _UIHost = {
+ .FindHostNetworkInterfaceById = _hostFindHostNetworkInterfaceById,
+};
+
static vboxUniformedIHNInterface _UIHNInterface = {
.GetInterfaceType = _hnInterfaceGetInterfaceType,
.GetStatus = _hnInterfaceGetStatus,
@@ -6276,6 +6244,7 @@ void NAME(InstallUniformedAPI)(vboxUniformedAPI *pVBoxAPI)
pVBoxAPI->UISharedFolder = _UISharedFolder;
pVBoxAPI->UISnapshot = _UISnapshot;
pVBoxAPI->UIDisplay = _UIDisplay;
+ pVBoxAPI->UIHost = _UIHost;
pVBoxAPI->UIHNInterface = _UIHNInterface;
pVBoxAPI->machineStateChecker = _machineStateChecker;
diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h
index e6729f2..2e0eb10 100644
--- a/src/vbox/vbox_uniformed_api.h
+++ b/src/vbox/vbox_uniformed_api.h
@@ -466,6 +466,12 @@ typedef struct {
PRUint8** screenData);
} vboxUniformedIDisplay;
+/* Functions for IHost */
+typedef struct {
+ nsresult (*FindHostNetworkInterfaceById)(IHost *host, vboxIIDUnion *iidu,
+ IHostNetworkInterface **networkInterface);
+} vboxUniformedIHost;
+
/* Functions for IHostNetworkInterface */
typedef struct {
nsresult (*GetInterfaceType)(IHostNetworkInterface *hni, PRUint32 *interfaceType);
@@ -527,6 +533,7 @@ typedef struct {
vboxUniformedISharedFolder UISharedFolder;
vboxUniformedISnapshot UISnapshot;
vboxUniformedIDisplay UIDisplay;
+ vboxUniformedIHost UIHost;
vboxUniformedIHNInterface UIHNInterface;
uniformedMachineStateChecker machineStateChecker;
/* vbox API features */
@@ -552,6 +559,7 @@ int vboxConnectNumOfNetworks(virConnectPtr conn);
int vboxConnectListNetworks(virConnectPtr conn, char **const names, int nnames);
int vboxConnectNumOfDefinedNetworks(virConnectPtr conn);
int vboxConnectListDefinedNetworks(virConnectPtr conn, char **const names, int nnames);
+virNetworkPtr vboxNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid);
/* Version specified functions for installing uniformed API */
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
--
1.7.9.5