qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Converting existing name=value,... arguments to QMP


From: Markus Armbruster
Subject: [Qemu-devel] Converting existing name=value,... arguments to QMP
Date: Thu, 04 Feb 2010 18:43:22 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

The human monitor uses positional arguments.  This is fine; nobody wants
to type "info item=network" instead of "info network".

QMP uses named arguments.  Also fine.

Internally, we use named arguments: we pass them as QDict to the command
handler.  This involves associating positional arguments with names.
Works fine.

There's one little mess hiding in a corner, though: a few commands abuse
a positional argument to get named arguments.  That argument has the
form of a "parameter string": NAME=VALUE,...  For instance:

    pci_add auto nic model=e1000,macaddr=00:11:22:33:44:55

If we convert this naively, we get in QMP:

   { "execute": "pci_add",
     "arguments": { "pci_addr": "auto",
                    "type": "nic",
                    "opts": "model=e1000,macaddr=00:11:22:33:44:55" } }

which is silly.  Oops, we already did.

A more appropriate encoding would be

   { "execute": "pci_add",
     "arguments": { "pci_addr": "auto",
                    "type": "nic",
                    "model": "e1000",
                    "macaddr": "00:11:22:33:44:55" } }

or maybe

   { "execute": "pci_add",
     "arguments": { "pci_addr": "auto",
                    "type": "nic",
                    "opts": { "model": "e1000",
                              "macaddr": "00:11:22:33:44:55" } } }

Done right, this involves lifting the parsing of the parameter string
from the bowels of the handler up into the human monitor code.  Could be
somewhat messy.

Parsing should be done with qemu_opts_parse(), of course.  We need a way
to declare which QemuOptList to use.  Fortunately, we can look them up
by name.  We could create argument type 'O', followed by the name, with
some suitable delimiter, say parenthesis.  pci_add's args_type changes
from

        .args_type  = "pci_addr:s,type:s,opts:s?",

to

        .args_type  = "pci_addr:s,type:s,opts:O(net)",

Opinions?




reply via email to

[Prev in Thread] Current Thread [Next in Thread]