qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Amos Kong <akong@redhat.com>
To: Anthony Liguori <aliguori@us.ibm.com>
Cc: dallan@redhat.com, gleb@redhat.com, libvir-list@redhat.com,
	seabios@seabios.org, qemu-devel@nongnu.org, kevin@koconnor.net,
	laine@redhat.com
Subject: Re: [Qemu-devel] [RFC] introduce a general query-config cmd
Date: Mon, 4 Mar 2013 18:20:15 +0800	[thread overview]
Message-ID: <20130304102015.GB10725@t430s.nay.redhat.com> (raw)
In-Reply-To: <20130128031934.GA3986@t430s.nay.redhat.com>

On Mon, Jan 28, 2013 at 11:19:34AM +0800, Amos Kong wrote:
> On Wed, Jan 23, 2013 at 06:41:44PM +0800, Amos Kong wrote:
> > On Tue, Jan 22, 2013 at 12:26:03PM -0600, Anthony Liguori wrote:
> > > Eric Blake <eblake@redhat.com> writes:
> > > > On 01/22/2013 08:52 AM, Amos Kong wrote:
> > > >>>>
> > > >>>> Libvirt will need to expose an attribute that lets the user control
> > > >>>> whether to use this new option; how do we probe via QMP whether the
> > > >>>> new
> > > >>>> -boot strict=on command-line option is available?
> > > >>>
> > > >>> Hi all,
> > > >>>
> > > >>> How about add new info/query command?
> > > >>>
> > > >>> (hmp) info strict-boot
> > > >>>       on
> > > >>>
> > > >>> (qmp) {"execute": "query-strict-boot"}
> > > >>>       {"return": {"state": true}}
> > > >> 
> > > >> It might be not a good solution, I already updated qemu-options.hx,
> > > >> we can check help message to know if this new option is added or not.
> > > >
> > > > Having libvirt probe the -help output is out of the question.  We
> > > > already declared that for qemu 1.3 and beyond, ALL command line behavior
> > > > must ALSO be probe-able via QMP.  I think Anthony had a trick for
> > > > testing for existence of various command line options without needing to
> > > > add a new query-strict-boot command, but I don't remember what that
> > > > trick was.
> > > 
> > > We need a generic query-config-schema command.
> > 
> > 
> > Hi all,
> > 
> > The config info is included in qemu-options.def, current
> > help() defines QEMU_OPTIONS_GENERATE_HELP, and includes
> > qemu-options-wrapper.h,  DEF macro will output the help 
> > message of options to the stdio.
> > 
> > I tried to add two branches in qemu-options-wrapper.h, which
> > are used to generate two string arraies (one for option name,
> > one for help message)
> > 
> > Thy help message is too long, it's failed to output all message to
> > hmp monitor, always got a segfault, the max limitation maybe reached.
> > It's more clear to only output help message of one option,
> > 
> > eg: {"execute": "query-config", "arguments" : {"name": "boot"}}
> > 
> > {"return": {"config": "-boot [order=drives][,once=drives][,menu=on|off]\n
> >   [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]\n
> >   'drives': floppy (a), hard disk (c), CD-ROM (d), network (n)\n
> >   'sp_name': the file's name that would be passed to bios as logo picture, if menu=on\n
> >   'sp_time': the period that splash picture last if menu=on, unit is ms\n
> >   'rb_timeout': the timeout before guest reboot when boot failed, unit is ms\n"}}
> > 
> > But info command of hmp doesn't support parameter
> >   (eg: (hmp) info config boot)
>  
> Hi Anthony,
> 
> As we talked in IRC, you will send a patch to resolve the query issue.
> Can you post patch out when you have time? I will review it.

Anthony, ping :)

[1] http://lists.nongnu.org/archive/html/qemu-devel/2013-01/msg01259.html
[2] http://lists.nongnu.org/archive/html/qemu-devel/2013-01/msg05167.html
 
> Thanks, Amos
>  
> > Q1) Is my patch ok for resolve the issue in last email (libvirt can check
> > the help message of each option)?
> > 
> > Q2) Can we only added a command for qmp monitor?
> > 
> > Q3) Is it ok to output all help message for hmp (info config)?
> > 
> > Q4) query-config or query-config-schema ?
> > 
> > 
> > diff --git a/hmp-commands.hx b/hmp-commands.hx
> > index 010b8c9..13d1840 100644
> > --- a/hmp-commands.hx
> > +++ b/hmp-commands.hx
> > @@ -1552,6 +1552,8 @@ show the vnc server status
> >  show the current VM name
> >  @item info uuid
> >  show the current VM UUID
> > +@item info config
> > +show config
> >  @item info cpustats
> >  show CPU statistics
> >  @item info usernet
> > diff --git a/hmp.c b/hmp.c
> > index 9e9e624..c0d84d1 100644
> > --- a/hmp.c
> > +++ b/hmp.c
> > @@ -98,6 +98,17 @@ void hmp_info_uuid(Monitor *mon)
> >      qapi_free_UuidInfo(info);
> >  }
> >  
> > +void hmp_info_config(Monitor *mon)
> > +{
> > +    ConfigInfo *info;
> > +
> > +    /* Fixed ME: hmp info command doesn't support parameter */
> > +
> > +    info = qmp_query_config("boot", NULL);
> > +    monitor_printf(mon, "%s\n", info->config);
> > +    qapi_free_ConfigInfo(info);
> > +}
> > +
> >  void hmp_info_chardev(Monitor *mon)
> >  {
> >      ChardevInfoList *char_info, *info;
> > diff --git a/hmp.h b/hmp.h
> > index 21f3e05..f217a8c 100644
> > --- a/hmp.h
> > +++ b/hmp.h
> > @@ -23,6 +23,7 @@ void hmp_info_version(Monitor *mon);
> >  void hmp_info_kvm(Monitor *mon);
> >  void hmp_info_status(Monitor *mon);
> >  void hmp_info_uuid(Monitor *mon);
> > +void hmp_info_config(Monitor *mon);
> >  void hmp_info_chardev(Monitor *mon);
> >  void hmp_info_mice(Monitor *mon);
> >  void hmp_info_migrate(Monitor *mon);
> > diff --git a/monitor.c b/monitor.c
> > index 9cf419b..6f331fa 100644
> > --- a/monitor.c
> > +++ b/monitor.c
> > @@ -2661,6 +2661,13 @@ static mon_cmd_t info_cmds[] = {
> >          .help       = "show the current VM UUID",
> >          .mhandler.info = hmp_info_uuid,
> >      },
> > +    {
> > +        .name       = "config",
> > +        .args_type  = "",
> > +        .params     = "",
> > +        .help       = "show the config",
> > +        .mhandler.info = hmp_info_config,
> > +    },
> >  #if defined(TARGET_PPC)
> >      {
> >          .name       = "cpustats",
> > diff --git a/qapi-schema.json b/qapi-schema.json
> > index 5dfa052..8c46d57 100644
> > --- a/qapi-schema.json
> > +++ b/qapi-schema.json
> > @@ -3017,3 +3017,23 @@
> >  # Since: 1.3.0
> >  ##
> >  { 'command': 'nbd-server-stop' }
> > +
> > +##
> > +# @ConfigInfo:
> > +#
> > +# Commandline configration information.
> > +#
> > +##
> > +{ 'type': 'ConfigInfo', 'data': {'config': 'str'} }
> > +
> > +##
> > +# @query-config
> > +#
> > +# Query configuration information of one option
> > +#
> > +# @name: option name
> > +#
> > +# Returns: configuration information.
> > +#
> > +##
> > +{'command': 'query-config', 'data': {'name': 'str'}, 'returns': 'ConfigInfo'}
> > diff --git a/qemu-options-wrapper.h b/qemu-options-wrapper.h
> > index 13bfea0..97b44fb 100644
> > --- a/qemu-options-wrapper.h
> > +++ b/qemu-options-wrapper.h
> > @@ -18,6 +18,22 @@
> >  
> >  #define DEFHEADING(text) ARCHHEADING(text, QEMU_ARCH_ALL)
> >  
> > +#elif defined(QEMU_OPTIONS_GENERATE_CONFIG)
> > +
> > +#define DEF(option, opt_arg, opt_enum, opt_help, arch_mask)    \
> > +      opt_help,
> > +
> > +#define DEFHEADING(text)
> > +#define ARCHHEADING(text, arch_mask)
> > +
> > +#elif defined(QEMU_OPTIONS_GENERATE_NAME)
> > +
> > +#define DEF(option, opt_arg, opt_enum, opt_help, arch_mask)    \
> > +      option,
> > +
> > +#define DEFHEADING(text)
> > +#define ARCHHEADING(text, arch_mask)
> > +
> >  #elif defined(QEMU_OPTIONS_GENERATE_OPTIONS)
> >  
> >  #define DEF(option, opt_arg, opt_enum, opt_help, arch_mask)     \
> > diff --git a/qmp-commands.hx b/qmp-commands.hx
> > index 5c692d0..ed42525 100644
> > --- a/qmp-commands.hx
> > +++ b/qmp-commands.hx
> > @@ -2339,7 +2339,30 @@ EQMP
> >          .args_type  = "",
> >          .mhandler.cmd_new = qmp_marshal_input_query_uuid,
> >      },
> > +SQMP
> > +query-config
> > +------------
> > +
> > +Show config.
> > +
> > +- "Config": config
> > +
> > +Example:
> > +-> {"execute": "query-config", "arguments" : {"name": "boot"}}
> > +<- {"return": {"config": "-boot [order=drives][,once=drives][,menu=on|off]\n
> > +  [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]\n
> > +  'drives': floppy (a), hard disk (c), CD-ROM (d), network (n)\n
> > +  'sp_name': the file's name that would be passed to bios as logo picture, if menu=on\n
> > +  'sp_time': the period that splash picture last if menu=on, unit is ms\n
> > +  'rb_timeout': the timeout before guest reboot when boot failed, unit is ms\n"}}
> > +
> > +EQMP
> >  
> > +    {
> > +        .name       = "query-config",
> > +        .args_type  = "name:s",
> > +        .mhandler.cmd_new = qmp_marshal_input_query_config,
> > +    },
> >  SQMP
> >  query-migrate
> >  -------------
> > diff --git a/qmp.c b/qmp.c
> > index 55b056b..6a3a13a 100644
> > --- a/qmp.c
> > +++ b/qmp.c
> > @@ -24,6 +24,7 @@
> >  #include "hw/qdev.h"
> >  #include "sysemu/blockdev.h"
> >  #include "qom/qom-qobject.h"
> > +#include "qemu-options.h"
> >  
> >  NameInfo *qmp_query_name(Error **errp)
> >  {
> > @@ -78,6 +79,31 @@ UuidInfo *qmp_query_uuid(Error **errp)
> >      return info;
> >  }
> >  
> > +ConfigInfo *qmp_query_config(const char *name, Error **errp)
> > +{
> > +    ConfigInfo *info = g_malloc0(sizeof(*info));
> > +
> > +    char const *optionstr[] = {
> > +#define QEMU_OPTIONS_GENERATE_NAME
> > +#include "qemu-options-wrapper.h"
> > +    };
> > +
> > +    char const *configstr[] = {
> > +#define QEMU_OPTIONS_GENERATE_CONFIG
> > +#include "qemu-options-wrapper.h"
> > +    };
> > +
> > +    int i;
> > +    for (i=0; i < sizeof(optionstr) / sizeof(char *); i++) {
> > +        if (!strcmp(name, optionstr[i])) {
> > +            info->config = g_strdup(configstr[i]);
> > +            break;
> > +        }
> > +    }
> > +
> > +    return info;
> > +}
> > +
> >  void qmp_quit(Error **err)
> >  {
> >      no_shutdown = 0;

      parent reply	other threads:[~2013-03-04 10:20 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-09  7:34 [Qemu-devel] [Qemu PATCH] add a boot option to do strict boot Amos Kong
2013-01-09  7:54 ` Gleb Natapov
2013-01-09  8:39 ` [Qemu-devel] [Qemu PATCH v2] " Amos Kong
2013-01-09  9:56   ` Gleb Natapov
2013-01-09 15:14   ` Eric Blake
2013-01-09 15:22     ` [Qemu-devel] [libvirt] " Daniel P. Berrange
2013-01-09 17:28       ` Laine Stump
2013-01-09 17:46         ` Gleb Natapov
2013-01-09 15:52     ` [Qemu-devel] " Amos Kong
     [not found]     ` <1974277572.9315720.1358868212597.JavaMail.root@redhat.com>
     [not found]       ` <20130122155229.GA9465@t430s.nay.redhat.com>
     [not found]         ` <50FEB79E.1040206@redhat.com>
     [not found]           ` <878v7ldqh0.fsf@codemonkey.ws>
     [not found]             ` <20130123104144.GA2419@t430s.nay.redhat.com>
     [not found]               ` <20130128031934.GA3986@t430s.nay.redhat.com>
2013-03-04 10:20                 ` Amos Kong [this message]

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=20130304102015.GB10725@t430s.nay.redhat.com \
    --to=akong@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=dallan@redhat.com \
    --cc=gleb@redhat.com \
    --cc=kevin@koconnor.net \
    --cc=laine@redhat.com \
    --cc=libvir-list@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=seabios@seabios.org \
    /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).