qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Michael Roth <mdroth@linux.vnet.ibm.com>
Cc: aliguori@linux.vnet.ibm.com, ryanh@us.ibm.com,
	agl@linux.vnet.ibm.com, qemu-devel@nongnu.org,
	abeekhof@redhat.com
Subject: Re: [Qemu-devel] [RFC][PATCH 07/10] virtagent: add getdmesg RPC
Date: Mon, 25 Oct 2010 16:42:33 -0500	[thread overview]
Message-ID: <4CC5F9C9.4040402@codemonkey.ws> (raw)
In-Reply-To: <1287773165-24855-8-git-send-email-mdroth@linux.vnet.ibm.com>

On 10/22/2010 01:46 PM, Michael Roth wrote:
> Add RPC to view guest dmesg output.
>
> Signed-off-by: Michael Roth<mdroth@linux.vnet.ibm.com>
> ---
>   virtagent-daemon.c |   45 +++++++++++++++++++++++++++++++++++++++++++++
>   virtagent-daemon.h |    1 +
>   2 files changed, 46 insertions(+), 0 deletions(-)
>
> diff --git a/virtagent-daemon.c b/virtagent-daemon.c
> index fad0f64..6aaa987 100644
> --- a/virtagent-daemon.c
> +++ b/virtagent-daemon.c
> @@ -72,6 +72,48 @@ EXIT_CLOSE_BAD:
>       return result;
>   }
>
> +/* getdmesg(): return dmesg output
> + * rpc return values:
> + *   - dmesg output as a string
> + */
> +static xmlrpc_value *getdmesg(xmlrpc_env *env,
> +                              xmlrpc_value *param,
> +                              void *user_data)
> +{
> +    char *dmesg_buf = NULL, cmd[256];
> +    char c;
> +    int pos = 0;
> +    xmlrpc_value *result = NULL;
> +    FILE *pipe;
> +
> +    dmesg_buf = qemu_mallocz(VA_DMESG_LEN + 2048);
> +    sprintf(cmd, "dmesg -s %d", VA_DMESG_LEN);
> +
> +    //pipe = popen(cmd, "r");
> +    pipe = popen("dmesg -s 16000", "r");
> +    if (pipe == NULL) {
> +        LOG("popen failed: %s", strerror(errno));
> +        xmlrpc_faultf(env, "popen failed: %s", strerror(errno));
> +        goto EXIT_NOCLOSE;
> +    }
> +
> +    while ((c = fgetc(pipe)) != EOF&&  pos<  VA_DMESG_LEN) {
> +        dmesg_buf[pos] = c;
> +        pos++;
> +    }
>    

fgetc seems a bit odd here.  Why not fread?

Regards,

Anthony Liguori

> +    dmesg_buf[pos++] = '\0';
> +    TRACE("dmesg:\n%s", dmesg_buf);
> +
> +    result = xmlrpc_build_value(env, "s", dmesg_buf);
> +    pclose(pipe);
> +EXIT_NOCLOSE:
> +    if (dmesg_buf) {
> +        qemu_free(dmesg_buf);
> +    }
> +
> +    return result;
> +}
> +
>   static int va_accept(int listen_fd) {
>       struct sockaddr_in saddr;
>       struct sockaddr *addr;
> @@ -101,6 +143,8 @@ typedef struct RPCFunction {
>   static RPCFunction guest_functions[] = {
>       { .func = getfile,
>         .func_name = "getfile" },
> +    { .func = getdmesg,
> +      .func_name = "getdmesg" },
>       { NULL, NULL }
>   };
>   static RPCFunction host_functions[] = {
> @@ -165,6 +209,7 @@ int va_server_loop(int listen_fd, bool is_host)
>           XMLRPC_MEMBLOCK_FREE(char, rpc_response);
>   out:
>           closesocket(fd);
> +        xmlrpc_env_clean(&env);
>       }
>
>       return 0;
> diff --git a/virtagent-daemon.h b/virtagent-daemon.h
> index bb197d0..adcbc9a 100644
> --- a/virtagent-daemon.h
> +++ b/virtagent-daemon.h
> @@ -16,5 +16,6 @@
>   #define HOST_AGENT_PATH "/tmp/virtagent-host.sock"
>   #define VA_GETFILE_MAX 1<<  30
>   #define VA_FILEBUF_LEN 16384
> +#define VA_DMESG_LEN 16384
>
>   int va_server_loop(int listen_fd, bool is_host);
>    

  reply	other threads:[~2010-10-25 21:42 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-22 18:45 [Qemu-devel] [RFC][PATCH 00/10] virtagent: host/guest RPC communication agent Michael Roth
2010-10-22 18:45 ` [Qemu-devel] [RFC][PATCH 01/10] virtagent: add common rpc transport defs Michael Roth
2010-10-25 21:39   ` Anthony Liguori
2010-10-25 21:54     ` malc
2010-10-25 22:02       ` Anthony Liguori
2010-10-25 22:32         ` malc
2010-10-22 18:45 ` [Qemu-devel] [RFC][PATCH 02/10] virtagent: base definitions for host/guest RPC daemon Michael Roth
2010-10-22 18:45 ` [Qemu-devel] [RFC][PATCH 03/10] virtagent: qemu-vp, integrate virtagent daemon Michael Roth
2010-10-22 18:45 ` [Qemu-devel] [RFC][PATCH 04/10] virtagent: base RPC client definitions Michael Roth
2010-10-22 18:46 ` [Qemu-devel] [RFC][PATCH 05/10] virtagent: add getfile RPC Michael Roth
2010-10-22 18:46 ` [Qemu-devel] [RFC][PATCH 06/10] virtagent: add agent_viewfile command Michael Roth
2010-10-22 18:46 ` [Qemu-devel] [RFC][PATCH 07/10] virtagent: add getdmesg RPC Michael Roth
2010-10-25 21:42   ` Anthony Liguori [this message]
2010-10-22 18:46 ` [Qemu-devel] [RFC][PATCH 08/10] virtagent: add agent_viewdmesg command Michael Roth
2010-10-22 18:46 ` [Qemu-devel] [RFC][PATCH 09/10] virtagent: Makefile/configure changes to build virtagent bits Michael Roth
2010-10-22 18:46 ` [Qemu-devel] [RFC][PATCH 10/10] virtproxy: add compat defs for linking against vl.c Michael Roth
2010-10-23 11:31 ` [Qemu-devel] Re: [RFC][PATCH 00/10] virtagent: host/guest RPC communication agent Andrew Beekhof
2010-10-23 14:41   ` Michael Roth
2010-10-25  9:46     ` Andrew Beekhof
2010-10-25 10:30 ` Andrew Beekhof
2010-10-25 17:06   ` Michael Roth
2010-10-26  7:14     ` Andrew Beekhof
2010-10-25 21:28   ` Anthony Liguori
2010-10-26  7:27     ` Andrew Beekhof

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CC5F9C9.4040402@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=abeekhof@redhat.com \
    --cc=agl@linux.vnet.ibm.com \
    --cc=aliguori@linux.vnet.ibm.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=ryanh@us.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).