qapi-code-gen.txt 52.9 KB
Newer Older
1 2
= How to use the QAPI code generator =

3
Copyright IBM Corp. 2011
4
Copyright (C) 2012-2016 Red Hat, Inc.
5 6 7 8 9 10

This work is licensed under the terms of the GNU GPL, version 2 or
later. See the COPYING file in the top-level directory.

== Introduction ==

11
QAPI is a native C API within QEMU which provides management-level
12 13 14 15
functionality to internal and external users. For external
users/processes, this interface is made available by a JSON-based wire
format for the QEMU Monitor Protocol (QMP) for controlling qemu, as
well as the QEMU Guest Agent (QGA) for communicating with the guest.
16 17
The remainder of this document uses "Client JSON Protocol" when
referring to the wire contents of a QMP or QGA connection.
18

19 20 21 22 23
To map Client JSON Protocol interfaces to the native C QAPI
implementations, a JSON-based schema is used to define types and
function signatures, and a set of scripts is used to generate types,
signatures, and marshaling/dispatch code. This document will describe
how the schemas, scripts, and resulting code are used.
24 25 26 27


== QMP/Guest agent schema ==

28 29 30 31 32 33 34 35 36 37 38
A QAPI schema file is designed to be loosely based on JSON
(http://www.ietf.org/rfc/rfc7159.txt) with changes for quoting style
and the use of comments; a QAPI schema file is then parsed by a python
code generation program.  A valid QAPI schema consists of a series of
top-level expressions, with no commas between them.  Where
dictionaries (JSON objects) are used, they are parsed as python
OrderedDicts so that ordering is preserved (for predictable layout of
generated C structs and parameter lists).  Ordering doesn't matter
between top-level expressions or the keys within an expression, but
does matter within dictionary values for 'data' and 'returns' members
of a single expression.  QAPI schema input is written using 'single
39 40 41 42 43 44 45
quotes' instead of JSON's "double quotes" (in contrast, Client JSON
Protocol uses no comments, and while input accepts 'single quotes' as
an extension, output is strict JSON using only "double quotes").  As
in JSON, trailing commas are not permitted in arrays or dictionaries.
Input must be ASCII (although QMP supports full Unicode strings, the
QAPI parser does not).  At present, there is no place where a QAPI
schema requires the use of JSON numbers or null.
46

M
Marc-André Lureau 已提交
47 48 49

=== Comments ===

50
Comments are allowed; anything between an unquoted # and the following
M
Marc-André Lureau 已提交
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
newline is ignored.

A multi-line comment that starts and ends with a '##' line is a
documentation comment.  These are parsed by the documentation
generator, which recognizes certain markup detailed below.


==== Documentation markup ====

Comment text starting with '=' is a section title:

    # = Section title

Double the '=' for a subsection title:

C
Chen Hanxiao 已提交
66
    # == Subsection title
M
Marc-André Lureau 已提交
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119

'|' denotes examples:

    # | Text of the example, may span
    # | multiple lines

'*' starts an itemized list:

    # * First item, may span
    #   multiple lines
    # * Second item

You can also use '-' instead of '*'.

A decimal number followed by '.' starts a numbered list:

    # 1. First item, may span
    #    multiple lines
    # 2. Second item

The actual number doesn't matter.  You could even use '*' instead of
'2.' for the second item.

Lists can't be nested.  Blank lines are currently not supported within
lists.

Additional whitespace between the initial '#' and the comment text is
permitted.

*foo* and _foo_ are for strong and emphasis styles respectively (they
do not work over multiple lines). @foo is used to reference a name in
the schema.

Example:

##
# = Section
# == Subsection
#
# Some text foo with *strong* and _emphasis_
# 1. with a list
# 2. like that
#
# And some code:
# | $ echo foo
# | -> do this
# | <- get that
#
##


==== Expression documentation ====

120
Each expression that isn't an include directive may be preceded by a
M
Marc-André Lureau 已提交
121 122 123
documentation block.  Such blocks are called expression documentation
blocks.

124 125 126
When documentation is required (see pragma 'doc-required'), expression
documentation blocks are mandatory.

M
Marc-André Lureau 已提交
127 128 129 130 131 132 133
The documentation block consists of a first line naming the
expression, an optional overview, a description of each argument (for
commands and events) or member (for structs, unions and alternates),
and optional tagged sections.

FIXME: the parser accepts these things in almost any order.

134 135
Extensions added after the expression was first released carry a
'(since x.y.z)' comment.
M
Marc-André Lureau 已提交
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150

A tagged section starts with one of the following words:
"Note:"/"Notes:", "Since:", "Example"/"Examples", "Returns:", "TODO:".
The section ends with the start of a new section.

A 'Since: x.y.z' tagged section lists the release that introduced the
expression.

For example:

##
# @BlockStats:
#
# Statistics of a virtual block device or a block backing device.
#
151
# @device: If the stats are for a virtual block device, the name
M
Marc-André Lureau 已提交
152 153
#          corresponding to the virtual block device.
#
154
# @node-name: The node name of the device. (since 2.3)
M
Marc-André Lureau 已提交
155 156 157 158 159 160 161 162 163 164 165 166 167 168
#
# ... more members ...
#
# Since: 0.14.0
##
{ 'struct': 'BlockStats',
  'data': {'*device': 'str', '*node-name': 'str',
           ... more members ... } }

##
# @query-blockstats:
#
# Query the @BlockStats for all virtual block devices.
#
169
# @query-nodes: If true, the command will query all the
M
Marc-André Lureau 已提交
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
#               block nodes ... explain, explain ...  (since 2.3)
#
# Returns: A list of @BlockStats for each virtual block devices.
#
# Since: 0.14.0
#
# Example:
#
# -> { "execute": "query-blockstats" }
# <- {
#      ... lots of output ...
#    }
#
##
{ 'command': 'query-blockstats',
  'data': { '*query-nodes': 'bool' },
  'returns': ['BlockStats'] }

==== Free-form documentation ====

A documentation block that isn't an expression documentation block is
a free-form documentation block.  These may be used to provide
additional text and structuring content.


=== Schema overview ===
196 197 198 199 200 201

The schema sets up a series of types, as well as commands and events
that will use those types.  Forward references are allowed: the parser
scans in two passes, where the first pass learns all type names, and
the second validates the schema and generates the code.  This allows
the definition of complex structs that can have mutually recursive
202 203 204 205 206
types, and allows for indefinite nesting of Client JSON Protocol that
satisfies the schema.  A type name should not be defined more than
once.  It is permissible for the schema to contain additional types
not used by any commands or events in the Client JSON Protocol, for
the side effect of generated C code used internally.
207

208 209 210 211 212 213 214 215 216 217 218
There are eight top-level expressions recognized by the parser:
'include', 'pragma', 'command', 'struct', 'enum', 'union',
'alternate', and 'event'.  There are several groups of types: simple
types (a number of built-in types, such as 'int' and 'str'; as well as
enumerations), complex types (structs and two flavors of unions), and
alternate types (a choice between other types).  The 'command' and
'event' expressions can refer to existing types by name, or list an
anonymous type as a dictionary. Listing a type name inside an array
refers to a single-dimension array of that type; multi-dimension
arrays are not directly supported (although an array of a complex
struct that contains an array member is possible).
219

220 221 222 223 224 225 226 227 228 229
All names must begin with a letter, and contain only ASCII letters,
digits, hyphen, and underscore.  There are two exceptions: enum values
may start with a digit, and names that are downstream extensions (see
section Downstream extensions) start with underscore.

Names beginning with 'q_' are reserved for the generator, which uses
them for munging QMP names that resemble C keywords or other
problematic strings.  For example, a member named "default" in qapi
becomes "q_default" in the generated C code.

230 231
Types, commands, and events share a common namespace.  Therefore,
generally speaking, type definitions should always use CamelCase for
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247
user-defined type names, while built-in types are lowercase.

Type names ending with 'Kind' or 'List' are reserved for the
generator, which uses them for implicit union enums and array types,
respectively.

Command names, and member names within a type, should be all lower
case with words separated by a hyphen.  However, some existing older
commands and complex types use underscore; when extending such
expressions, consistency is preferred over blindly avoiding
underscore.

Event names should be ALL_CAPS with words separated by underscore.

Member names starting with 'has-' or 'has_' are reserved for the
generator, which uses them for tracking optional members.
248

249
Any name (command, event, type, member, or enum value) beginning with
250
"x-" is marked experimental, and may be withdrawn or changed
251
incompatibly in a future release.
252

253 254 255
Pragma 'name-case-whitelist' lets you violate the rules on use of
upper and lower case.  Use for new code is strongly discouraged.

256 257 258 259
In the rest of this document, usage lines are given for each
expression type, with literal strings written in lower case and
placeholders written in capitals.  If a literal string includes a
prefix of '*', that key/value pair can be omitted from the expression.
E
Eric Blake 已提交
260
For example, a usage statement that includes '*base':STRUCT-NAME
261
means that an expression has an optional key 'base', which if present
E
Eric Blake 已提交
262
must have a value that forms a struct name.
263 264 265 266


=== Built-in Types ===

267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284
The following types are predefined, and map to C as follows:

  Schema    C          JSON
  str       char *     any JSON string, UTF-8
  number    double     any JSON number
  int       int64_t    a JSON number without fractional part
                       that fits into the C integer type
  int8      int8_t     likewise
  int16     int16_t    likewise
  int32     int32_t    likewise
  int64     int64_t    likewise
  uint8     uint8_t    likewise
  uint16    uint16_t   likewise
  uint32    uint32_t   likewise
  uint64    uint64_t   likewise
  size      uint64_t   like uint64_t, except StringInputVisitor
                       accepts size suffixes
  bool      bool       JSON true or false
285
  null      QNull *    JSON null
286
  any       QObject *  any JSON value
287
  QType     QType      JSON string matching enum QType values
K
Kevin Wolf 已提交
288

289

290
=== Include directives ===
291

292 293
Usage: { 'include': STRING }

294 295
The QAPI schema definitions can be modularized using the 'include' directive:

296
 { 'include': 'path/to/file.json' }
297 298

The directive is evaluated recursively, and include paths are relative to the
299
file using the directive. Multiple includes of the same file are
300
idempotent.  No other keys should appear in the expression, and the include
301 302 303 304 305 306 307
value should be a string.

As a matter of style, it is a good idea to have all files be
self-contained, but at the moment, nothing prevents an included file
from making a forward reference to a type that is only introduced by
an outer file.  The parser may be made stricter in the future to
prevent incomplete include files.
308 309


310 311 312 313 314 315 316 317 318 319 320 321 322
=== Pragma directives ===

Usage: { 'pragma': DICT }

The pragma directive lets you control optional generator behavior.
The dictionary's entries are pragma names and values.

Pragma's scope is currently the complete schema.  Setting the same
pragma to different values in parts of the schema doesn't work.

Pragma 'doc-required' takes a boolean value.  If true, documentation
is required.  Default is false.

323 324 325
Pragma 'returns-whitelist' takes a list of command names that may
violate the rules on permitted return types.  Default is none.

326 327 328
Pragma 'name-case-whitelist' takes a list of names that may violate
rules on use of upper- vs. lower-case letters.  Default is none.

329

E
Eric Blake 已提交
330
=== Struct types ===
K
Kevin Wolf 已提交
331

E
Eric Blake 已提交
332
Usage: { 'struct': STRING, 'data': DICT, '*base': STRUCT-NAME }
333

334 335 336 337 338
A struct is a dictionary containing a single 'data' key whose value is
a dictionary; the dictionary may be empty.  This corresponds to a
struct in C or an Object in JSON. Each value of the 'data' dictionary
must be the name of a type, or a one-element array containing a type
name.  An example of a struct is:
339

E
Eric Blake 已提交
340
 { 'struct': 'MyType',
341
   'data': { 'member1': 'str', 'member2': 'int', '*member3': 'str' } }
342

343
The use of '*' as a prefix to the name means the member is optional in
344
the corresponding JSON protocol usage.
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363

The default initialization value of an optional argument should not be changed
between versions of QEMU unless the new default maintains backward
compatibility to the user-visible behavior of the old default.

With proper documentation, this policy still allows some flexibility; for
example, documenting that a default of 0 picks an optimal buffer size allows
one release to declare the optimal size at 512 while another release declares
the optimal size at 4096 - the user-visible behavior is not the bytes used by
the buffer, but the fact that the buffer was optimal size.

On input structures (only mentioned in the 'data' side of a command), changing
from mandatory to optional is safe (older clients will supply the option, and
newer clients can benefit from the default); changing from optional to
mandatory is backwards incompatible (older clients may be omitting the option,
and must continue to work).

On output structures (only mentioned in the 'returns' side of a command),
changing from mandatory to optional is in general unsafe (older clients may be
364 365 366 367 368
expecting the member, and could crash if it is missing), although it
can be done if the only way that the optional argument will be omitted
is when it is triggered by the presence of a new input flag to the
command that older clients don't know to send.  Changing from optional
to mandatory is safe.
369 370 371 372

A structure that is used in both input and output of various commands
must consider the backwards compatibility constraints of both directions
of use.
373

E
Eric Blake 已提交
374
A struct definition can specify another struct as its base.
375
In this case, the members of the base type are included as top-level members
376 377
of the new struct's dictionary in the Client JSON Protocol wire
format. An example definition is:
378

E
Eric Blake 已提交
379 380
 { 'struct': 'BlockdevOptionsGenericFormat', 'data': { 'file': 'str' } }
 { 'struct': 'BlockdevOptionsGenericCOWFormat',
381 382 383 384
   'base': 'BlockdevOptionsGenericFormat',
   'data': { '*backing': 'str' } }

An example BlockdevOptionsGenericCOWFormat object on the wire could use
385
both members like this:
386 387 388 389

 { "file": "/some/place/my-image",
   "backing": "/some/place/my-backing-file" }

390

K
Kevin Wolf 已提交
391 392
=== Enumeration types ===

393
Usage: { 'enum': STRING, 'data': ARRAY-OF-STRING }
394
       { 'enum': STRING, '*prefix': STRING, 'data': ARRAY-OF-STRING }
395 396 397

An enumeration type is a dictionary containing a single 'data' key
whose value is a list of strings.  An example enumeration is:
398 399 400

 { 'enum': 'MyEnum', 'data': [ 'value1', 'value2', 'value3' ] }

401 402 403 404 405
Nothing prevents an empty enumeration, although it is probably not
useful.  The list of strings should be lower case; if an enum name
represents multiple words, use '-' between words.  The string 'max' is
not allowed as an enum value, and values should not be repeated.

406 407 408 409
The enum constants will be named by using a heuristic to turn the
type name into a set of underscore separated words. For the example
above, 'MyEnum' will turn into 'MY_ENUM' giving a constant name
of 'MY_ENUM_VALUE1' for the first value. If the default heuristic
410
does not result in a desirable name, the optional 'prefix' member
411 412
can be used when defining the enum.

413 414 415
The enumeration values are passed as strings over the Client JSON
Protocol, but are encoded as C enum integral values in generated code.
While the C code starts numbering at 0, it is better to use explicit
416 417 418 419 420
comparisons to enum values than implicit comparisons to 0; the C code
will also include a generated enum member ending in _MAX for tracking
the size of the enum, useful when using common functions for
converting between strings and enum values.  Since the wire format
always passes by name, it is acceptable to reorder or add new
421 422
enumeration members in any location without breaking clients of Client
JSON Protocol; however, removing enum values would break
423 424 425
compatibility.  For any struct that has a member that will only contain
a finite set of string values, using an enum type for that member is
better than open-coding the member to be type 'str'.
426 427


K
Kevin Wolf 已提交
428 429
=== Union types ===

430
Usage: { 'union': STRING, 'data': DICT }
431
or:    { 'union': STRING, 'data': DICT, 'base': STRUCT-NAME-OR-DICT,
432
         'discriminator': ENUM-MEMBER-OF-BASE }
K
Kevin Wolf 已提交
433

434
Union types are used to let the user choose between several different
435
variants for an object.  There are two flavors: simple (no
436
discriminator or base), and flat (both discriminator and base).  A union
437
type is defined using a data dictionary as explained in the following
438 439
paragraphs.  The data dictionary for either type of union must not
be empty.
K
Kevin Wolf 已提交
440

441 442
A simple union type defines a mapping from automatic discriminator
values to data types like in this example:
K
Kevin Wolf 已提交
443

444 445 446
 { 'struct': 'BlockdevOptionsFile', 'data': { 'filename': 'str' } }
 { 'struct': 'BlockdevOptionsQcow2',
   'data': { 'backing': 'str', '*lazy-refcounts': 'bool' } }
K
Kevin Wolf 已提交
447

448 449 450
 { 'union': 'BlockdevOptionsSimple',
   'data': { 'file': 'BlockdevOptionsFile',
             'qcow2': 'BlockdevOptionsQcow2' } }
K
Kevin Wolf 已提交
451

452
In the Client JSON Protocol, a simple union is represented by a
453 454
dictionary that contains the 'type' member as a discriminator, and a
'data' member that is of the specified data type corresponding to the
455
discriminator value, as in these examples:
K
Kevin Wolf 已提交
456

457 458 459
 { "type": "file", "data": { "filename": "/some/place/my-image" } }
 { "type": "qcow2", "data": { "backing": "/some/place/my-image",
                              "lazy-refcounts": true } }
K
Kevin Wolf 已提交
460

461 462 463 464 465
The generated C code uses a struct containing a union. Additionally,
an implicit C enum 'NameKind' is created, corresponding to the union
'Name', for accessing the various branches of the union.  No branch of
the union can be named 'max', as this would collide with the implicit
enum.  The value for each branch can be of any type.
K
Kevin Wolf 已提交
466

467 468
A flat union definition avoids nesting on the wire, and specifies a
set of common members that occur in all variants of the union.  The
M
Michael Tokarev 已提交
469
'base' key must specify either a type name (the type must be a
470 471 472 473 474 475 476
struct, not a union), or a dictionary representing an anonymous type.
All branches of the union must be complex types, and the top-level
members of the union dictionary on the wire will be combination of
members from both the base type and the appropriate branch type (when
merging two dictionaries, there must be no keys in common).  The
'discriminator' member must be the name of a non-optional enum-typed
member of the base struct.
K
Kevin Wolf 已提交
477

478
The following example enhances the above simple union example by
479 480 481
adding an optional common member 'read-only', renaming the
discriminator to something more applicable than the simple union's
default of 'type', and reducing the number of {} required on the wire:
482

483
 { 'enum': 'BlockdevDriver', 'data': [ 'file', 'qcow2' ] }
484
 { 'union': 'BlockdevOptions',
485
   'base': { 'driver': 'BlockdevDriver', '*read-only': 'bool' },
486
   'discriminator': 'driver',
487 488
   'data': { 'file': 'BlockdevOptionsFile',
             'qcow2': 'BlockdevOptionsQcow2' } }
489

490 491
Resulting in these JSON objects:

492
 { "driver": "file", "read-only": true,
493
   "filename": "/some/place/my-image" }
494 495
 { "driver": "qcow2", "read-only": false,
   "backing": "/some/place/my-image", "lazy-refcounts": true }
496 497 498

Notice that in a flat union, the discriminator name is controlled by
the user, but because it must map to a base member with enum type, the
499 500 501 502 503
code generator ensures that branches match the existing values of the
enum. The order of the keys need not match the declaration of the enum.
The keys need not cover all possible enum values. Omitted enum values
are still valid branches that add no additional members to the data type.
In the resulting generated C data types, a flat union is
504 505
represented as a struct with the base members included directly, and
then a union of structures for each branch of the struct.
506 507 508

A simple union can always be re-written as a flat union where the base
class has a single member named 'type', and where each branch of the
E
Eric Blake 已提交
509
union has a struct with a single member named 'data'.  That is,
510

511
 { 'union': 'Simple', 'data': { 'one': 'str', 'two': 'int' } }
512

513
is identical on the wire to:
514

515
 { 'enum': 'Enum', 'data': ['one', 'two'] }
E
Eric Blake 已提交
516 517
 { 'struct': 'Branch1', 'data': { 'data': 'str' } }
 { 'struct': 'Branch2', 'data': { 'data': 'int' } }
518
 { 'union': 'Flat': 'base': { 'type': 'Enum' }, 'discriminator': 'type',
519
   'data': { 'one': 'Branch1', 'two': 'Branch2' } }
K
Kevin Wolf 已提交
520

521

522
=== Alternate types ===
K
Kevin Wolf 已提交
523

524 525 526 527 528 529 530
Usage: { 'alternate': STRING, 'data': DICT }

An alternate type is one that allows a choice between two or more JSON
data types (string, integer, number, or object, but currently not
array) on the wire.  The definition is similar to a simple union type,
where each branch of the union names a QAPI type.  For example:

531
 { 'alternate': 'BlockdevRef',
K
Kevin Wolf 已提交
532 533 534
   'data': { 'definition': 'BlockdevOptions',
             'reference': 'str' } }

535
Unlike a union, the discriminator string is never passed on the wire
536 537 538 539 540 541
for the Client JSON Protocol.  Instead, the value's JSON type serves
as an implicit discriminator, which in turn means that an alternate
can only express a choice between types represented differently in
JSON.  If a branch is typed as the 'bool' built-in, the alternate
accepts true and false; if it is typed as any of the various numeric
built-ins, it accepts a JSON number; if it is typed as a 'str'
542 543 544 545 546
built-in or named enum type, it accepts a JSON string; if it is typed
as the 'null' built-in, it accepts JSON null; and if it is typed as a
complex type (struct or union), it accepts a JSON object.  Two
different complex types, for instance, aren't permitted, because both
are represented as a JSON object.
547 548 549

The example alternate declaration above allows using both of the
following example objects:
K
Kevin Wolf 已提交
550 551 552

 { "file": "my_existing_block_device_id" }
 { "file": { "driver": "file",
553
             "read-only": false,
E
Eric Blake 已提交
554
             "filename": "/tmp/mydisk.qcow2" } }
K
Kevin Wolf 已提交
555 556


K
Kevin Wolf 已提交
557
=== Commands ===
558

559 560
--- General Command Layout ---

561
Usage: { 'command': STRING, '*data': COMPLEX-TYPE-NAME-OR-DICT,
562
         '*returns': TYPE-NAME, '*boxed': true,
563
         '*gen': false, '*success-response': false,
564
         '*allow-oob': true, '*allow-preconfig': true }
565 566 567

Commands are defined by using a dictionary containing several members,
where three members are most common.  The 'command' member is a
568 569
mandatory string, and determines the "execute" value passed in a
Client JSON Protocol command exchange.
570 571

The 'data' argument maps to the "arguments" dictionary passed in as
572 573
part of a Client JSON Protocol command.  The 'data' member is optional
and defaults to {} (an empty dictionary).  If present, it must be the
574
string name of a complex type, or a dictionary that declares an
575
anonymous type with the same semantics as a 'struct' expression.
576

577
The 'returns' member describes what will appear in the "return" member
578 579
of a Client JSON Protocol reply on successful completion of a command.
The member is optional from the command declaration; if absent, the
580
"return" member will be an empty dictionary.  If 'returns' is present,
581
it must be the string name of a complex or built-in type, a
582
one-element array containing the name of a complex or built-in type.
583 584 585 586
To return anything else, you have to list the command in pragma
'returns-whitelist'.  If you do this, the command cannot be extended
to return additional information in the future.  Use of
'returns-whitelist' for new commands is strongly discouraged.
587 588 589 590 591 592

All commands in Client JSON Protocol use a dictionary to report
failure, with no way to specify that in QAPI.  Where the error return
is different than the usual GenericError class in order to help the
client react differently to certain error conditions, it is worth
documenting this in the comments before the command declaration.
593 594 595 596 597

Some example commands:

 { 'command': 'my-first-command',
   'data': { 'arg1': 'str', '*arg2': 'str' } }
E
Eric Blake 已提交
598
 { 'struct': 'MyType', 'data': { '*value': 'str' } }
599 600 601
 { 'command': 'my-second-command',
   'returns': [ 'MyType' ] }

602
which would validate this Client JSON Protocol transaction:
603 604 605 606 607 608 609

 => { "execute": "my-first-command",
      "arguments": { "arg1": "hello" } }
 <= { "return": { } }
 => { "execute": "my-second-command" }
 <= { "return": [ { "value": "one" }, { } ] }

610 611 612 613 614 615 616 617 618 619 620 621 622 623
The generator emits a prototype for the user's function implementing
the command.  Normally, 'data' is a dictionary for an anonymous type,
or names a struct type (possibly empty, but not a union), and its
members are passed as separate arguments to this function.  If the
command definition includes a key 'boxed' with the boolean value true,
then 'data' is instead the name of any non-empty complex type
(struct, union, or alternate), and a pointer to that QAPI type is
passed as a single argument.

The generator also emits a marshalling function that extracts
arguments for the user's function out of an input QDict, calls the
user's function, and if it succeeded, builds an output QObject from
its return value.

624
In rare cases, QAPI cannot express a type-safe representation of a
625 626
corresponding Client JSON Protocol command.  You then have to suppress
generation of a marshalling function by including a key 'gen' with
627 628
boolean value false, and instead write your own function.  For
example:
629 630

 { 'command': 'netdev_add',
631
   'data': {'type': 'str', 'id': 'str'},
632 633
   'gen': false }

634 635 636
Please try to avoid adding new commands that rely on this, and instead
use type-safe unions.

637 638 639 640 641
Normally, the QAPI schema is used to describe synchronous exchanges,
where a response is expected.  But in some cases, the action of a
command is expected to change state in a way that a successful
response is not possible (although the command will still return a
normal dictionary error on failure).  When a successful reply is not
642
possible, the command expression includes the optional key
643
'success-response' with boolean value false.  So far, only QGA makes
644
use of this member.
645

646 647
Key 'allow-oob' declares whether the command supports out-of-band
(OOB) execution.  It defaults to false.  For example:
648 649 650 651

 { 'command': 'migrate_recover',
   'data': { 'uri': 'str' }, 'allow-oob': true }

652
See qmp-spec.txt for out-of-band execution syntax and semantics.
653

654 655
Commands supporting out-of-band execution can still be executed
in-band.
656

657 658
When a command is executed in-band, its handler runs in the main
thread with the BQL held.
659

660 661
When a command is executed out-of-band, its handler runs in a
dedicated monitor I/O thread with the BQL *not* held.
662

663
An OOB-capable command handler must satisfy the following conditions:
664

665 666
- It terminates quickly.
- It does not invoke system calls that may block.
667
- It does not access guest RAM that may block when userfaultfd is
668
  enabled for postcopy live migration.
669 670 671 672 673 674 675
- It takes only "fast" locks, i.e. all critical sections protected by
  any lock it takes also satisfy the conditions for OOB command
  handler code.

The restrictions on locking limit access to shared state.  Such access
requires synchronization, but OOB commands can't take the BQL or any
other "slow" lock.
676

677
When in doubt, do not implement OOB execution support.
678

679 680
Key 'allow-preconfig' declares whether the command is available before
the machine is built.  It defaults to false.  For example:
681 682 683 684 685

 { 'command': 'qmp_capabilities',
   'data': { '*enable': [ 'QMPCapability' ] },
   'allow-preconfig': true }

686 687 688
QMP is available before the machine is built only when QEMU was
started with --preconfig.

W
Wenchao Xia 已提交
689 690
=== Events ===

691 692
Usage: { 'event': STRING, '*data': COMPLEX-TYPE-NAME-OR-DICT,
         '*boxed': true }
693 694 695 696 697

Events are defined with the keyword 'event'.  It is not allowed to
name an event 'MAX', since the generator also produces a C enumeration
of all event names with a generated _MAX value at the end.  When
'data' is also specified, additional info will be included in the
E
Eric Blake 已提交
698
event, with similar semantics to a 'struct' expression.  Finally there
699
will be C API generated in qapi-events.h; when called by QEMU code, a
700
message with timestamp will be emitted on the wire.
W
Wenchao Xia 已提交
701 702 703 704 705 706 707 708 709 710 711

An example event is:

{ 'event': 'EVENT_C',
  'data': { '*a': 'int', 'b': 'str' } }

Resulting in this JSON object:

{ "event": "EVENT_C",
  "data": { "b": "test string" },
  "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
712

713 714 715 716 717 718 719 720
The generator emits a function to send the event.  Normally, 'data' is
a dictionary for an anonymous type, or names a struct type (possibly
empty, but not a union), and its members are passed as separate
arguments to this function.  If the event definition includes a key
'boxed' with the boolean value true, then 'data' is instead the name of
any non-empty complex type (struct, union, or alternate), and a
pointer to that QAPI type is passed as a single argument.

721

722 723 724 725 726 727 728 729 730 731 732 733
=== Downstream extensions ===

QAPI schema names that are externally visible, say in the Client JSON
Protocol, need to be managed with care.  Names starting with a
downstream prefix of the form __RFQDN_ are reserved for the downstream
who controls the valid, reverse fully qualified domain name RFQDN.
RFQDN may only contain ASCII letters, digits, hyphen and period.

Example: Red Hat, Inc. controls redhat.com, and may therefore add a
downstream command __com.redhat_drive-mirror.


734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762
=== Configuring the schema ===

The 'struct', 'enum', 'union', 'alternate', 'command' and 'event'
top-level expressions can take an 'if' key.  Its value must be a string
or a list of strings.  A string is shorthand for a list containing just
that string.  The code generated for the top-level expression will then
be guarded by #if COND for each COND in the list.

Example: a conditional struct

 { 'struct': 'IfStruct', 'data': { 'foo': 'int' },
   'if': ['defined(CONFIG_FOO)', 'defined(HAVE_BAR)'] }

gets its generated code guarded like this:

 #if defined(CONFIG_FOO)
 #if defined(HAVE_BAR)
 ... generated code ...
 #endif /* defined(HAVE_BAR) */
 #endif /* defined(CONFIG_FOO) */

Please note that you are responsible to ensure that the C code will
compile with an arbitrary combination of conditions, since the
generators are unable to check it at this point.

The presence of 'if' keys in the schema is reflected through to the
introspection output depending on the build configuration.


763 764 765 766 767 768 769 770
== Client JSON Protocol introspection ==

Clients of a Client JSON Protocol commonly need to figure out what
exactly the server (QEMU) supports.

For this purpose, QMP provides introspection via command
query-qmp-schema.  QGA currently doesn't support introspection.

771 772 773 774 775 776 777 778 779 780 781
While Client JSON Protocol wire compatibility should be maintained
between qemu versions, we cannot make the same guarantees for
introspection stability.  For example, one version of qemu may provide
a non-variant optional member of a struct, and a later version rework
the member to instead be non-optional and associated with a variant.
Likewise, one version of qemu may list a member with open-ended type
'str', and a later version could convert it to a finite set of strings
via an enum type; or a member may be converted from a specific type to
an alternate that represents a choice between the original type and
something else.

782 783
query-qmp-schema returns a JSON array of SchemaInfo objects.  These
objects together describe the wire ABI, as defined in the QAPI schema.
784 785 786 787
There is no specified order to the SchemaInfo objects returned; a
client must search for a particular name throughout the entire array
to learn more about that name, but is at least guaranteed that there
will be no collisions between type, command, and event names.
788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805

However, the SchemaInfo can't reflect all the rules and restrictions
that apply to QMP.  It's interface introspection (figuring out what's
there), not interface specification.  The specification is in the QAPI
schema.  To understand how QMP is to be used, you need to study the
QAPI schema.

Like any other command, query-qmp-schema is itself defined in the QAPI
schema, along with the SchemaInfo type.  This text attempts to give an
overview how things work.  For details you need to consult the QAPI
schema.

SchemaInfo objects have common members "name" and "meta-type", and
additional variant members depending on the value of meta-type.

Each SchemaInfo object describes a wire ABI entity of a certain
meta-type: a command, event or one of several kinds of type.

806 807
SchemaInfo for commands and events have the same name as in the QAPI
schema.
808 809

Command and event names are part of the wire ABI, but type names are
810 811 812 813 814 815
not.  Therefore, the SchemaInfo for types have auto-generated
meaningless names.  For readability, the examples in this section use
meaningful type names instead.

To examine a type, start with a command or event using it, then follow
references by name.
816 817 818 819

QAPI schema definitions not reachable that way are omitted.

The SchemaInfo for a command has meta-type "command", and variant
820 821 822 823 824 825
members "arg-type", "ret-type" and "allow-oob".  On the wire, the
"arguments" member of a client's "execute" command must conform to the
object type named by "arg-type".  The "return" member that the server
passes in a success response conforms to the type named by
"ret-type".  When "allow-oob" is set, it means the command supports
out-of-band execution.
826 827 828 829 830 831 832 833

If the command takes no arguments, "arg-type" names an object type
without members.  Likewise, if the command returns nothing, "ret-type"
names an object type without members.

Example: the SchemaInfo for command query-qmp-schema

    { "name": "query-qmp-schema", "meta-type": "command",
834
      "arg-type": "q_empty", "ret-type": "SchemaInfoList" }
835

836
    Type "q_empty" is an automatic object type without members, and type
837 838 839 840 841 842 843 844 845 846 847
    "SchemaInfoList" is the array of SchemaInfo type.

The SchemaInfo for an event has meta-type "event", and variant member
"arg-type".  On the wire, a "data" member that the server passes in an
event conforms to the object type named by "arg-type".

If the event carries no additional information, "arg-type" names an
object type without members.  The event may not have a data member on
the wire then.

Each command or event defined with dictionary-valued 'data' in the
848
QAPI schema implicitly defines an object type.
849 850 851 852

Example: the SchemaInfo for EVENT_C from section Events

    { "name": "EVENT_C", "meta-type": "event",
853
      "arg-type": "q_obj-EVENT_C-arg" }
854

855
    Type "q_obj-EVENT_C-arg" is an implicitly defined object type with
856 857 858 859 860 861 862 863 864 865 866 867 868 869
    the two members from the event's definition.

The SchemaInfo for struct and union types has meta-type "object".

The SchemaInfo for a struct type has variant member "members".

The SchemaInfo for a union type additionally has variant members "tag"
and "variants".

"members" is a JSON array describing the object's common members, if
any.  Each element is a JSON object with members "name" (the member's
name), "type" (the name of its type), and optionally "default".  The
member is optional if "default" is present.  Currently, "default" can
only have value null.  Other values are reserved for future
870 871 872
extensions.  The "members" array is in no particular order; clients
must search the entire object when learning whether a particular
member is supported.
873 874 875 876 877 878 879 880 881 882 883 884 885

Example: the SchemaInfo for MyType from section Struct types

    { "name": "MyType", "meta-type": "object",
      "members": [
          { "name": "member1", "type": "str" },
          { "name": "member2", "type": "int" },
          { "name": "member3", "type": "str", "default": null } ] }

"tag" is the name of the common member serving as type tag.
"variants" is a JSON array describing the object's variant members.
Each element is a JSON object with members "case" (the value of type
tag this element applies to) and "type" (the name of an object type
886 887 888
that provides the variant members for this type tag value).  The
"variants" array is in no particular order, and is not guaranteed to
list cases in the same order as the corresponding "tag" enum type.
889 890 891 892 893 894 895

Example: the SchemaInfo for flat union BlockdevOptions from section
Union types

    { "name": "BlockdevOptions", "meta-type": "object",
      "members": [
          { "name": "driver", "type": "BlockdevDriver" },
896
          { "name": "read-only", "type": "bool", "default": null } ],
897 898
      "tag": "driver",
      "variants": [
899 900
          { "case": "file", "type": "BlockdevOptionsFile" },
          { "case": "qcow2", "type": "BlockdevOptionsQcow2" } ] }
901 902 903 904 905 906 907 908

Note that base types are "flattened": its members are included in the
"members" array.

A simple union implicitly defines an enumeration type for its implicit
discriminator (called "type" on the wire, see section Union types).

A simple union implicitly defines an object type for each of its
909
variants.
910

911
Example: the SchemaInfo for simple union BlockdevOptionsSimple from section
912 913
Union types

914
    { "name": "BlockdevOptionsSimple", "meta-type": "object",
915
      "members": [
916
          { "name": "type", "type": "BlockdevOptionsSimpleKind" } ],
917 918
      "tag": "type",
      "variants": [
919 920
          { "case": "file", "type": "q_obj-BlockdevOptionsFile-wrapper" },
          { "case": "qcow2", "type": "q_obj-BlockdevOptionsQcow2-wrapper" } ] }
921

922 923 924
    Enumeration type "BlockdevOptionsSimpleKind" and the object types
    "q_obj-BlockdevOptionsFile-wrapper", "q_obj-BlockdevOptionsQcow2-wrapper"
    are implicitly defined.
925 926 927 928

The SchemaInfo for an alternate type has meta-type "alternate", and
variant member "members".  "members" is a JSON array.  Each element is
a JSON object with member "type", which names a type.  Values of the
929 930
alternate type conform to exactly one of its member types.  There is
no guarantee on the order in which "members" will be listed.
931

932
Example: the SchemaInfo for BlockdevRef from section Alternate types
933

934
    { "name": "BlockdevRef", "meta-type": "alternate",
935 936 937 938 939 940
      "members": [
          { "type": "BlockdevOptions" },
          { "type": "str" } ] }

The SchemaInfo for an array type has meta-type "array", and variant
member "element-type", which names the array's element type.  Array
941 942 943 944
types are implicitly defined.  For convenience, the array's name may
resemble the element type; however, clients should examine member
"element-type" instead of making assumptions based on parsing member
"name".
945 946 947

Example: the SchemaInfo for ['str']

948
    { "name": "[str]", "meta-type": "array",
949 950 951
      "element-type": "str" }

The SchemaInfo for an enumeration type has meta-type "enum" and
952 953 954
variant member "values".  The values are listed in no particular
order; clients must search the entire enum when learning whether a
particular value is supported.
955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979

Example: the SchemaInfo for MyEnum from section Enumeration types

    { "name": "MyEnum", "meta-type": "enum",
      "values": [ "value1", "value2", "value3" ] }

The SchemaInfo for a built-in type has the same name as the type in
the QAPI schema (see section Built-in Types), with one exception
detailed below.  It has variant member "json-type" that shows how
values of this type are encoded on the wire.

Example: the SchemaInfo for str

    { "name": "str", "meta-type": "builtin", "json-type": "string" }

The QAPI schema supports a number of integer types that only differ in
how they map to C.  They are identical as far as SchemaInfo is
concerned.  Therefore, they get all mapped to a single type "int" in
SchemaInfo.

As explained above, type names are not part of the wire ABI.  Not even
the names of built-in types.  Clients should examine member
"json-type" instead of hard-coding names of built-in types.


980 981
== Code generation ==

982 983 984 985 986 987 988
The QAPI code generator qapi-gen.py generates code and documentation
from the schema.  Together with the core QAPI libraries, this code
provides everything required to take JSON commands read in by a Client
JSON Protocol server, unmarshal the arguments into the underlying C
types, call into the corresponding C function, map the response back
to a Client JSON Protocol response to be returned to the user, and
introspect the commands.
989

990 991 992 993 994
As an example, we'll use the following schema, which describes a
single complex user-defined type, along with command which takes a
list of that type as a parameter, and returns a single element of that
type.  The user is responsible for writing the implementation of
qmp_my_command(); everything else is produced by the generator.
995

996
    $ cat example-schema.json
E
Eric Blake 已提交
997
    { 'struct': 'UserDefOne',
998
      'data': { 'integer': 'int', '*string': 'str' } }
999 1000

    { 'command': 'my-command',
1001
      'data': { 'arg1': ['UserDefOne'] },
1002 1003
      'returns': 'UserDefOne' }

1004 1005
    { 'event': 'MY_EVENT' }

1006 1007 1008 1009 1010
We run qapi-gen.py like this:

    $ python scripts/qapi-gen.py --output-dir="qapi-generated" \
    --prefix="example-" example-schema.json

1011 1012 1013 1014 1015
For a more thorough look at generated code, the testsuite includes
tests/qapi-schema/qapi-schema-tests.json that covers more examples of
what the generator will accept, and compiles the resulting C code as
part of 'make check-unit'.

1016
=== Code generated for QAPI types ===
1017

1018
The following files are created:
1019 1020

$(prefix)qapi-types.h - C types corresponding to types defined in
1021 1022
                        the schema

1023 1024 1025 1026 1027 1028 1029 1030 1031
$(prefix)qapi-types.c - Cleanup functions for the above C types

The $(prefix) is an optional parameter used as a namespace to keep the
generated code from one schema/code-generation separated from others so code
can be generated/used from multiple schemas without clobbering previously
created code.

Example:

1032 1033 1034 1035 1036 1037
    $ cat qapi-generated/example-qapi-types.h
[Uninteresting stuff omitted...]

    #ifndef EXAMPLE_QAPI_TYPES_H
    #define EXAMPLE_QAPI_TYPES_H

1038
    #include "qapi/qapi-builtin-types.h"
1039 1040 1041 1042 1043

    typedef struct UserDefOne UserDefOne;

    typedef struct UserDefOneList UserDefOneList;

1044 1045
    typedef struct q_obj_my_command_arg q_obj_my_command_arg;

1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060
    struct UserDefOne {
        int64_t integer;
        bool has_string;
        char *string;
    };

    void qapi_free_UserDefOne(UserDefOne *obj);

    struct UserDefOneList {
        UserDefOneList *next;
        UserDefOne *value;
    };

    void qapi_free_UserDefOneList(UserDefOneList *obj);

1061 1062 1063 1064
    struct q_obj_my_command_arg {
        UserDefOneList *arg1;
    };

1065
    #endif /* EXAMPLE_QAPI_TYPES_H */
1066
    $ cat qapi-generated/example-qapi-types.c
1067 1068
[Uninteresting stuff omitted...]

1069
    void qapi_free_UserDefOne(UserDefOne *obj)
1070 1071 1072 1073 1074 1075 1076
    {
        Visitor *v;

        if (!obj) {
            return;
        }

E
Eric Blake 已提交
1077
        v = qapi_dealloc_visitor_new();
1078
        visit_type_UserDefOne(v, NULL, &obj, NULL);
E
Eric Blake 已提交
1079
        visit_free(v);
1080
    }
1081

1082
    void qapi_free_UserDefOneList(UserDefOneList *obj)
1083 1084 1085 1086 1087 1088 1089
    {
        Visitor *v;

        if (!obj) {
            return;
        }

E
Eric Blake 已提交
1090
        v = qapi_dealloc_visitor_new();
1091
        visit_type_UserDefOneList(v, NULL, &obj, NULL);
E
Eric Blake 已提交
1092
        visit_free(v);
1093 1094
    }

1095 1096
[Uninteresting stuff omitted...]

1097
=== Code generated for visiting QAPI types ===
1098

1099 1100 1101 1102
These are the visitor functions used to walk through and convert
between a native QAPI C data structure and some other format (such as
QObject); the generated functions are named visit_type_FOO() and
visit_type_FOO_members().
1103 1104 1105

The following files are generated:

1106
$(prefix)qapi-visit.c: Visitor function for a particular C type, used
1107 1108 1109 1110 1111
                       to automagically convert QObjects into the
                       corresponding C type and vice-versa, as well
                       as for deallocating memory for an existing C
                       type

1112
$(prefix)qapi-visit.h: Declarations for previously mentioned visitor
1113 1114 1115 1116
                       functions

Example:

1117 1118 1119 1120 1121 1122
    $ cat qapi-generated/example-qapi-visit.h
[Uninteresting stuff omitted...]

    #ifndef EXAMPLE_QAPI_VISIT_H
    #define EXAMPLE_QAPI_VISIT_H

1123 1124 1125
    #include "qapi/qapi-builtin-visit.h"
    #include "example-qapi-types.h"

1126 1127 1128 1129 1130

    void visit_type_UserDefOne_members(Visitor *v, UserDefOne *obj, Error **errp);
    void visit_type_UserDefOne(Visitor *v, const char *name, UserDefOne **obj, Error **errp);
    void visit_type_UserDefOneList(Visitor *v, const char *name, UserDefOneList **obj, Error **errp);

1131 1132
    void visit_type_q_obj_my_command_arg_members(Visitor *v, q_obj_my_command_arg *obj, Error **errp);

1133
    #endif /* EXAMPLE_QAPI_VISIT_H */
1134
    $ cat qapi-generated/example-qapi-visit.c
1135
[Uninteresting stuff omitted...]
1136

1137
    void visit_type_UserDefOne_members(Visitor *v, UserDefOne *obj, Error **errp)
1138 1139
    {
        Error *err = NULL;
M
Markus Armbruster 已提交
1140

1141
        visit_type_int(v, "integer", &obj->integer, &err);
1142 1143 1144
        if (err) {
            goto out;
        }
1145 1146 1147 1148 1149
        if (visit_optional(v, "string", &obj->has_string)) {
            visit_type_str(v, "string", &obj->string, &err);
            if (err) {
                goto out;
            }
1150
        }
1151

1152
    out:
1153 1154
        error_propagate(errp, err);
    }
1155

1156
    void visit_type_UserDefOne(Visitor *v, const char *name, UserDefOne **obj, Error **errp)
1157
    {
1158 1159
        Error *err = NULL;

1160 1161 1162 1163 1164 1165
        visit_start_struct(v, name, (void **)obj, sizeof(UserDefOne), &err);
        if (err) {
            goto out;
        }
        if (!*obj) {
            goto out_obj;
1166
        }
1167
        visit_type_UserDefOne_members(v, *obj, &err);
1168 1169 1170 1171
        if (err) {
            goto out_obj;
        }
        visit_check_struct(v, &err);
1172
    out_obj:
E
Eric Blake 已提交
1173
        visit_end_struct(v, (void **)obj);
1174 1175 1176 1177
        if (err && visit_is_input(v)) {
            qapi_free_UserDefOne(*obj);
            *obj = NULL;
        }
1178
    out:
1179
        error_propagate(errp, err);
1180 1181
    }

1182
    void visit_type_UserDefOneList(Visitor *v, const char *name, UserDefOneList **obj, Error **errp)
1183
    {
1184
        Error *err = NULL;
1185 1186
        UserDefOneList *tail;
        size_t size = sizeof(**obj);
1187

1188
        visit_start_list(v, name, (GenericList **)obj, size, &err);
1189 1190 1191 1192
        if (err) {
            goto out;
        }

1193 1194 1195 1196 1197 1198
        for (tail = *obj; tail;
             tail = (UserDefOneList *)visit_next_list(v, (GenericList *)tail, size)) {
            visit_type_UserDefOne(v, NULL, &tail->value, &err);
            if (err) {
                break;
            }
1199
        }
1200

1201 1202 1203
        if (!err) {
            visit_check_list(v, &err);
        }
E
Eric Blake 已提交
1204
        visit_end_list(v, (void **)obj);
1205 1206 1207 1208
        if (err && visit_is_input(v)) {
            qapi_free_UserDefOneList(*obj);
            *obj = NULL;
        }
1209 1210
    out:
        error_propagate(errp, err);
1211 1212
    }

1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225
    void visit_type_q_obj_my_command_arg_members(Visitor *v, q_obj_my_command_arg *obj, Error **errp)
    {
        Error *err = NULL;

        visit_type_UserDefOneList(v, "arg1", &obj->arg1, &err);
        if (err) {
            goto out;
        }

    out:
        error_propagate(errp, err);
    }

1226 1227
[Uninteresting stuff omitted...]

1228 1229 1230 1231 1232
=== Code generated for commands ===

These are the marshaling/dispatch functions for the commands defined
in the schema.  The generated code provides qmp_marshal_COMMAND(), and
declares qmp_COMMAND() that the user must implement.
1233

1234
The following files are generated:
1235

1236 1237
$(prefix)qapi-commands.c: Command marshal/dispatch functions for each
                          QMP command defined in the schema
1238

1239 1240
$(prefix)qapi-commands.h: Function prototypes for the QMP commands
                          specified in the schema
1241 1242 1243

Example:

1244
    $ cat qapi-generated/example-qapi-commands.h
1245 1246
[Uninteresting stuff omitted...]

1247 1248
    #ifndef EXAMPLE_QAPI_COMMANDS_H
    #define EXAMPLE_QAPI_COMMANDS_H
1249 1250

    #include "example-qapi-types.h"
1251
    #include "qapi/qmp/dispatch.h"
1252 1253

    UserDefOne *qmp_my_command(UserDefOneList *arg1, Error **errp);
1254
    void qmp_marshal_my_command(QDict *args, QObject **ret, Error **errp);
1255
    void example_qmp_init_marshal(QmpCommandList *cmds);
1256

1257
    #endif /* EXAMPLE_QAPI_COMMANDS_H */
1258
    $ cat qapi-generated/example-qapi-commands.c
1259
[Uninteresting stuff omitted...]
1260

1261
    static void qmp_marshal_output_UserDefOne(UserDefOne *ret_in, QObject **ret_out, Error **errp)
1262
    {
1263
        Error *err = NULL;
1264 1265
        Visitor *v;

1266
        v = qobject_output_visitor_new(ret_out);
1267
        visit_type_UserDefOne(v, "unused", &ret_in, &err);
1268 1269
        if (!err) {
            visit_complete(v, ret_out);
1270
        }
1271
        error_propagate(errp, err);
E
Eric Blake 已提交
1272 1273
        visit_free(v);
        v = qapi_dealloc_visitor_new();
1274
        visit_type_UserDefOne(v, "unused", &ret_in, NULL);
E
Eric Blake 已提交
1275
        visit_free(v);
1276 1277
    }

1278
    void qmp_marshal_my_command(QDict *args, QObject **ret, Error **errp)
1279
    {
1280
        Error *err = NULL;
1281
        UserDefOne *retval;
1282
        Visitor *v;
1283
        q_obj_my_command_arg arg = {0};
1284

1285
        v = qobject_input_visitor_new(QOBJECT(args));
1286 1287 1288 1289
        visit_start_struct(v, NULL, NULL, 0, &err);
        if (err) {
            goto out;
        }
1290
        visit_type_q_obj_my_command_arg_members(v, &arg, &err);
1291 1292 1293
        if (!err) {
            visit_check_struct(v, &err);
        }
E
Eric Blake 已提交
1294
        visit_end_struct(v, NULL);
1295
        if (err) {
1296 1297
            goto out;
        }
1298

1299
        retval = qmp_my_command(arg.arg1, &err);
1300
        if (err) {
1301
            goto out;
1302
        }
1303

1304
        qmp_marshal_output_UserDefOne(retval, ret, &err);
1305

1306
    out:
1307
        error_propagate(errp, err);
E
Eric Blake 已提交
1308 1309
        visit_free(v);
        v = qapi_dealloc_visitor_new();
1310
        visit_start_struct(v, NULL, NULL, 0, NULL);
1311
        visit_type_q_obj_my_command_arg_members(v, &arg, NULL);
E
Eric Blake 已提交
1312
        visit_end_struct(v, NULL);
E
Eric Blake 已提交
1313
        visit_free(v);
1314 1315
    }

1316
    void example_qmp_init_marshal(QmpCommandList *cmds)
1317
    {
1318
        QTAILQ_INIT(cmds);
1319

1320 1321 1322
        qmp_register_command(cmds, "my-command",
                             qmp_marshal_my_command, QCO_NO_OPTIONS);
    }
1323

1324 1325
[Uninteresting stuff omitted...]

1326
=== Code generated for events ===
1327

1328 1329 1330 1331
This is the code related to events defined in the schema, providing
qapi_event_send_EVENT().

The following files are created:
1332

1333
$(prefix)qapi-events.h - Function prototypes for each event type, plus an
1334
                        enumeration of all event names
1335

1336
$(prefix)qapi-events.c - Implementation of functions to send an event
1337 1338 1339

Example:

1340
    $ cat qapi-generated/example-qapi-events.h
1341 1342
[Uninteresting stuff omitted...]

1343 1344
    #ifndef EXAMPLE_QAPI_EVENTS_H
    #define EXAMPLE_QAPI_EVENTS_H
1345

1346
    #include "qapi/util.h"
1347 1348 1349
    #include "example-qapi-types.h"


1350
    void qapi_event_send_my_event(void);
1351 1352 1353 1354 1355 1356

    typedef enum example_QAPIEvent {
        EXAMPLE_QAPI_EVENT_MY_EVENT = 0,
        EXAMPLE_QAPI_EVENT__MAX = 1,
    } example_QAPIEvent;

1357
    #define example_QAPIEvent_str(val) \
1358
        qapi_enum_lookup(&example_QAPIEvent_lookup, (val))
1359

1360
    extern const QEnumLookup example_QAPIEvent_lookup;
1361

1362
    #endif /* EXAMPLE_QAPI_EVENTS_H */
1363
    $ cat qapi-generated/example-qapi-events.c
1364 1365
[Uninteresting stuff omitted...]

1366
    void qapi_event_send_my_event(void)
1367 1368 1369
    {
        QDict *qmp;
        QMPEventFuncEmit emit;
1370

1371 1372 1373 1374 1375 1376 1377
        emit = qmp_event_get_func_emit();
        if (!emit) {
            return;
        }

        qmp = qmp_event_build_dict("MY_EVENT");

1378
        emit(EXAMPLE_QAPI_EVENT_MY_EVENT, qmp);
1379

1380
        qobject_unref(qmp);
1381 1382
    }

1383 1384 1385 1386 1387
    const QEnumLookup example_QAPIEvent_lookup = {
        .array = (const char *const[]) {
            [EXAMPLE_QAPI_EVENT_MY_EVENT] = "MY_EVENT",
        },
        .size = EXAMPLE_QAPI_EVENT__MAX
1388
    };
1389

1390 1391
[Uninteresting stuff omitted...]

1392
=== Code generated for introspection ===
1393

1394
The following files are created:
1395

1396
$(prefix)qapi-introspect.c - Defines a string holding a JSON
1397 1398
                            description of the schema

1399
$(prefix)qapi-introspect.h - Declares the above string
1400 1401 1402

Example:

1403
    $ cat qapi-generated/example-qapi-introspect.h
1404 1405
[Uninteresting stuff omitted...]

1406 1407
    #ifndef EXAMPLE_QAPI_INTROSPECT_H
    #define EXAMPLE_QAPI_INTROSPECT_H
1408

1409
    #include "qapi/qmp/qlit.h"
1410

1411 1412 1413
    extern const QLitObject example_qmp_schema_qlit;

    #endif /* EXAMPLE_QAPI_INTROSPECT_H */
1414
    $ cat qapi-generated/example-qapi-introspect.c
1415 1416
[Uninteresting stuff omitted...]

1417 1418
    const QLitObject example_qmp_schema_qlit = QLIT_QLIST(((QLitObject[]) {
        QLIT_QDICT(((QLitDictEntry[]) {
1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429
            { "arg-type", QLIT_QSTR("0"), },
            { "meta-type", QLIT_QSTR("command"), },
            { "name", QLIT_QSTR("my-command"), },
            { "ret-type", QLIT_QSTR("1"), },
            {}
        })),
        QLIT_QDICT(((QLitDictEntry[]) {
            { "arg-type", QLIT_QSTR("2"), },
            { "meta-type", QLIT_QSTR("event"), },
            { "name", QLIT_QSTR("MY_EVENT"), },
            {}
1430 1431 1432
        })),
        QLIT_QDICT(((QLitDictEntry[]) {
            { "members", QLIT_QLIST(((QLitObject[]) {
1433 1434 1435 1436 1437 1438 1439 1440 1441 1442
                QLIT_QDICT(((QLitDictEntry[]) {
                    { "name", QLIT_QSTR("arg1"), },
                    { "type", QLIT_QSTR("[1]"), },
                    {}
                })),
                {}
            })), },
            { "meta-type", QLIT_QSTR("object"), },
            { "name", QLIT_QSTR("0"), },
            {}
1443
        })),
1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489
        QLIT_QDICT(((QLitDictEntry[]) {
            { "members", QLIT_QLIST(((QLitObject[]) {
                QLIT_QDICT(((QLitDictEntry[]) {
                    { "name", QLIT_QSTR("integer"), },
                    { "type", QLIT_QSTR("int"), },
                    {}
                })),
                QLIT_QDICT(((QLitDictEntry[]) {
                    { "default", QLIT_QNULL, },
                    { "name", QLIT_QSTR("string"), },
                    { "type", QLIT_QSTR("str"), },
                    {}
                })),
                {}
            })), },
            { "meta-type", QLIT_QSTR("object"), },
            { "name", QLIT_QSTR("1"), },
            {}
        })),
        QLIT_QDICT(((QLitDictEntry[]) {
            { "members", QLIT_QLIST(((QLitObject[]) {
                {}
            })), },
            { "meta-type", QLIT_QSTR("object"), },
            { "name", QLIT_QSTR("2"), },
            {}
        })),
        QLIT_QDICT(((QLitDictEntry[]) {
            { "element-type", QLIT_QSTR("1"), },
            { "meta-type", QLIT_QSTR("array"), },
            { "name", QLIT_QSTR("[1]"), },
            {}
        })),
        QLIT_QDICT(((QLitDictEntry[]) {
            { "json-type", QLIT_QSTR("int"), },
            { "meta-type", QLIT_QSTR("builtin"), },
            { "name", QLIT_QSTR("int"), },
            {}
        })),
        QLIT_QDICT(((QLitDictEntry[]) {
            { "json-type", QLIT_QSTR("string"), },
            { "meta-type", QLIT_QSTR("builtin"), },
            { "name", QLIT_QSTR("str"), },
            {}
        })),
        {}
1490
    }));
1491 1492

[Uninteresting stuff omitted...]