---
src/vbox/vbox_network.c | 49 +++++++++++++++++++++++++++++++++++++
src/vbox/vbox_tmpl.c | 54 ++++++++++++-----------------------------
src/vbox/vbox_uniformed_api.h | 4 +++
3 files changed, 69 insertions(+), 38 deletions(-)
diff --git a/src/vbox/vbox_network.c b/src/vbox/vbox_network.c
index 0405265..f0fa4f4 100644
--- a/src/vbox/vbox_network.c
+++ b/src/vbox/vbox_network.c
@@ -362,3 +362,52 @@ virNetworkPtr vboxNetworkLookupByUUID(virConnectPtr conn, const
unsigned char *u
vboxIIDUnalloc(&iid);
return ret;
}
+
+virNetworkPtr vboxNetworkLookupByName(virConnectPtr conn, const char *name)
+{
+ vboxGlobalData *data = conn->privateData;
+ PRUnichar *nameUtf16 = NULL;
+ IHostNetworkInterface *networkInterface = NULL;
+ PRUint32 interfaceType = 0;
+ unsigned char uuid[VIR_UUID_BUFLEN];
+ vboxIIDUnion iid;
+ IHost *host = NULL;
+ virNetworkPtr ret = NULL;
+ nsresult rc;
+
+ if (!data->vboxObj)
+ return ret;
+
+ gVBoxAPI.UIVirtualBox.GetHost(data->vboxObj, &host);
+ if (!host)
+ return ret;
+
+ VBOX_IID_INITIALIZE(&iid);
+ VBOX_UTF8_TO_UTF16(name, &nameUtf16);
+
+ gVBoxAPI.UIHost.FindHostNetworkInterfaceByName(host, nameUtf16,
&networkInterface);
+
+ if (!networkInterface)
+ goto cleanup;
+
+ gVBoxAPI.UIHNInterface.GetInterfaceType(networkInterface, &interfaceType);
+
+ if (interfaceType != HostNetworkInterfaceType_HostOnly)
+ goto cleanup;
+
+ rc = gVBoxAPI.UIHNInterface.GetId(networkInterface, &iid);
+ if (NS_FAILED(rc))
+ goto cleanup;
+ vboxIIDToUUID(&iid, uuid);
+ ret = virGetNetwork(conn, name, uuid);
+
+ VIR_DEBUG("Network Name: %s", name);
+ DEBUGIID("Network UUID", &iid);
+ vboxIIDUnalloc(&iid);
+
+ cleanup:
+ VBOX_RELEASE(networkInterface);
+ VBOX_UTF16_FREE(nameUtf16);
+ VBOX_RELEASE(host);
+ return ret;
+}
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index 8675182..fa55325 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -2061,44 +2061,6 @@ _registerDomainEvent(virDriverPtr driver)
*/
static virNetworkPtr
-vboxNetworkLookupByName(virConnectPtr conn, const char *name)
-{
- VBOX_OBJECT_HOST_CHECK(conn, virNetworkPtr, NULL);
- PRUnichar *nameUtf16 = NULL;
- IHostNetworkInterface *networkInterface = NULL;
-
- VBOX_UTF8_TO_UTF16(name, &nameUtf16);
-
- host->vtbl->FindHostNetworkInterfaceByName(host, nameUtf16,
&networkInterface);
-
- if (networkInterface) {
- PRUint32 interfaceType = 0;
-
- networkInterface->vtbl->GetInterfaceType(networkInterface,
&interfaceType);
-
- if (interfaceType == HostNetworkInterfaceType_HostOnly) {
- unsigned char uuid[VIR_UUID_BUFLEN];
- vboxIID iid = VBOX_IID_INITIALIZER;
-
- networkInterface->vtbl->GetId(networkInterface, &iid.value);
- vboxIIDToUUID(&iid, uuid);
- ret = virGetNetwork(conn, name, uuid);
- VIR_DEBUG("Network Name: %s", name);
-
- DEBUGIID("Network UUID", iid.value);
- vboxIIDUnalloc(&iid);
- }
-
- VBOX_RELEASE(networkInterface);
- }
-
- VBOX_UTF16_FREE(nameUtf16);
- VBOX_RELEASE(host);
-
- return ret;
-}
-
-static virNetworkPtr
vboxNetworkDefineCreateXML(virConnectPtr conn, const char *xml, bool start)
{
VBOX_OBJECT_HOST_CHECK(conn, virNetworkPtr, NULL);
@@ -5861,6 +5823,14 @@ _hostFindHostNetworkInterfaceById(IHost *host, vboxIIDUnion *iidu,
}
static nsresult
+_hostFindHostNetworkInterfaceByName(IHost *host, PRUnichar *name,
+ IHostNetworkInterface **networkInterface)
+{
+ return host->vtbl->FindHostNetworkInterfaceByName(host, name,
+ networkInterface);
+}
+
+static nsresult
_hnInterfaceGetInterfaceType(IHostNetworkInterface *hni, PRUint32 *interfaceType)
{
return hni->vtbl->GetInterfaceType(hni, interfaceType);
@@ -5878,6 +5848,12 @@ _hnInterfaceGetName(IHostNetworkInterface *hni, PRUnichar **name)
return hni->vtbl->GetName(hni, name);
}
+static nsresult
+_hnInterfaceGetId(IHostNetworkInterface *hni, vboxIIDUnion *iidu)
+{
+ return hni->vtbl->GetId(hni, &IID_MEMBER(value));
+}
+
static bool _machineStateOnline(PRUint32 state)
{
return ((state >= MachineState_FirstOnline) &&
@@ -6183,12 +6159,14 @@ static vboxUniformedIDisplay _UIDisplay = {
static vboxUniformedIHost _UIHost = {
.FindHostNetworkInterfaceById = _hostFindHostNetworkInterfaceById,
+ .FindHostNetworkInterfaceByName = _hostFindHostNetworkInterfaceByName,
};
static vboxUniformedIHNInterface _UIHNInterface = {
.GetInterfaceType = _hnInterfaceGetInterfaceType,
.GetStatus = _hnInterfaceGetStatus,
.GetName = _hnInterfaceGetName,
+ .GetId = _hnInterfaceGetId,
};
static uniformedMachineStateChecker _machineStateChecker = {
diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h
index 2e0eb10..a14ee1c 100644
--- a/src/vbox/vbox_uniformed_api.h
+++ b/src/vbox/vbox_uniformed_api.h
@@ -470,6 +470,8 @@ typedef struct {
typedef struct {
nsresult (*FindHostNetworkInterfaceById)(IHost *host, vboxIIDUnion *iidu,
IHostNetworkInterface **networkInterface);
+ nsresult (*FindHostNetworkInterfaceByName)(IHost *host, PRUnichar *name,
+ IHostNetworkInterface
**networkInterface);
} vboxUniformedIHost;
/* Functions for IHostNetworkInterface */
@@ -477,6 +479,7 @@ typedef struct {
nsresult (*GetInterfaceType)(IHostNetworkInterface *hni, PRUint32 *interfaceType);
nsresult (*GetStatus)(IHostNetworkInterface *hni, PRUint32 *status);
nsresult (*GetName)(IHostNetworkInterface *hni, PRUnichar **name);
+ nsresult (*GetId)(IHostNetworkInterface *hni, vboxIIDUnion *iidu);
} vboxUniformedIHNInterface;
typedef struct {
@@ -560,6 +563,7 @@ 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);
+virNetworkPtr vboxNetworkLookupByName(virConnectPtr conn, const char *name);
/* Version specified functions for installing uniformed API */
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
--
1.7.9.5