open-vm-tools 11.0.0

plugin.h
Go to the documentation of this file.
1 /*********************************************************
2 * Copyright (C) 2008-2019 VMware, Inc. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License as published
6 * by the Free Software Foundation version 2.1 and no later version.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
10 * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public
11 * License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
16 *
17 *********************************************************/
18
19 #ifndef _VMWARE_TOOLS_PLUGIN_H_
20 #define _VMWARE_TOOLS_PLUGIN_H_
21
32 #include <glib.h>
33 #if defined(G_PLATFORM_WIN32)
34 # include <windows.h>
35 # include <objbase.h>
36 #endif
37 #include "vmware/guestrpc/capabilities.h"
38 #include "vmware/tools/guestrpc.h"
39 #include "vmware/tools/utils.h"
40
49 #define VMTOOLSAPP_ERROR(ctx, err) do { \
50 ASSERT((err) != 0); \
51 (ctx)->errorCode = (err); \
52 g_main_loop_quit((ctx)->mainLoop); \
53 } while (0)
54
55
65 #define VMTOOLSAPP_ATTACH_SOURCE(ctx, src, cb, data, destroy) do { \
66 GSource *__src = (src); \
67 g_source_set_callback(__src, (GSourceFunc) (cb), (data), (destroy)); \
68 g_source_attach(__src, g_main_loop_get_context((ctx)->mainLoop)); \
69 } while (0)
70
75 #define TOOLS_IS_MAIN_SERVICE(ctx) (strcmp((ctx)->name, \
76 VMTOOLS_GUEST_SERVICE) == 0)
77
82 #define TOOLS_IS_USER_SERVICE(ctx) (strcmp((ctx)->name, \
83 VMTOOLS_USER_SERVICE) == 0)
84
85 /* Indentation levels for the state log function below. */
86 #define TOOLS_STATE_LOG_ROOT 0
87 #define TOOLS_STATE_LOG_CONTAINER 1
88 #define TOOLS_STATE_LOG_PLUGIN 2
89
100 static inline void
101 ToolsCore_LogState(guint level,
102 const char *fmt,
103 ...)
104 {
105 gchar *indented = g_strdup_printf("%*s%s", 3 * level, "", fmt);
106
107 va_list args;
108 va_start(args, fmt);
109 g_logv("state", G_LOG_LEVEL_INFO, indented, args);
110 va_end(args);
111
112 g_free(indented);
113 }
114
115
127 #define TOOLS_CORE_SIG_CAPABILITIES "tcs_capabilities"
128
136 #define TOOLS_CORE_SIG_CONF_RELOAD "tcs_conf_reload"
137
147 #define TOOLS_CORE_SIG_DUMP_STATE "tcs_dump_state"
148
156 #define TOOLS_CORE_SIG_RESET "tcs_reset"
157
165 #define TOOLS_CORE_SIG_NO_RPC "tcs_no_rpc"
166
179 #define TOOLS_CORE_SIG_SET_OPTION "tcs_set_option"
180
188 #define TOOLS_CORE_SIG_SHUTDOWN "tcs_shutdown"
189
190 #if defined(G_PLATFORM_WIN32)
191
218 #define TOOLS_CORE_SIG_SERVICE_CONTROL "tcs_service_control"
219
220 #endif
221
229 #define TOOLS_CORE_PROP_CTX "tcs_app_ctx"
230
231
241 typedef enum {
242 TOOLS_CORE_API_V1 = 0x1,
243 } ToolsCoreAPI;
244
245
250 typedef struct ToolsAppCtx {
252 ToolsCoreAPI version;
254 const gchar *name;
256 gboolean isVMware;
258 int errorCode;
260 GMainLoop *mainLoop;
262 RpcChannel *rpc;
264 GKeyFile *config;
265 #if defined(G_PLATFORM_WIN32)
266
267 gboolean comInitialized;
268 #else
269
270 int blockFD;
272 int uinputFD;
274 const char **envp;
275 #endif
276
282 gpointer serviceObj;
283 } ToolsAppCtx;
284
285 #if defined(G_PLATFORM_WIN32)
286
293 static inline gboolean
294 ToolsCore_InitializeCOM(ToolsAppCtx *ctx)
295 {
296 if (!ctx->comInitialized) {
297 HRESULT ret = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
298 ctx->comInitialized = SUCCEEDED(ret);
299 if (!ctx->comInitialized) {
300 g_log(ctx->name, G_LOG_LEVEL_WARNING,
301 "COM initialization failed(0x%x)\n", ret);
302 }
303 }
304 return ctx->comInitialized;
305 }
306 #endif
307
308
309 /* Capabilities. */
310
312 typedef enum {
313 TOOLS_CAP_OLD = 0,
314 TOOLS_CAP_OLD_NOVAL = 1,
315 TOOLS_CAP_NEW = 2
316 } ToolsCapabilityType;
317
327 typedef struct ToolsAppCapability {
329 ToolsCapabilityType type;
334 const gchar *name;
339 GuestCapabilities index;
341 guint value;
342 } ToolsAppCapability;
343
344
345 /* Application registration. */
346
348 typedef enum {
352 TOOLS_APP_GUESTRPC = 1,
357 TOOLS_APP_SIGNALS = 2,
363 TOOLS_APP_PROVIDER = 3,
368 TOOLS_SVC_PROPERTY = 4,
369 } ToolsAppType;
370
371
372 struct ToolsPluginData;
373
382 typedef struct ToolsAppProvider {
384 const gchar *name;
391 ToolsAppType regType;
393 size_t regSize;
403 void (*activate)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov, GError **err);
415 gboolean (*registerApp)(ToolsAppCtx *ctx,
416 struct ToolsAppProvider *prov,
417 struct ToolsPluginData *plugin,
418 gpointer reg);
429 void (*shutdown)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov);
442 void (*dumpState)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov, gpointer reg);
443 } ToolsAppProvider;
444
445
456 typedef struct ToolsAppReg {
457 ToolsAppType type;
458 GArray *data;
459 } ToolsAppReg;
460
461
475 typedef struct ToolsServiceProperty {
476 const char *name;
477 } ToolsServiceProperty;
478
479
489 typedef struct ToolsPluginSignalCb {
490 const gchar *signame;
491 gpointer callback;
492 gpointer clientData;
493 } ToolsPluginSignalCb;
494
495
510 typedef struct ToolsPluginData {
512 char const *name;
517 GArray *regs;
548 gboolean (*errorCb)(ToolsAppCtx *ctx,
549 ToolsAppType type,
550 gpointer data,
551 struct ToolsPluginData *plugin);
553 gpointer _private;
554 } ToolsPluginData;
555
561 #if defined(G_PLATFORM_WIN32)
562 # define TOOLS_MODULE_EXPORT VMTOOLS_EXTERN_C __declspec(dllexport)
563 #elif defined(GCC_EXPLICIT_EXPORT)
564 # define TOOLS_MODULE_EXPORT VMTOOLS_EXTERN_C __attribute__((visibility("default")))
565 #else
566 # define TOOLS_MODULE_EXPORT VMTOOLS_EXTERN_C
567 #endif
568
580 typedef ToolsPluginData *(*ToolsPluginOnLoad)(ToolsAppCtx *ctx);
581
584 #endif /* _VMWARE_TOOLS_PLUGIN_H_ */
585
TOOLS_APP_GUESTRPC
Definition: plugin.h:352
ToolsAppProvider::activate
void(* activate)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov, GError **err)
Definition: plugin.h:403
ToolsPluginData::name
const char * name
Definition: plugin.h:512
ToolsAppProvider::regSize
size_t regSize
Definition: plugin.h:393
ToolsAppProvider::dumpState
void(* dumpState)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov, gpointer reg)
Definition: plugin.h:442
ToolsAppCtx::serviceObj
gpointer serviceObj
Definition: plugin.h:282
ToolsAppProvider::registerApp
gboolean(* registerApp)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov, struct ToolsPluginData *plugin, gpointer reg)
Definition: plugin.h:415
ToolsAppReg
Definition: plugin.h:456
ToolsPluginData
Definition: plugin.h:510
ToolsServiceProperty
Definition: plugin.h:475
guestrpc.h
ToolsAppProvider::regType
ToolsAppType regType
Definition: plugin.h:391
ToolsAppProvider
struct ToolsAppProvider ToolsAppProvider
ToolsAppCtx
struct ToolsAppCtx ToolsAppCtx
ToolsAppCtx::version
ToolsCoreAPI version
Definition: plugin.h:252
ToolsAppCapability::name
const gchar * name
Definition: plugin.h:334
ToolsAppProvider
Definition: plugin.h:382
ToolsAppCtx::envp
const char ** envp
Definition: plugin.h:274
TOOLS_SVC_PROPERTY
Definition: plugin.h:368
utils.h
ToolsAppCtx::rpc
RpcChannel * rpc
Definition: plugin.h:262
ToolsAppCtx::mainLoop
GMainLoop * mainLoop
Definition: plugin.h:260
ToolsAppCtx
Definition: plugin.h:250
ToolsAppCtx::config
GKeyFile * config
Definition: plugin.h:264
ToolsAppCapability
Definition: plugin.h:327
ToolsCoreAPI
ToolsCoreAPI
Definition: plugin.h:241
ToolsPluginSignalCb
Definition: plugin.h:489
ToolsCapabilityType
ToolsCapabilityType
Definition: plugin.h:312
ToolsAppCtx::errorCode
int errorCode
Definition: plugin.h:258
ToolsServiceProperty
struct ToolsServiceProperty ToolsServiceProperty
ToolsAppCapability::index
GuestCapabilities index
Definition: plugin.h:339
ToolsPluginSignalCb
struct ToolsPluginSignalCb ToolsPluginSignalCb
TOOLS_APP_SIGNALS
Definition: plugin.h:357
ToolsAppProvider::shutdown
void(* shutdown)(ToolsAppCtx *ctx, struct ToolsAppProvider *prov)
Definition: plugin.h:429
ToolsAppType
ToolsAppType
Definition: plugin.h:348
ToolsAppCtx::uinputFD
int uinputFD
Definition: plugin.h:272
TOOLS_APP_PROVIDER
Definition: plugin.h:363
ToolsAppProvider::name
const gchar * name
Definition: plugin.h:384
ToolsAppReg
struct ToolsAppReg ToolsAppReg
ToolsPluginData::_private
gpointer _private
Definition: plugin.h:553
ToolsAppCtx::blockFD
int blockFD
Definition: plugin.h:270
ToolsPluginData
struct ToolsPluginData ToolsPluginData
ToolsAppCapability
struct ToolsAppCapability ToolsAppCapability
ToolsPluginData::regs
GArray * regs
Definition: plugin.h:517
ToolsAppCapability::value
guint value
Definition: plugin.h:341
ToolsAppCtx::name
const gchar * name
Definition: plugin.h:254
ToolsAppCtx::isVMware
gboolean isVMware
Definition: plugin.h:256
ToolsPluginData::errorCb
gboolean(* errorCb)(ToolsAppCtx *ctx, ToolsAppType type, gpointer data, struct ToolsPluginData *plugin)
Definition: plugin.h:548
ToolsAppCapability::type
ToolsCapabilityType type
Definition: plugin.h:329