mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-11-08 14:29:56 +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)
|
} 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;
|
static vboxUniformedAPI gVBoxAPI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -299,3 +312,55 @@ int vboxConnectListDefinedNetworks(virConnectPtr conn, char **const names, int n
|
|||||||
|
|
||||||
return ret;
|
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
|
* 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
|
static virNetworkPtr
|
||||||
vboxNetworkLookupByName(virConnectPtr conn, const char *name)
|
vboxNetworkLookupByName(virConnectPtr conn, const char *name)
|
||||||
{
|
{
|
||||||
@ -5896,6 +5852,14 @@ _displayTakeScreenShotPNGToArray(IDisplay *display ATTRIBUTE_UNUSED,
|
|||||||
#endif /* VBOX_API_VERSION >= 4000000 */
|
#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
|
static nsresult
|
||||||
_hnInterfaceGetInterfaceType(IHostNetworkInterface *hni, PRUint32 *interfaceType)
|
_hnInterfaceGetInterfaceType(IHostNetworkInterface *hni, PRUint32 *interfaceType)
|
||||||
{
|
{
|
||||||
@ -6217,6 +6181,10 @@ static vboxUniformedIDisplay _UIDisplay = {
|
|||||||
.TakeScreenShotPNGToArray = _displayTakeScreenShotPNGToArray,
|
.TakeScreenShotPNGToArray = _displayTakeScreenShotPNGToArray,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static vboxUniformedIHost _UIHost = {
|
||||||
|
.FindHostNetworkInterfaceById = _hostFindHostNetworkInterfaceById,
|
||||||
|
};
|
||||||
|
|
||||||
static vboxUniformedIHNInterface _UIHNInterface = {
|
static vboxUniformedIHNInterface _UIHNInterface = {
|
||||||
.GetInterfaceType = _hnInterfaceGetInterfaceType,
|
.GetInterfaceType = _hnInterfaceGetInterfaceType,
|
||||||
.GetStatus = _hnInterfaceGetStatus,
|
.GetStatus = _hnInterfaceGetStatus,
|
||||||
@ -6276,6 +6244,7 @@ void NAME(InstallUniformedAPI)(vboxUniformedAPI *pVBoxAPI)
|
|||||||
pVBoxAPI->UISharedFolder = _UISharedFolder;
|
pVBoxAPI->UISharedFolder = _UISharedFolder;
|
||||||
pVBoxAPI->UISnapshot = _UISnapshot;
|
pVBoxAPI->UISnapshot = _UISnapshot;
|
||||||
pVBoxAPI->UIDisplay = _UIDisplay;
|
pVBoxAPI->UIDisplay = _UIDisplay;
|
||||||
|
pVBoxAPI->UIHost = _UIHost;
|
||||||
pVBoxAPI->UIHNInterface = _UIHNInterface;
|
pVBoxAPI->UIHNInterface = _UIHNInterface;
|
||||||
pVBoxAPI->machineStateChecker = _machineStateChecker;
|
pVBoxAPI->machineStateChecker = _machineStateChecker;
|
||||||
|
|
||||||
|
@ -466,6 +466,12 @@ typedef struct {
|
|||||||
PRUint8** screenData);
|
PRUint8** screenData);
|
||||||
} vboxUniformedIDisplay;
|
} vboxUniformedIDisplay;
|
||||||
|
|
||||||
|
/* Functions for IHost */
|
||||||
|
typedef struct {
|
||||||
|
nsresult (*FindHostNetworkInterfaceById)(IHost *host, vboxIIDUnion *iidu,
|
||||||
|
IHostNetworkInterface **networkInterface);
|
||||||
|
} vboxUniformedIHost;
|
||||||
|
|
||||||
/* Functions for IHostNetworkInterface */
|
/* Functions for IHostNetworkInterface */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
nsresult (*GetInterfaceType)(IHostNetworkInterface *hni, PRUint32 *interfaceType);
|
nsresult (*GetInterfaceType)(IHostNetworkInterface *hni, PRUint32 *interfaceType);
|
||||||
@ -527,6 +533,7 @@ typedef struct {
|
|||||||
vboxUniformedISharedFolder UISharedFolder;
|
vboxUniformedISharedFolder UISharedFolder;
|
||||||
vboxUniformedISnapshot UISnapshot;
|
vboxUniformedISnapshot UISnapshot;
|
||||||
vboxUniformedIDisplay UIDisplay;
|
vboxUniformedIDisplay UIDisplay;
|
||||||
|
vboxUniformedIHost UIHost;
|
||||||
vboxUniformedIHNInterface UIHNInterface;
|
vboxUniformedIHNInterface UIHNInterface;
|
||||||
uniformedMachineStateChecker machineStateChecker;
|
uniformedMachineStateChecker machineStateChecker;
|
||||||
/* vbox API features */
|
/* vbox API features */
|
||||||
@ -552,6 +559,7 @@ int vboxConnectNumOfNetworks(virConnectPtr conn);
|
|||||||
int vboxConnectListNetworks(virConnectPtr conn, char **const names, int nnames);
|
int vboxConnectListNetworks(virConnectPtr conn, char **const names, int nnames);
|
||||||
int vboxConnectNumOfDefinedNetworks(virConnectPtr conn);
|
int vboxConnectNumOfDefinedNetworks(virConnectPtr conn);
|
||||||
int vboxConnectListDefinedNetworks(virConnectPtr conn, char **const names, int nnames);
|
int vboxConnectListDefinedNetworks(virConnectPtr conn, char **const names, int nnames);
|
||||||
|
virNetworkPtr vboxNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid);
|
||||||
|
|
||||||
/* Version specified functions for installing uniformed API */
|
/* Version specified functions for installing uniformed API */
|
||||||
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
|
void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
|
||||||
|
Loading…
Reference in New Issue
Block a user