mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-02 01:45:17 +00:00
vbox: Rewrite vboxNetworkLookupByName
This commit is contained in:
parent
e4f24f892f
commit
ee951b9fe7
@ -364,3 +364,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;
|
||||
}
|
||||
|
@ -2060,44 +2060,6 @@ _registerDomainEvent(virDriverPtr driver)
|
||||
* The Network Functions here on
|
||||
*/
|
||||
|
||||
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)
|
||||
{
|
||||
@ -5860,6 +5822,14 @@ _hostFindHostNetworkInterfaceById(IHost *host, vboxIIDUnion *iidu,
|
||||
networkInterface);
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_hostFindHostNetworkInterfaceByName(IHost *host, PRUnichar *name,
|
||||
IHostNetworkInterface **networkInterface)
|
||||
{
|
||||
return host->vtbl->FindHostNetworkInterfaceByName(host, name,
|
||||
networkInterface);
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_hnInterfaceGetInterfaceType(IHostNetworkInterface *hni, PRUint32 *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 = {
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user