From patchwork Tue Feb 14 15:15:37 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Roth X-Patchwork-Id: 141162 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 A323BB6FE6 for ; Wed, 15 Feb 2012 05:24:52 +1100 (EST) Received: from localhost ([::1]:54908 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RxN3V-0003bW-QJ for incoming@patchwork.ozlabs.org; Tue, 14 Feb 2012 13:24:45 -0500 Received: from eggs.gnu.org ([140.186.70.92]:51067) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RxK6m-0001T8-1E for qemu-devel@nongnu.org; Tue, 14 Feb 2012 10:16:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RxK6k-0005Ig-Eb for qemu-devel@nongnu.org; Tue, 14 Feb 2012 10:15:55 -0500 Received: from mail-yw0-f45.google.com ([209.85.213.45]:38274) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RxK6k-0005HV-BF for qemu-devel@nongnu.org; Tue, 14 Feb 2012 10:15:54 -0500 Received: by mail-yw0-f45.google.com with SMTP id j63so60901yhj.4 for ; Tue, 14 Feb 2012 07:15:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=lS/bIOUdOt8D54j8++q1H2sjD7zcT8J2QW7RId3A+Ck=; b=kErOHKfBEjIxf3do51PkleHHroRbdbIlHcsl2ywQq499LfWFyBIXGZEMP7koI8i0Ey LYXKHkHgMlNfnRVF+daM7g6r0EHrs4h42kGsqlSiQH26tqa2RX8faa6vBJPUvqyP1Uzm ufoqi9meLMIVotmUscnEwm2cn7pplfLE8iVfg= Received: by 10.60.4.227 with SMTP id n3mr622246oen.67.1329232554102; Tue, 14 Feb 2012 07:15:54 -0800 (PST) Received: from localhost.localdomain ([108.224.40.39]) by mx.google.com with ESMTPS id y3sm5373891obx.4.2012.02.14.07.15.52 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 14 Feb 2012 07:15:53 -0800 (PST) From: Michael Roth To: qemu-devel@nongnu.org Date: Tue, 14 Feb 2012 09:15:37 -0600 Message-Id: <1329232542-30251-4-git-send-email-mdroth@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1329232542-30251-1-git-send-email-mdroth@linux.vnet.ibm.com> References: <1329232542-30251-1-git-send-email-mdroth@linux.vnet.ibm.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.85.213.45 Cc: ghammer@redhat.com, aliguori@us.ibm.com, matsudadik@intellilink.co.jp, lcapitulino@redhat.com Subject: [Qemu-devel] [PATCH v3 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 a9c4d51..0ec5874 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -422,7 +422,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, ...);