TOOLS_MODULE_EXPORT ToolsPluginData * ToolsOnLoad(ToolsAppCtx *ctx) { static ToolsPluginData regData = { "vmbackup", NULL, NULL }; RpcChannelCallback rpcs[] = { { VMBACKUP_PROTOCOL_START, VmBackupStart, NULL, NULL, NULL, 0 }, #if defined(_WIN32) /* START_WITH_OPTS command supported only on Windows for now */ { VMBACKUP_PROTOCOL_START_WITH_OPTS, VmBackupStartWithOpts, NULL, xdr_GuestQuiesceParams, NULL, sizeof (GuestQuiesceParams) }, #endif { VMBACKUP_PROTOCOL_ABORT, VmBackupAbort, NULL, NULL, NULL, 0 }, { VMBACKUP_PROTOCOL_SNAPSHOT_DONE, VmBackupSnapshotDone, NULL, NULL, NULL, 0 } }; ToolsPluginSignalCb sigs[] = { { TOOLS_CORE_SIG_DUMP_STATE, VmBackupDumpState, NULL }, { TOOLS_CORE_SIG_RESET, VmBackupReset, NULL }, { TOOLS_CORE_SIG_SHUTDOWN, VmBackupShutdown, NULL }, }; ToolsAppReg regs[] = { { TOOLS_APP_GUESTRPC, VMTools_WrapArray(rpcs, sizeof *rpcs, ARRAYSIZE(rpcs)) }, { TOOLS_APP_SIGNALS, VMTools_WrapArray(sigs, sizeof *sigs, ARRAYSIZE(sigs)) }, }; #if defined(G_PLATFORM_WIN32) /* * If initializing COM fails (unlikely), we'll fallback to the sync driver * or the null provider, depending on the configuration. On success, send * a request to unregister the VMware snapshot provider. */ if (ToolsCore_InitializeCOM(ctx)) { VmBackup_UnregisterSnapshotProvider(); } else { g_warning("Failed to initialize COM, VSS support will be unavailable."); } #endif regData.regs = VMTools_WrapArray(regs, sizeof *regs, ARRAYSIZE(regs)); g_signal_new(TOOLS_CORE_SIG_IO_FREEZE, G_OBJECT_TYPE(ctx->serviceObj), 0, 0, NULL, NULL, g_cclosure_user_marshal_VOID__POINTER_BOOLEAN, G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_BOOLEAN); return ®Data; }
TOOLS_MODULE_EXPORT ToolsPluginData * ToolsOnLoad(ToolsAppCtx *ctx) { static ToolsPluginData regData = { "vix", NULL, NULL }; RpcChannelCallback rpcs[] = { { VIX_BACKDOORCOMMAND_RUN_PROGRAM, FoundryToolsDaemonRunProgram, NULL, NULL, NULL, 0 }, { VIX_BACKDOORCOMMAND_GET_PROPERTIES, FoundryToolsDaemonGetToolsProperties, NULL, NULL, 0 }, { VIX_BACKDOORCOMMAND_SEND_HGFS_PACKET, ToolsDaemonHgfsImpersonated, NULL, NULL, NULL, 0 }, { VIX_BACKDOORCOMMAND_COMMAND, ToolsDaemonTcloReceiveVixCommand, NULL, NULL, 0 }, { VIX_BACKDOORCOMMAND_MOUNT_VOLUME_LIST, ToolsDaemonTcloMountHGFS, NULL, NULL, NULL, 0 }, }; ToolsPluginSignalCb sigs[] = { { TOOLS_CORE_SIG_SHUTDOWN, VixShutdown, ®Data } }; ToolsAppReg regs[] = { { TOOLS_APP_GUESTRPC, VMTools_WrapArray(rpcs, sizeof *rpcs, ARRAYSIZE(rpcs)) }, { TOOLS_APP_SIGNALS, VMTools_WrapArray(sigs, sizeof *sigs, ARRAYSIZE(sigs)) } }; #if defined(G_PLATFORM_WIN32) ToolsCore_InitializeCOM(ctx); #endif FoundryToolsDaemon_Initialize(ctx); regData.regs = VMTools_WrapArray(regs, sizeof *regs, ARRAYSIZE(regs)); if (TOOLS_IS_MAIN_SERVICE(ctx) && SyncDriver_Init()) { size_t i; size_t reg; for (reg = 0; reg < ARRAYSIZE(regs); reg++) { if (regs[reg].type == TOOLS_APP_SIGNALS) { /* * If running the system daemon and if the sync driver is active, * add signal registrations for IO_FREEZE signal. */ ToolsPluginSignalCb sysSigs[] = { { TOOLS_CORE_SIG_IO_FREEZE, VixIOFreeze, NULL } }; for (i = 0; i < ARRAYSIZE(sysSigs); i++) { g_array_append_val(regs[reg].data, sysSigs[i]); } } #if defined(_WIN32) || defined(linux) else if (regs[reg].type == TOOLS_APP_GUESTRPC) { /* * If running the system daemon and if the sync driver is active, * add RPC registrations for sync driver RPC commands. */ RpcChannelCallback sysRpcs[] = { { VIX_BACKDOORCOMMAND_SYNCDRIVER_FREEZE, ToolsDaemonTcloSyncDriverFreeze, NULL, NULL, NULL, 0 }, { VIX_BACKDOORCOMMAND_SYNCDRIVER_THAW, ToolsDaemonTcloSyncDriverThaw, NULL, NULL, NULL, 0 } }; for (i = 0; i < ARRAYSIZE(sysRpcs); i++) { g_array_append_val(regs[reg].data, sysRpcs[i]); } } #endif } } return ®Data; }