From patchwork Thu Feb 2 19:58:55 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Roth X-Patchwork-Id: 139202 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 20FA9B71B7 for ; Fri, 3 Feb 2012 07:00:22 +1100 (EST) Received: from localhost ([::1]:51258 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rt2pF-0002gm-VQ for incoming@patchwork.ozlabs.org; Thu, 02 Feb 2012 15:00:09 -0500 Received: from eggs.gnu.org ([140.186.70.92]:36839) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rt2p3-0002UR-TA for qemu-devel@nongnu.org; Thu, 02 Feb 2012 14:59:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rt2oz-0002Hy-Jv for qemu-devel@nongnu.org; Thu, 02 Feb 2012 14:59:57 -0500 Received: from mout.perfora.net ([74.208.4.194]:61542) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rt2oz-0002HI-DS for qemu-devel@nongnu.org; Thu, 02 Feb 2012 14:59:53 -0500 Received: from illuin.austin.ibm.com ([32.97.110.59]) by mrelay.perfora.net (node=mrus0) with ESMTP (Nemesis) id 0M8Oqo-1SnV5O28Je-00w0re; Thu, 02 Feb 2012 14:59:50 -0500 From: Michael Roth To: qemu-devel@nongnu.org Date: Thu, 2 Feb 2012 13:58:55 -0600 Message-Id: <1328212740-15799-4-git-send-email-mdroth@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1328212740-15799-1-git-send-email-mdroth@linux.vnet.ibm.com> References: <1328212740-15799-1-git-send-email-mdroth@linux.vnet.ibm.com> X-Provags-ID: V02:K0:4Nh9YHAkPJ2ZvadlCL6+evkWMkdN/Vqldqu05d6hUI0 8EyH5Nrrrb+MJnqdZ67NKuZp26tFZzddcBFa6z+ZkTkJa9KM9C w8Fa+eSmZBd0PjhkqL6AVtMoGqgpLLFIMyVo6jdoOncuM/RjeE zCaFXVCV2CENEK3SqciEqZM2WVxtuG6w3Jm7+O9na2vaoSYDDV T/Yh2CTfq4ehIuMoBXlXiyDUIlQCTKGLw32Nz7Sq2j0ljTwYjC e0yfos191QECLJOipQ1LuwBnLWIirTTDTGSWl7AMzEctXJddxf Fj6Kxqeuw89gY4Bk02TWl/SL9xVIUdk+2Rc+vYWO6R30SjKpa9 6rO/Z7iJSwsYRa+EuUhMhQ/m2L0sevhxBZMcefBhyTFswt29tx nzyGOE8Lyce9MjoR6typ1z2mYDXFVDNXkQ= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 74.208.4.194 Cc: ghammer@redhat.com, aliguori@us.ibm.com, mdroth@linux.vnet.ibm.com, lcapitulino@redhat.com Subject: [Qemu-devel] [PATCH v2 3/8] qemu-ga: separate out common commands from posix-specific ones X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Many of the current RPC implementations are very much POSIX-specific and require complete re-writes for Windows. There are however a small set of core guest agent commands that are common to both, and other commands such as guest-file-* which *may* be portable. So we introduce commands.c for the latter, and will rename guest-agent-commands.c to commands-posix.c in a future commit. Windows implementations will go in commands-win32.c, eventually. Signed-off-by: Michael Roth --- Makefile.objs | 2 +- qga/commands.c | 73 ++++++++++++++++++++++++++++++++++++++++++++ qga/guest-agent-commands.c | 59 +----------------------------------- qga/guest-agent-core.h | 1 + 4 files changed, 76 insertions(+), 59 deletions(-) create mode 100644 qga/commands.c diff --git a/Makefile.objs b/Makefile.objs index 27ff919..d70cebe 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -424,7 +424,7 @@ common-obj-y += qmp.o hmp.o ###################################################################### # guest agent -qga-nested-y = guest-agent-commands.o guest-agent-command-state.o +qga-nested-y = commands.o guest-agent-commands.o guest-agent-command-state.o qga-nested-y += channel-posix.o qga-obj-y = $(addprefix qga/, $(qga-nested-y)) qga-obj-y += qemu-ga.o qemu-sockets.o module.o qemu-option.o diff --git a/qga/commands.c b/qga/commands.c new file mode 100644 index 0000000..b27407d --- /dev/null +++ b/qga/commands.c @@ -0,0 +1,73 @@ +/* + * QEMU Guest Agent common/cross-platform command implementations + * + * Copyright IBM Corp. 2012 + * + * Authors: + * Michael Roth + * + * 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 +#include "qga/guest-agent-core.h" +#include "qga-qmp-commands.h" +#include "qerror.h" + +/* Note: in some situations, like with the fsfreeze, logging may be + * temporarilly disabled. if it is necessary that a command be able + * to log for accounting purposes, check ga_logging_enabled() beforehand, + * and use the QERR_QGA_LOGGING_DISABLED to generate an error + */ +void slog(const gchar *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + g_logv("syslog", G_LOG_LEVEL_INFO, fmt, ap); + va_end(ap); +} + +int64_t qmp_guest_sync(int64_t id, Error **errp) +{ + return id; +} + +void qmp_guest_ping(Error **err) +{ + slog("guest-ping called"); +} + +struct GuestAgentInfo *qmp_guest_info(Error **err) +{ + GuestAgentInfo *info = g_malloc0(sizeof(GuestAgentInfo)); + GuestAgentCommandInfo *cmd_info; + GuestAgentCommandInfoList *cmd_info_list; + char **cmd_list_head, **cmd_list; + + info->version = g_strdup(QGA_VERSION); + + cmd_list_head = cmd_list = qmp_get_command_list(); + if (*cmd_list_head == NULL) { + goto out; + } + + while (*cmd_list) { + cmd_info = g_malloc0(sizeof(GuestAgentCommandInfo)); + cmd_info->name = strdup(*cmd_list); + cmd_info->enabled = qmp_command_is_enabled(cmd_info->name); + + cmd_info_list = g_malloc0(sizeof(GuestAgentCommandInfoList)); + cmd_info_list->value = cmd_info; + cmd_info_list->next = info->supported_commands; + info->supported_commands = cmd_info_list; + + g_free(*cmd_list); + cmd_list++; + } + +out: + g_free(cmd_list_head); + return info; +} diff --git a/qga/guest-agent-commands.c b/qga/guest-agent-commands.c index a09c8ca..126127a 100644 --- a/qga/guest-agent-commands.c +++ b/qga/guest-agent-commands.c @@ -1,5 +1,5 @@ /* - * QEMU Guest Agent commands + * QEMU Guest Agent POSIX-specific command implementations * * Copyright IBM Corp. 2011 * @@ -30,63 +30,6 @@ static GAState *ga_state; -/* Note: in some situations, like with the fsfreeze, logging may be - * temporarilly disabled. if it is necessary that a command be able - * to log for accounting purposes, check ga_logging_enabled() beforehand, - * and use the QERR_QGA_LOGGING_DISABLED to generate an error - */ -static void slog(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - g_logv("syslog", G_LOG_LEVEL_INFO, fmt, ap); - va_end(ap); -} - -int64_t qmp_guest_sync(int64_t id, Error **errp) -{ - return id; -} - -void qmp_guest_ping(Error **err) -{ - slog("guest-ping called"); -} - -struct GuestAgentInfo *qmp_guest_info(Error **err) -{ - GuestAgentInfo *info = g_malloc0(sizeof(GuestAgentInfo)); - GuestAgentCommandInfo *cmd_info; - GuestAgentCommandInfoList *cmd_info_list; - char **cmd_list_head, **cmd_list; - - info->version = g_strdup(QGA_VERSION); - - cmd_list_head = cmd_list = qmp_get_command_list(); - if (*cmd_list_head == NULL) { - goto out; - } - - while (*cmd_list) { - cmd_info = g_malloc0(sizeof(GuestAgentCommandInfo)); - cmd_info->name = strdup(*cmd_list); - cmd_info->enabled = qmp_command_is_enabled(cmd_info->name); - - cmd_info_list = g_malloc0(sizeof(GuestAgentCommandInfoList)); - cmd_info_list->value = cmd_info; - cmd_info_list->next = info->supported_commands; - info->supported_commands = cmd_info_list; - - g_free(*cmd_list); - cmd_list++; - } - -out: - g_free(cmd_list_head); - return info; -} - void qmp_guest_shutdown(bool has_mode, const char *mode, Error **err) { int ret; diff --git a/qga/guest-agent-core.h b/qga/guest-agent-core.h index 6148d10..b5dfa5b 100644 --- a/qga/guest-agent-core.h +++ b/qga/guest-agent-core.h @@ -29,3 +29,4 @@ GACommandState *ga_command_state_new(void); bool ga_logging_enabled(GAState *s); void ga_disable_logging(GAState *s); void ga_enable_logging(GAState *s); +void slog(const gchar *fmt, ...);