Commit 13a286d5 authored by Michael Roth's avatar Michael Roth Committed by Luiz Capitulino
Browse files

guest agent: command state class

parent ac32c780
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -182,6 +182,8 @@ test-visitor: test-visitor.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o $
test-qmp-commands.o: $(addprefix $(qapi-dir)/, test-qapi-types.c test-qapi-types.h test-qapi-visit.c test-qapi-visit.h test-qmp-marshal.c test-qmp-commands.h) $(qapi-obj-y)
test-qmp-commands: test-qmp-commands.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o $(qapi-obj-y) error.o osdep.o qemu-malloc.o $(oslib-obj-y) qjson.o json-streamer.o json-lexer.o json-parser.o qerror.o qemu-error.o qemu-tool.o $(qapi-dir)/test-qapi-visit.o $(qapi-dir)/test-qapi-types.o $(qapi-dir)/test-qmp-marshal.o module.o

QGALIB=qga/guest-agent-command-state.o

QEMULIBS=libhw32 libhw64 libuser libdis libdis-user

clean:
@@ -190,7 +192,7 @@ clean:
	rm -f qemu-options.def
	rm -f *.o *.d *.a *.lo $(TOOLS) TAGS cscope.* *.pod *~ */*~
	rm -Rf .libs
	rm -f slirp/*.o slirp/*.d audio/*.o audio/*.d block/*.o block/*.d net/*.o net/*.d fsdev/*.o fsdev/*.d ui/*.o ui/*.d qapi/*.o qapi/*.d
	rm -f slirp/*.o slirp/*.d audio/*.o audio/*.d block/*.o block/*.d net/*.o net/*.d fsdev/*.o fsdev/*.d ui/*.o ui/*.d qapi/*.o qapi/*.d qga/*.o qga/*.d
	rm -f qemu-img-cmds.h
	rm -f trace.c trace.h trace.c-timestamp trace.h-timestamp
	rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp
+1 −0
Original line number Diff line number Diff line
@@ -3487,6 +3487,7 @@ DIRS="$DIRS pc-bios/spapr-rtas"
DIRS="$DIRS roms/seabios roms/vgabios"
DIRS="$DIRS fsdev ui"
DIRS="$DIRS qapi"
DIRS="$DIRS qga"
FILES="Makefile tests/Makefile"
FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit"
FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
+73 −0
Original line number Diff line number Diff line
/*
 * QEMU Guest Agent command state interfaces
 *
 * Copyright IBM Corp. 2011
 *
 * Authors:
 *  Michael Roth      <mdroth@linux.vnet.ibm.com>
 *
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
 * See the COPYING file in the top-level directory.
 */
#include <glib.h>
#include "qga/guest-agent-core.h"

struct GACommandState {
    GSList *groups;
};

typedef struct GACommandGroup {
    void (*init)(void);
    void (*cleanup)(void);
} GACommandGroup;

/* handle init/cleanup for stateful guest commands */

void ga_command_state_add(GACommandState *cs,
                          void (*init)(void),
                          void (*cleanup)(void))
{
    GACommandGroup *cg = qemu_mallocz(sizeof(GACommandGroup));
    cg->init = init;
    cg->cleanup = cleanup;
    cs->groups = g_slist_append(cs->groups, cg);
}

static void ga_command_group_init(gpointer opaque, gpointer unused)
{
    GACommandGroup *cg = opaque;

    g_assert(cg);
    if (cg->init) {
        cg->init();
    }
}

void ga_command_state_init_all(GACommandState *cs)
{
    g_assert(cs);
    g_slist_foreach(cs->groups, ga_command_group_init, NULL);
}

static void ga_command_group_cleanup(gpointer opaque, gpointer unused)
{
    GACommandGroup *cg = opaque;

    g_assert(cg);
    if (cg->cleanup) {
        cg->cleanup();
    }
}

void ga_command_state_cleanup_all(GACommandState *cs)
{
    g_assert(cs);
    g_slist_foreach(cs->groups, ga_command_group_cleanup, NULL);
}

GACommandState *ga_command_state_new(void)
{
    GACommandState *cs = qemu_mallocz(sizeof(GACommandState));
    cs->groups = NULL;
    return cs;
}

qga/guest-agent-core.h

0 → 100644
+25 −0
Original line number Diff line number Diff line
/*
 * QEMU Guest Agent core declarations
 *
 * Copyright IBM Corp. 2011
 *
 * Authors:
 *  Adam Litke        <aglitke@linux.vnet.ibm.com>
 *  Michael Roth      <mdroth@linux.vnet.ibm.com>
 *
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
 * See the COPYING file in the top-level directory.
 */
#include "qapi/qmp-core.h"
#include "qemu-common.h"

#define QGA_VERSION "1.0"

typedef struct GACommandState GACommandState;

void ga_command_state_add(GACommandState *cs,
                          void (*init)(void),
                          void (*cleanup)(void));
void ga_command_state_init_all(GACommandState *cs);
void ga_command_state_cleanup_all(GACommandState *cs);
GACommandState *ga_command_state_new(void);