All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.