From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: aliguori@linux.vnet.ibm.com, agl@linux.vnet.ibm.com,
qemu-devel@nongnu.org, Jes.Sorensen@redhat.com
Subject: Re: [Qemu-devel] [PATCH v6 3/4] guest agent: add guest agent commands schema file
Date: Fri, 08 Jul 2011 16:42:08 -0500 [thread overview]
Message-ID: <4E1779B0.2010605@linux.vnet.ibm.com> (raw)
In-Reply-To: <20110708120801.236944ad@doriath>
On 07/08/2011 10:08 AM, Luiz Capitulino wrote:
> On Tue, 5 Jul 2011 08:21:39 -0500
> Michael Roth<mdroth@linux.vnet.ibm.com> wrote:
>
>>
>> Signed-off-by: Michael Roth<mdroth@linux.vnet.ibm.com>
>> ---
>> qapi-schema-guest.json | 204 ++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 files changed, 204 insertions(+), 0 deletions(-)
>> create mode 100644 qapi-schema-guest.json
>
> I think this should be folded in the next patch.
>
> More comments below.
>
>>
>> diff --git a/qapi-schema-guest.json b/qapi-schema-guest.json
>> new file mode 100644
>> index 0000000..367b42d
>> --- /dev/null
>> +++ b/qapi-schema-guest.json
>> @@ -0,0 +1,204 @@
>> +# *-*- Mode: Python -*-*
>> +
>> +##
>> +# @guest-sync:
>> +#
>> +# Echo back a unique integer value
>> +#
>> +# This is used by clients talking to the guest agent over the
>> +# wire to ensure the stream is in sync and doesn't contain stale
>> +# data from previous client. All guest agent responses should be
>> +# ignored until the provided unique integer value is returned,
>> +# and it is up to the client to handle stale whole or
>> +# partially-delivered JSON text in such a way that this response
>> +# can be obtained.
>> +#
>> +# Such clients should also preceed this command
>> +# with a 0xFF byte to make such the guest agent flushes any
>> +# partially read JSON data from a previous session.
>> +#
>> +# @id: randomly generated 64-bit integer
>> +#
>> +# Returns: The unique integer id passed in by the client
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'command': 'guest-sync'
>> + 'data': { 'id': 'int' },
>> + 'returns': 'int' }
>> +
>> +##
>> +# @guest-ping:
>> +#
>> +# Ping the guest agent, a non-error return implies success
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'command': 'guest-ping' }
>> +
>> +##
>> +# @guest-info:
>> +#
>> +# Get some information about the guest agent.
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'type': 'GuestAgentInfo', 'data': {'version': 'str'} }
>> +{ 'command': 'guest-info',
>> + 'returns': 'GuestAgentInfo' }
>> +
>> +##
>> +# @guest-shutdown:
>> +#
>> +# Initiate guest-activated shutdown. Note: this is an asynchronous
>> +# shutdown request, with no guaruntee of successful shutdown. Errors
>> +# will be logged to guest's syslog.
>> +#
>> +# @mode: "halt", "powerdown", or "reboot"
>> +#
>> +# Returns: Nothing on success
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'command': 'guest-shutdown', 'data': { 'mode': 'str' } }
>
> Shouldn't 'mode' be optional?
>
>> +
>> +##
>> +# @guest-file-open:
>> +#
>> +# Open a file in the guest and retrieve a file handle for it
>> +#
>> +# @filepath: Full path to the file in the guest to open.
>> +#
>> +# @mode: #optional open mode, as per fopen(), "r" is the default.
>> +#
>> +# Returns: Guest file handle on success.
>> +# If @filepath cannot be opened, OpenFileFailed
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'command': 'guest-file-open',
>> + 'data': { 'filepath': 'str', '*mode': 'str' },
>> + 'returns': 'int' }
>
> You can use 'file-path'. Actually, I'd use just 'path'.
>
>> +
>> +##
>> +# @guest-file-read:
>> +#
>> +# Read from an open file in the guest
>> +#
>> +# @filehandle: filehandle returned by guest-file-open
>> +#
>> +# @count: maximum number of bytes to read
>> +#
>> +# Returns: GuestFileRead on success.
>> +# If @filehandle is not open, OpenFileFailed
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'type': 'GuestFileRead',
>> + 'data': { 'count': 'int', 'buf': 'str', 'eof': 'bool' } }
>> +
>> +{ 'command': 'guest-file-read',
>> + 'data': { 'filehandle': 'int', 'count': 'int' },
>> + 'returns': 'GuestFileRead' }
>
> file-handle. Also, we have to say that the returned data is base64-encoded.
>
>> +
>> +##
>> +# @guest-file-write:
>> +#
>> +# Write to an open file in the guest
>> +#
>> +# @filehandle: filehandle returned by guest-file-open
>> +#
>> +# @data_b64: base64-encoded string representing data to be written
>> +#
>> +# @count: bytes to write (actual bytes, after b64-decode)
>> +#
>> +# Returns: GuestFileWrite on success.
>> +# If @filehandle is not opened, OpenFileFailed
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'type': 'GuestFileWrite',
>> + 'data': { 'count': 'int', 'eof': 'bool' } }
>> +{ 'command': 'guest-file-write',
>> + 'data': { 'filehandle': 'int', 'data_b64': 'str', 'count': 'int' },
>> + 'returns': 'GuestFileWrite' }
>
> data-b64
>
>> +
>> +##
>> +# @guest-file-seek:
>> +#
>> +# Seek to a position in the file, as with fseek(), and return the
>> +# current file position afterward. Also encapsulates ftell()'s
>> +# functionality, just Set offset=0, whence=SEEK_CUR.
>> +#
>> +# @filehandle: filehandle returned by guest-file-open
>> +#
>> +# @offset: bytes to skip over in the file stream
>> +#
>> +# @whence: SEEK_SET, SEEK_CUR, or SEEK_END, as with fseek()
>> +#
>> +# Returns: GuestFileSeek on success.
>> +# If @filehandle is not opened, OpenFileFailed
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'type': 'GuestFileSeek',
>> + 'data': { 'position': 'int', 'eof': 'bool' } }
>> +
>> +{ 'command': 'guest-file-seek',
>> + 'data': { 'filehandle': 'int', 'offset': 'int', 'whence': 'int' },
>> + 'returns': 'GuestFileSeek' }
>> +
>> +##
>> +# @guest-file-close:
>> +#
>> +# Close an open file in the guest
>> +#
>> +# @filehandle: filehandle returned by guest-file-open
>> +#
>> +# Returns: Nothing on success.
>> +# If @filehandle is not opened, OpenFileFailed
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'command': 'guest-file-close',
>> + 'data': { 'filehandle': 'int' } }
>> +
>> +##
>> +# @guest-fsfreeze-status:
>> +#
>> +# get guest fsfreeze state
>> +#
>> +# Returns: GuestFsfreezeStatus (enumeration starts at 1)
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'enum': 'GuestFsfreezeStatus',
>> + 'data': [ 'thawed', 'inprogress', 'frozen', 'error' ] }
>> +{ 'command': 'guest-fsfreeze-status',
>> + 'returns': 'GuestFsfreezeStatus' }
>
> hmm, I thought a qapi command implementation would return an enum (ie. int),
> but the qapi would translate it to a string and return the string to the
> client. However, this returns an int (as explained above).
>
> Did I misunderstand how the qapi handles enums then?
>
No, I think you're right... the original code generation seemed to
support this at least. With the switchover to visitor functions Anthony
treated enum types as integers when handling input/output, but now that
I look at it again there was a commented-out block that suggested a
possible TODO here.
It could be done by generating a lookup table for each qapi-defined enum
and then passing that to qmp_input_type_enum()/qapi_output_type_enum()
Sure would make the enum functionality more useful :) I'll see if I can
work it into set2 without too much churn.
>> +
>> +##
>> +# @guest-fsfreeze-freeze:
>> +#
>> +# Sync and freeze all non-network guest filesystems
>> +#
>> +# Returns: Number of file systems frozen
>> +# If error, -1 (unknown error) or -errno
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'command': 'guest-fsfreeze-freeze',
>> + 'returns': 'int' }
>> +
>> +##
>> +# @guest-fsfreeze-thaw:
>> +#
>> +# Unfreeze frozen guest fileystems
>> +#
>> +# Returns: Number of file systems thawed
>> +# If error, -1 (unknown error) or -errno
>> +#
>> +# Since: 0.15.0
>> +##
>> +{ 'command': 'guest-fsfreeze-thaw',
>> + 'returns': 'int' }
>
next prev parent reply other threads:[~2011-07-08 21:42 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-05 13:21 [Qemu-devel] [QAPI+QGA 3/3] QEMU Guest Agent (virtagent) v6 Michael Roth
2011-07-05 13:21 ` [Qemu-devel] [PATCH v6 1/4] guest agent: command state class Michael Roth
2011-07-08 14:25 ` Luiz Capitulino
2011-07-08 20:22 ` Michael Roth
2011-07-05 13:21 ` [Qemu-devel] [PATCH v6 2/4] guest agent: qemu-ga daemon Michael Roth
2011-07-06 0:34 ` Michael Roth
2011-07-08 14:36 ` Luiz Capitulino
2011-07-08 21:12 ` Michael Roth
2011-07-05 13:21 ` [Qemu-devel] [PATCH v6 3/4] guest agent: add guest agent commands schema file Michael Roth
2011-07-08 15:08 ` Luiz Capitulino
2011-07-08 21:42 ` Michael Roth [this message]
2011-07-05 13:21 ` [Qemu-devel] [PATCH v6 4/4] guest agent: add guest agent RPCs/commands Michael Roth
2011-07-08 15:14 ` Luiz Capitulino
2011-07-11 20:11 ` Michael Roth
2011-07-11 21:12 ` Luiz Capitulino
2011-07-11 23:11 ` Michael Roth
2011-07-12 14:15 ` Luiz Capitulino
2011-07-12 15:44 ` Michael Roth
2011-07-12 16:30 ` Luiz Capitulino
2011-07-13 13:14 ` [Qemu-devel] [QAPI+QGA 3/3] QEMU Guest Agent (virtagent) v6 Daniel P. Berrange
2011-07-13 17:51 ` Michael Roth
2011-07-14 2:53 ` Zhi Yong Wu
2011-07-14 12:55 ` Luiz Capitulino
2011-07-14 13:53 ` Zhi Yong Wu
2011-07-14 14:04 ` Michael Roth
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=4E1779B0.2010605@linux.vnet.ibm.com \
--to=mdroth@linux.vnet.ibm.com \
--cc=Jes.Sorensen@redhat.com \
--cc=agl@linux.vnet.ibm.com \
--cc=aliguori@linux.vnet.ibm.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.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).