mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-09-08 16:54:49 +00:00
vbox: Rewrite vboxNetworkLookupByUUID
This commit is contained in:
parent
85a3cd993a
commit
e4f24f892f
@ -61,6 +61,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;
|
||||
|
||||
/**
|
||||
@ -299,3 +312,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;
|
||||
}
|
||||
|
@ -2060,50 +2060,6 @@ _registerDomainEvent(virDriverPtr driver)
|
||||
* The Network Functions here on
|
||||
*/
|
||||
|
||||
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)
|
||||
{
|
||||
@ -5896,6 +5852,14 @@ _displayTakeScreenShotPNGToArray(IDisplay *display ATTRIBUTE_UNUSED,
|
||||
#endif /* VBOX_API_VERSION >= 4000000 */
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user