[libvirt] Question, how to use virDomainQemuMonitorCommand()
Daniel P. Berrange
berrange at redhat.com
Thu Sep 9 13:07:09 UTC 2010
On Thu, Sep 09, 2010 at 08:52:13AM -0400, Chris Lalancette wrote:
> On 09/09/10 - 04:52:25PM, Lai Jiangshan wrote:
> > On 09/07/2010 09:22 PM, Chris Lalancette wrote:
> > > On 09/07/10 - 04:08:13PM, Lai Jiangshan wrote:
> > >> Hi, Chris,
> > >>
> > >> I saw virDomainQemuMonitorCommand() in libvirt-qemu.c,
> > >> I think it will help me to send arbitrary qemu-monitor command to
> > >> qemu via libvirtd.
> > >>
> > >> But how can I use virDomainQemuMonitorCommand()?
> > >> Can I use it by just using current tools(virsh or other) without writing any code?
> > >
> > > Unfortunately, no. There is a bug in the current virsh command that prevents
> > > it from properly parsing the command-lines necessary to send monitor commands
> > > to the qemu monitor. Until we fix that bug, we won't push the support into
> > > virsh.
> > >
> >
> > Thanks,
> >
> > We need this feature, could you tell me the detail of the bug,
> > we will try to fix it or do assists.
>
> I've outlined it before on this list, but the gist of it is that the way that
> virsh parses command-line arguments loses the formatting. Thus, if you were
> enter a command like:
>
> # virsh qemu-monitor-command f13guest "info cpus"
>
> Then virsh main() will get 4 arguments:
>
> argv[0] = "virsh";
> argv[1] = "qemu-monitor-command";
> argv[2] = "f13guest";
> argv[3] = "info cpus";
>
> So far, all is good. However, during the parsing of these command-line
> arguments, virsh takes all of these arguments and smashes them back together
> as a single string:
>
> command = "virsh qemu-monitor-command f13guest info cpus";
>
> And then it reparses the whole thing. Notice that we've lost the quoting,
> though, so now it's an invalid command.
>
> The problem is further complicated by some of the other features of virsh,
> including the support for separating multiple commands with semicolons. For
> example, the following is a legal command:
>
> # virsh 'define D.xml; dumpxml D'
>
> In any case, the answer is probably to re-write the command-line parsing of
> virsh to not lose quoting. I have not had time to do this, so if you have
> the time to look at it and make it work, patches are definitely appreciated!
While re-writing the command line mashing to not loose quotes would be
nice, the more obvious fix is to not mash all the args back into a
string at all. The virsh command ultimately wants char **argv, and we
already have char **argv. So doing a char ** -> char * -> char **
conversion is just insanity.
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list