mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
vbox: Add API for vboxDomainSnapshotCreateXML
This commit is contained in:
parent
2ad7b494a9
commit
51d1a29dd8
@ -269,5 +269,6 @@ typedef nsISupports IMedium;
|
||||
typedef nsISupports IMediumAttachment;
|
||||
typedef nsISupports IStorageController;
|
||||
typedef nsISupports ISharedFolder;
|
||||
typedef nsISupports ISnapshot;
|
||||
|
||||
#endif /* VBOX_COMMON_H */
|
||||
|
@ -666,7 +666,6 @@ _vboxIIDFromArrayItem(vboxGlobalData *data, vboxIIDUnion *iidu,
|
||||
vboxIIDFromArrayItem_v3_x(data, &iidu->vboxIID_v3_x, array, idx);
|
||||
}
|
||||
|
||||
|
||||
# define vboxIIDUnalloc(iid) vboxIIDUnalloc_v3_x(data, iid)
|
||||
# define vboxIIDToUUID(iid, uuid) vboxIIDToUUID_v3_x(data, iid, uuid)
|
||||
# define vboxIIDFromUUID(iid, uuid) vboxIIDFromUUID_v3_x(data, iid, uuid)
|
||||
@ -677,7 +676,6 @@ _vboxIIDFromArrayItem(vboxGlobalData *data, vboxIIDUnion *iidu,
|
||||
|
||||
#endif /* !(VBOX_API_VERSION == 2002000) */
|
||||
|
||||
|
||||
/**
|
||||
* function to generate the name for medium,
|
||||
* for e.g: hda, sda, etc
|
||||
@ -7786,6 +7784,18 @@ static void _DEBUGIID(const char *msg, vboxIIDUnion *iidu)
|
||||
|
||||
#endif /* VBOX_API_VERSION != 2002000 */
|
||||
|
||||
static void
|
||||
_vboxIIDToUtf8(vboxGlobalData *data ATTRIBUTE_UNUSED,
|
||||
vboxIIDUnion *iidu ATTRIBUTE_UNUSED,
|
||||
char **utf8 ATTRIBUTE_UNUSED)
|
||||
{
|
||||
#if VBOX_API_VERSION == 2002000
|
||||
vboxUnsupported();
|
||||
#else /* !(VBOX_API_VERSION == 2002000) */
|
||||
data->pFuncs->pfnUtf16ToUtf8(IID_MEMBER(value), utf8);
|
||||
#endif /* !(VBOX_API_VERSION == 2002000) */
|
||||
}
|
||||
|
||||
static void* _handleGetMachines(IVirtualBox *vboxObj)
|
||||
{
|
||||
return vboxObj->vtbl->GetMachines;
|
||||
@ -7839,6 +7849,12 @@ _virtualboxGetMachine(IVirtualBox *vboxObj, vboxIIDUnion *iidu, IMachine **machi
|
||||
|
||||
#endif /* VBOX_API_VERSION >= 4000000 */
|
||||
|
||||
static nsresult
|
||||
_virtualboxOpenMachine(IVirtualBox *vboxObj, PRUnichar *settingsFile, IMachine **machine)
|
||||
{
|
||||
return vboxObj->vtbl->OpenMachine(vboxObj, settingsFile, machine);
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_virtualboxGetSystemProperties(IVirtualBox *vboxObj, ISystemProperties **systemProperties)
|
||||
{
|
||||
@ -7909,6 +7925,20 @@ _virtualboxCreateMachine(vboxGlobalData *data, virDomainDefPtr def, IMachine **m
|
||||
return rc;
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_virtualboxCreateHardDiskMedium(IVirtualBox *vboxObj ATTRIBUTE_UNUSED,
|
||||
PRUnichar *format ATTRIBUTE_UNUSED,
|
||||
PRUnichar *location ATTRIBUTE_UNUSED,
|
||||
IMedium **medium ATTRIBUTE_UNUSED)
|
||||
{
|
||||
#if VBOX_API_VERSION < 3001000
|
||||
vboxUnsupported();
|
||||
return 0;
|
||||
#else /* VBOX_API_VERSION >= 3001000 */
|
||||
return vboxObj->vtbl->CreateHardDisk(vboxObj, format, location, medium);
|
||||
#endif /* VBOX_API_VERSION >= 3001000 */
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_virtualboxRegisterMachine(IVirtualBox *vboxObj, IMachine *machine)
|
||||
{
|
||||
@ -8032,6 +8062,20 @@ _machineLaunchVMProcess(vboxGlobalData *data,
|
||||
#endif /* VBOX_API_VERSION >= 4000000 */
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_machineUnregister(IMachine *machine ATTRIBUTE_UNUSED,
|
||||
PRUint32 cleanupMode ATTRIBUTE_UNUSED,
|
||||
PRUint32 *aMediaSize ATTRIBUTE_UNUSED,
|
||||
IMedium ***aMedia ATTRIBUTE_UNUSED)
|
||||
{
|
||||
#if VBOX_API_VERSION < 4000000
|
||||
vboxUnsupported();
|
||||
return 0;
|
||||
#else /* VBOX_API_VERSION >= 4000000 */
|
||||
return machine->vtbl->Unregister(machine, cleanupMode, aMediaSize, aMedia);
|
||||
#endif /* VBOX_API_VERSION >= 4000000 */
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_machineGetAccessible(IMachine *machine, PRBool *isAccessible)
|
||||
{
|
||||
@ -8117,6 +8161,18 @@ _machineGetUSBCommon(IMachine *machine, IUSBCommon **USBCommon)
|
||||
#endif
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_machineGetCurrentSnapshot(IMachine *machine, ISnapshot **currentSnapshot)
|
||||
{
|
||||
return machine->vtbl->GetCurrentSnapshot(machine, currentSnapshot);
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_machineGetSettingsFilePath(IMachine *machine, PRUnichar **settingsFilePath)
|
||||
{
|
||||
return machine->vtbl->GetSettingsFilePath(machine, settingsFilePath);
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_machineGetCPUCount(IMachine *machine, PRUint32 *CPUCount)
|
||||
{
|
||||
@ -8356,6 +8412,13 @@ _consoleReset(IConsole *console)
|
||||
return console->vtbl->Reset(console);
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_consoleTakeSnapshot(IConsole *console, PRUnichar *name,
|
||||
PRUnichar *description, IProgress **progress)
|
||||
{
|
||||
return console->vtbl->TakeSnapshot(console, name, description, progress);
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_progressWaitForCompletion(IProgress *progress, PRInt32 timeout)
|
||||
{
|
||||
@ -9012,10 +9075,74 @@ static nsresult _mediumGetReadOnly(IMedium *medium ATTRIBUTE_UNUSED,
|
||||
#endif /* VBOX_API_VERSION >= 3001000 */
|
||||
}
|
||||
|
||||
#if VBOX_API_VERSION < 3001000
|
||||
|
||||
static nsresult _mediumGetParent(IMedium *medium ATTRIBUTE_UNUSED,
|
||||
IMedium **parent ATTRIBUTE_UNUSED)
|
||||
{
|
||||
vboxUnsupported();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static nsresult _mediumGetChildren(IMedium *medium ATTRIBUTE_UNUSED,
|
||||
PRUint32 *childrenSize ATTRIBUTE_UNUSED,
|
||||
IMedium ***children ATTRIBUTE_UNUSED)
|
||||
{
|
||||
vboxUnsupported();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static nsresult _mediumGetFormat(IMedium *medium ATTRIBUTE_UNUSED,
|
||||
PRUnichar **format ATTRIBUTE_UNUSED)
|
||||
{
|
||||
vboxUnsupported();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static nsresult _mediumDeleteStorage(IMedium *medium ATTRIBUTE_UNUSED,
|
||||
IProgress **progress ATTRIBUTE_UNUSED)
|
||||
{
|
||||
vboxUnsupported();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* VBOX_API_VERSION >= 3001000 */
|
||||
|
||||
static nsresult _mediumGetParent(IMedium *medium,
|
||||
IMedium **parent)
|
||||
{
|
||||
return medium->vtbl->GetParent(medium, parent);
|
||||
}
|
||||
|
||||
static nsresult _mediumGetChildren(IMedium *medium,
|
||||
PRUint32 *childrenSize,
|
||||
IMedium ***children)
|
||||
{
|
||||
return medium->vtbl->GetChildren(medium, childrenSize, children);
|
||||
}
|
||||
|
||||
static nsresult _mediumGetFormat(IMedium *medium,
|
||||
PRUnichar **format)
|
||||
{
|
||||
return medium->vtbl->GetFormat(medium, format);
|
||||
}
|
||||
|
||||
static nsresult _mediumDeleteStorage(IMedium *medium,
|
||||
IProgress **progress)
|
||||
{
|
||||
return medium->vtbl->DeleteStorage(medium, progress);
|
||||
}
|
||||
|
||||
#endif /* VBOX_API_VERSION >= 3001000 */
|
||||
|
||||
static nsresult _mediumRelease(IMedium *medium)
|
||||
{
|
||||
return medium->vtbl->nsisupports.Release((nsISupports *)medium);
|
||||
}
|
||||
static nsresult _mediumClose(IMedium *medium)
|
||||
{
|
||||
return medium->vtbl->Close(medium);
|
||||
}
|
||||
|
||||
static nsresult _mediumSetType(IMedium *medium ATTRIBUTE_UNUSED,
|
||||
PRUint32 type ATTRIBUTE_UNUSED)
|
||||
@ -9028,6 +9155,27 @@ static nsresult _mediumSetType(IMedium *medium ATTRIBUTE_UNUSED,
|
||||
#endif
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_mediumCreateDiffStorage(IMedium *medium ATTRIBUTE_UNUSED,
|
||||
IMedium *target ATTRIBUTE_UNUSED,
|
||||
PRUint32 variantSize ATTRIBUTE_UNUSED,
|
||||
PRUint32 *variant ATTRIBUTE_UNUSED,
|
||||
IProgress **progress ATTRIBUTE_UNUSED)
|
||||
{
|
||||
#if VBOX_API_VERSION < 3001000
|
||||
vboxUnsupported();
|
||||
return 0;
|
||||
#elif VBOX_API_VERSION < 4003000
|
||||
if (variantSize == 0)
|
||||
return 0;
|
||||
if (variantSize > 1)
|
||||
VIR_WARN("Only one variant is avaible in current version");
|
||||
return medium->vtbl->CreateDiffStorage(medium, target, variant[0], progress);
|
||||
#else /* VBOX_API_VERSION >= 4003000 */
|
||||
return medium->vtbl->CreateDiffStorage(medium, target, variantSize, variant, progress);
|
||||
#endif /* VBOX_API_VERSION >= 4003000 */
|
||||
}
|
||||
|
||||
static nsresult
|
||||
_mediumAttachmentGetMedium(IMediumAttachment *mediumAttachment ATTRIBUTE_UNUSED,
|
||||
IMedium **medium ATTRIBUTE_UNUSED)
|
||||
@ -9146,6 +9294,7 @@ static vboxUniformedIID _UIID = {
|
||||
.vboxIIDFromUUID = _vboxIIDFromUUID,
|
||||
.vboxIIDIsEqual = _vboxIIDIsEqual,
|
||||
.vboxIIDFromArrayItem = _vboxIIDFromArrayItem,
|
||||
.vboxIIDToUtf8 = _vboxIIDToUtf8,
|
||||
.DEBUGIID = _DEBUGIID,
|
||||
};
|
||||
|
||||
@ -9165,8 +9314,10 @@ static vboxUniformednsISupports _nsUISupports = {
|
||||
static vboxUniformedIVirtualBox _UIVirtualBox = {
|
||||
.GetVersion = _virtualboxGetVersion,
|
||||
.GetMachine = _virtualboxGetMachine,
|
||||
.OpenMachine = _virtualboxOpenMachine,
|
||||
.GetSystemProperties = _virtualboxGetSystemProperties,
|
||||
.CreateMachine = _virtualboxCreateMachine,
|
||||
.CreateHardDiskMedium = _virtualboxCreateHardDiskMedium,
|
||||
.RegisterMachine = _virtualboxRegisterMachine,
|
||||
.FindMedium = _virtualboxFindMedium,
|
||||
.OpenMedium = _virtualboxOpenMedium,
|
||||
@ -9179,6 +9330,7 @@ static vboxUniformedIMachine _UIMachine = {
|
||||
.CreateSharedFolder = _machineCreateSharedFolder,
|
||||
.RemoveSharedFolder = _machineRemoveSharedFolder,
|
||||
.LaunchVMProcess = _machineLaunchVMProcess,
|
||||
.Unregister = _machineUnregister,
|
||||
.GetAccessible = _machineGetAccessible,
|
||||
.GetState = _machineGetState,
|
||||
.GetName = _machineGetName,
|
||||
@ -9191,6 +9343,8 @@ static vboxUniformedIMachine _UIMachine = {
|
||||
.GetParallelPort = _machineGetParallelPort,
|
||||
.GetVRDxServer = _machineGetVRDxServer,
|
||||
.GetUSBCommon = _machineGetUSBCommon,
|
||||
.GetCurrentSnapshot = _machineGetCurrentSnapshot,
|
||||
.GetSettingsFilePath = _machineGetSettingsFilePath,
|
||||
.GetCPUCount = _machineGetCPUCount,
|
||||
.SetCPUCount = _machineSetCPUCount,
|
||||
.GetMemorySize = _machineGetMemorySize,
|
||||
@ -9227,6 +9381,7 @@ static vboxUniformedIConsole _UIConsole = {
|
||||
.PowerButton = _consolePowerButton,
|
||||
.PowerDown = _consolePowerDown,
|
||||
.Reset = _consoleReset,
|
||||
.TakeSnapshot = _consoleTakeSnapshot,
|
||||
};
|
||||
|
||||
static vboxUniformedIProgress _UIProgress = {
|
||||
@ -9337,8 +9492,14 @@ static vboxUniformedIMedium _UIMedium = {
|
||||
.GetId = _mediumGetId,
|
||||
.GetLocation = _mediumGetLocation,
|
||||
.GetReadOnly = _mediumGetReadOnly,
|
||||
.GetParent = _mediumGetParent,
|
||||
.GetChildren = _mediumGetChildren,
|
||||
.GetFormat = _mediumGetFormat,
|
||||
.DeleteStorage = _mediumDeleteStorage,
|
||||
.Release = _mediumRelease,
|
||||
.Close = _mediumClose,
|
||||
.SetType = _mediumSetType,
|
||||
.CreateDiffStorage = _mediumCreateDiffStorage,
|
||||
};
|
||||
|
||||
static vboxUniformedIMediumAttachment _UIMediumAttachment = {
|
||||
@ -9446,6 +9607,12 @@ void NAME(InstallUniformedAPI)(vboxUniformedAPI *pVBoxAPI)
|
||||
pVBoxAPI->accelerate2DVideo = 0;
|
||||
pVBoxAPI->oldMediumInterface = 1;
|
||||
#endif /* VBOX_API_VERSION < 3001000 */
|
||||
|
||||
#if VBOX_API_VERSION >= 4002000
|
||||
pVBoxAPI->vboxSnapshotRedefine = 1;
|
||||
#else /* VBOX_API_VERSION < 4002000 */
|
||||
pVBoxAPI->vboxSnapshotRedefine = 0;
|
||||
#endif /* VBOX_API_VERSION < 4002000 */
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -159,6 +159,7 @@ typedef struct {
|
||||
void (*vboxIIDFromUUID)(vboxGlobalData *data, vboxIIDUnion *iidu, const unsigned char *uuid);
|
||||
bool (*vboxIIDIsEqual)(vboxGlobalData *data, vboxIIDUnion *iidu1, vboxIIDUnion *iidu2);
|
||||
void (*vboxIIDFromArrayItem)(vboxGlobalData *data, vboxIIDUnion *iidu, vboxArray *array, int idx);
|
||||
void (*vboxIIDToUtf8)(vboxGlobalData *data, vboxIIDUnion *iidu, char **utf8);
|
||||
void (*DEBUGIID)(const char *msg, vboxIIDUnion *iidu);
|
||||
} vboxUniformedIID;
|
||||
|
||||
@ -182,8 +183,10 @@ typedef struct {
|
||||
typedef struct {
|
||||
nsresult (*GetVersion)(IVirtualBox *vboxObj, PRUnichar **versionUtf16);
|
||||
nsresult (*GetMachine)(IVirtualBox *vboxObj, vboxIIDUnion *iidu, IMachine **machine);
|
||||
nsresult (*OpenMachine)(IVirtualBox *vboxObj, PRUnichar *settingsFile, IMachine **machine);
|
||||
nsresult (*GetSystemProperties)(IVirtualBox *vboxObj, ISystemProperties **systemProperties);
|
||||
nsresult (*CreateMachine)(vboxGlobalData *data, virDomainDefPtr def, IMachine **machine, char *uuidstr);
|
||||
nsresult (*CreateHardDiskMedium)(IVirtualBox *vboxObj, PRUnichar *format, PRUnichar *location, IMedium **medium);
|
||||
nsresult (*RegisterMachine)(IVirtualBox *vboxObj, IMachine *machine);
|
||||
nsresult (*FindMedium)(IVirtualBox *vboxObj, PRUnichar *location, PRUint32 deviceType, PRUint32 accessMode, IMedium **medium);
|
||||
nsresult (*OpenMedium)(IVirtualBox *vboxObj, PRUnichar *location, PRUint32 deviceType, PRUint32 accessMode, IMedium **medium);
|
||||
@ -206,6 +209,8 @@ typedef struct {
|
||||
vboxIIDUnion *iidu,
|
||||
PRUnichar *sessionType, PRUnichar *env,
|
||||
IProgress **progress);
|
||||
nsresult (*Unregister)(IMachine *machine, PRUint32 cleanupMode,
|
||||
PRUint32 *aMediaSize, IMedium ***aMedia);
|
||||
nsresult (*GetAccessible)(IMachine *machine, PRBool *isAccessible);
|
||||
nsresult (*GetState)(IMachine *machine, PRUint32 *state);
|
||||
nsresult (*GetName)(IMachine *machine, PRUnichar **name);
|
||||
@ -218,6 +223,8 @@ typedef struct {
|
||||
nsresult (*GetParallelPort)(IMachine *machine, PRUint32 slot, IParallelPort **port);
|
||||
nsresult (*GetVRDxServer)(IMachine *machine, IVRDxServer **VRDxServer);
|
||||
nsresult (*GetUSBCommon)(IMachine *machine, IUSBCommon **USBCommon);
|
||||
nsresult (*GetCurrentSnapshot)(IMachine *machine, ISnapshot **currentSnapshot);
|
||||
nsresult (*GetSettingsFilePath)(IMachine *machine, PRUnichar **settingsFilePath);
|
||||
nsresult (*GetCPUCount)(IMachine *machine, PRUint32 *CPUCount);
|
||||
nsresult (*SetCPUCount)(IMachine *machine, PRUint32 CPUCount);
|
||||
nsresult (*GetMemorySize)(IMachine *machine, PRUint32 *memorySize);
|
||||
@ -256,6 +263,8 @@ typedef struct {
|
||||
nsresult (*PowerButton)(IConsole *console);
|
||||
nsresult (*PowerDown)(IConsole *console);
|
||||
nsresult (*Reset)(IConsole *console);
|
||||
nsresult (*TakeSnapshot)(IConsole *console, PRUnichar *name,
|
||||
PRUnichar *description, IProgress **progress);
|
||||
} vboxUniformedIConsole;
|
||||
|
||||
/* Functions for IProgress */
|
||||
@ -385,8 +394,15 @@ typedef struct {
|
||||
nsresult (*GetId)(IMedium *medium, vboxIIDUnion *iidu);
|
||||
nsresult (*GetLocation)(IMedium *medium, PRUnichar **location);
|
||||
nsresult (*GetReadOnly)(IMedium *medium, PRBool *readOnly);
|
||||
nsresult (*GetParent)(IMedium *medium, IMedium **parent);
|
||||
nsresult (*GetChildren)(IMedium *medium, PRUint32 *childrenSize, IMedium ***children);
|
||||
nsresult (*GetFormat)(IMedium *medium, PRUnichar **format);
|
||||
nsresult (*DeleteStorage)(IMedium *medium, IProgress **progress);
|
||||
nsresult (*Release)(IMedium *medium);
|
||||
nsresult (*Close)(IMedium *medium);
|
||||
nsresult (*SetType)(IMedium *medium, PRUint32 type);
|
||||
nsresult (*CreateDiffStorage)(IMedium *medium, IMedium *target, PRUint32 variantSize,
|
||||
PRUint32 *variant, IProgress **progress);
|
||||
} vboxUniformedIMedium;
|
||||
|
||||
/* Functions for IMediumAttachment */
|
||||
@ -471,6 +487,7 @@ typedef struct {
|
||||
bool accelerate2DVideo;
|
||||
bool vboxAttachDrivesUseOld;
|
||||
bool oldMediumInterface;
|
||||
bool vboxSnapshotRedefine;
|
||||
} vboxUniformedAPI;
|
||||
|
||||
/* libvirt API
|
||||
|
Loading…
x
Reference in New Issue
Block a user