]> git.proxmox.com Git - mirror_qemu.git/blame - docs/qapi-code-gen.txt
docs/qapi-code-gen.txt: Drop confusing reference to 'gen'
[mirror_qemu.git] / docs / qapi-code-gen.txt
CommitLineData
b84da831
MR
1= How to use the QAPI code generator =
2
6fb55451 3Copyright IBM Corp. 2011
9ee86b85 4Copyright (C) 2012-2016 Red Hat, Inc.
6fb55451
EB
5
6This work is licensed under the terms of the GNU GPL, version 2 or
7later. See the COPYING file in the top-level directory.
8
9== Introduction ==
10
b84da831 11QAPI is a native C API within QEMU which provides management-level
e790e666
EB
12functionality to internal and external users. For external
13users/processes, this interface is made available by a JSON-based wire
14format for the QEMU Monitor Protocol (QMP) for controlling qemu, as
15well as the QEMU Guest Agent (QGA) for communicating with the guest.
363b4262
EB
16The remainder of this document uses "Client JSON Protocol" when
17referring to the wire contents of a QMP or QGA connection.
b84da831 18
363b4262
EB
19To map Client JSON Protocol interfaces to the native C QAPI
20implementations, a JSON-based schema is used to define types and
21function signatures, and a set of scripts is used to generate types,
22signatures, and marshaling/dispatch code. This document will describe
23how the schemas, scripts, and resulting code are used.
b84da831
MR
24
25
26== QMP/Guest agent schema ==
27
e790e666
EB
28A QAPI schema file is designed to be loosely based on JSON
29(http://www.ietf.org/rfc/rfc7159.txt) with changes for quoting style
30and the use of comments; a QAPI schema file is then parsed by a python
31code generation program. A valid QAPI schema consists of a series of
32top-level expressions, with no commas between them. Where
33dictionaries (JSON objects) are used, they are parsed as python
34OrderedDicts so that ordering is preserved (for predictable layout of
35generated C structs and parameter lists). Ordering doesn't matter
36between top-level expressions or the keys within an expression, but
37does matter within dictionary values for 'data' and 'returns' members
38of a single expression. QAPI schema input is written using 'single
363b4262
EB
39quotes' instead of JSON's "double quotes" (in contrast, Client JSON
40Protocol uses no comments, and while input accepts 'single quotes' as
41an extension, output is strict JSON using only "double quotes"). As
42in JSON, trailing commas are not permitted in arrays or dictionaries.
43Input must be ASCII (although QMP supports full Unicode strings, the
44QAPI parser does not). At present, there is no place where a QAPI
45schema requires the use of JSON numbers or null.
e790e666 46
3313b612
MAL
47
48=== Comments ===
49
e790e666 50Comments are allowed; anything between an unquoted # and the following
3313b612
MAL
51newline is ignored.
52
53A multi-line comment that starts and ends with a '##' line is a
54documentation comment. These are parsed by the documentation
55generator, which recognizes certain markup detailed below.
56
57
58==== Documentation markup ====
59
60Comment text starting with '=' is a section title:
61
62 # = Section title
63
64Double the '=' for a subsection title:
65
66 # == Subection title
67
68'|' denotes examples:
69
70 # | Text of the example, may span
71 # | multiple lines
72
73'*' starts an itemized list:
74
75 # * First item, may span
76 # multiple lines
77 # * Second item
78
79You can also use '-' instead of '*'.
80
81A decimal number followed by '.' starts a numbered list:
82
83 # 1. First item, may span
84 # multiple lines
85 # 2. Second item
86
87The actual number doesn't matter. You could even use '*' instead of
88'2.' for the second item.
89
90Lists can't be nested. Blank lines are currently not supported within
91lists.
92
93Additional whitespace between the initial '#' and the comment text is
94permitted.
95
96*foo* and _foo_ are for strong and emphasis styles respectively (they
97do not work over multiple lines). @foo is used to reference a name in
98the schema.
99
100Example:
101
102##
103# = Section
104# == Subsection
105#
106# Some text foo with *strong* and _emphasis_
107# 1. with a list
108# 2. like that
109#
110# And some code:
111# | $ echo foo
112# | -> do this
113# | <- get that
114#
115##
116
117
118==== Expression documentation ====
119
bc52d03f 120Each expression that isn't an include directive may be preceded by a
3313b612
MAL
121documentation block. Such blocks are called expression documentation
122blocks.
123
bc52d03f
MA
124When documentation is required (see pragma 'doc-required'), expression
125documentation blocks are mandatory.
126
3313b612
MAL
127The documentation block consists of a first line naming the
128expression, an optional overview, a description of each argument (for
129commands and events) or member (for structs, unions and alternates),
130and optional tagged sections.
131
132FIXME: the parser accepts these things in almost any order.
133
134Optional arguments / members are tagged with the phrase '#optional',
135often with their default value; and extensions added after the
136expression was first released are also given a '(since x.y.z)'
137comment.
138
139A tagged section starts with one of the following words:
140"Note:"/"Notes:", "Since:", "Example"/"Examples", "Returns:", "TODO:".
141The section ends with the start of a new section.
142
143A 'Since: x.y.z' tagged section lists the release that introduced the
144expression.
145
146For example:
147
148##
149# @BlockStats:
150#
151# Statistics of a virtual block device or a block backing device.
152#
153# @device: #optional If the stats are for a virtual block device, the name
154# corresponding to the virtual block device.
155#
156# @node-name: #optional The node name of the device. (since 2.3)
157#
158# ... more members ...
159#
160# Since: 0.14.0
161##
162{ 'struct': 'BlockStats',
163 'data': {'*device': 'str', '*node-name': 'str',
164 ... more members ... } }
165
166##
167# @query-blockstats:
168#
169# Query the @BlockStats for all virtual block devices.
170#
171# @query-nodes: #optional If true, the command will query all the
172# block nodes ... explain, explain ... (since 2.3)
173#
174# Returns: A list of @BlockStats for each virtual block devices.
175#
176# Since: 0.14.0
177#
178# Example:
179#
180# -> { "execute": "query-blockstats" }
181# <- {
182# ... lots of output ...
183# }
184#
185##
186{ 'command': 'query-blockstats',
187 'data': { '*query-nodes': 'bool' },
188 'returns': ['BlockStats'] }
189
190==== Free-form documentation ====
191
192A documentation block that isn't an expression documentation block is
193a free-form documentation block. These may be used to provide
194additional text and structuring content.
195
196
197=== Schema overview ===
e790e666
EB
198
199The schema sets up a series of types, as well as commands and events
200that will use those types. Forward references are allowed: the parser
201scans in two passes, where the first pass learns all type names, and
202the second validates the schema and generates the code. This allows
203the definition of complex structs that can have mutually recursive
363b4262
EB
204types, and allows for indefinite nesting of Client JSON Protocol that
205satisfies the schema. A type name should not be defined more than
206once. It is permissible for the schema to contain additional types
207not used by any commands or events in the Client JSON Protocol, for
208the side effect of generated C code used internally.
e790e666 209
bc52d03f
MA
210There are eight top-level expressions recognized by the parser:
211'include', 'pragma', 'command', 'struct', 'enum', 'union',
212'alternate', and 'event'. There are several groups of types: simple
213types (a number of built-in types, such as 'int' and 'str'; as well as
214enumerations), complex types (structs and two flavors of unions), and
215alternate types (a choice between other types). The 'command' and
216'event' expressions can refer to existing types by name, or list an
217anonymous type as a dictionary. Listing a type name inside an array
218refers to a single-dimension array of that type; multi-dimension
219arrays are not directly supported (although an array of a complex
220struct that contains an array member is possible).
e790e666 221
79f75981
MA
222All names must begin with a letter, and contain only ASCII letters,
223digits, hyphen, and underscore. There are two exceptions: enum values
224may start with a digit, and names that are downstream extensions (see
225section Downstream extensions) start with underscore.
226
227Names beginning with 'q_' are reserved for the generator, which uses
228them for munging QMP names that resemble C keywords or other
229problematic strings. For example, a member named "default" in qapi
230becomes "q_default" in the generated C code.
231
e790e666
EB
232Types, commands, and events share a common namespace. Therefore,
233generally speaking, type definitions should always use CamelCase for
79f75981
MA
234user-defined type names, while built-in types are lowercase.
235
236Type names ending with 'Kind' or 'List' are reserved for the
237generator, which uses them for implicit union enums and array types,
238respectively.
239
240Command names, and member names within a type, should be all lower
241case with words separated by a hyphen. However, some existing older
242commands and complex types use underscore; when extending such
243expressions, consistency is preferred over blindly avoiding
244underscore.
245
246Event names should be ALL_CAPS with words separated by underscore.
247
248Member names starting with 'has-' or 'has_' are reserved for the
249generator, which uses them for tracking optional members.
e790e666 250
9ee86b85 251Any name (command, event, type, member, or enum value) beginning with
e790e666 252"x-" is marked experimental, and may be withdrawn or changed
79f75981 253incompatibly in a future release.
e790e666
EB
254
255In the rest of this document, usage lines are given for each
256expression type, with literal strings written in lower case and
257placeholders written in capitals. If a literal string includes a
258prefix of '*', that key/value pair can be omitted from the expression.
3b2a8b85 259For example, a usage statement that includes '*base':STRUCT-NAME
e790e666 260means that an expression has an optional key 'base', which if present
3b2a8b85 261must have a value that forms a struct name.
e790e666
EB
262
263
264=== Built-in Types ===
265
f133f2db
MA
266The following types are predefined, and map to C as follows:
267
268 Schema C JSON
269 str char * any JSON string, UTF-8
270 number double any JSON number
271 int int64_t a JSON number without fractional part
272 that fits into the C integer type
273 int8 int8_t likewise
274 int16 int16_t likewise
275 int32 int32_t likewise
276 int64 int64_t likewise
277 uint8 uint8_t likewise
278 uint16 uint16_t likewise
279 uint32 uint32_t likewise
280 uint64 uint64_t likewise
281 size uint64_t like uint64_t, except StringInputVisitor
282 accepts size suffixes
283 bool bool JSON true or false
28770e05 284 any QObject * any JSON value
7264f5c5 285 QType QType JSON string matching enum QType values
51631493 286
a719a27c 287
bc52d03f 288=== Include directives ===
a719a27c 289
e790e666
EB
290Usage: { 'include': STRING }
291
a719a27c
LV
292The QAPI schema definitions can be modularized using the 'include' directive:
293
e790e666 294 { 'include': 'path/to/file.json' }
a719a27c
LV
295
296The directive is evaluated recursively, and include paths are relative to the
e790e666 297file using the directive. Multiple includes of the same file are
4247f839 298idempotent. No other keys should appear in the expression, and the include
e790e666
EB
299value should be a string.
300
301As a matter of style, it is a good idea to have all files be
302self-contained, but at the moment, nothing prevents an included file
303from making a forward reference to a type that is only introduced by
304an outer file. The parser may be made stricter in the future to
305prevent incomplete include files.
a719a27c
LV
306
307
bc52d03f
MA
308=== Pragma directives ===
309
310Usage: { 'pragma': DICT }
311
312The pragma directive lets you control optional generator behavior.
313The dictionary's entries are pragma names and values.
314
315Pragma's scope is currently the complete schema. Setting the same
316pragma to different values in parts of the schema doesn't work.
317
318Pragma 'doc-required' takes a boolean value. If true, documentation
319is required. Default is false.
320
321
3b2a8b85 322=== Struct types ===
51631493 323
3b2a8b85 324Usage: { 'struct': STRING, 'data': DICT, '*base': STRUCT-NAME }
e790e666 325
02a57ae3
EB
326A struct is a dictionary containing a single 'data' key whose value is
327a dictionary; the dictionary may be empty. This corresponds to a
328struct in C or an Object in JSON. Each value of the 'data' dictionary
329must be the name of a type, or a one-element array containing a type
330name. An example of a struct is:
b84da831 331
3b2a8b85 332 { 'struct': 'MyType',
acf8394e 333 'data': { 'member1': 'str', 'member2': 'int', '*member3': 'str' } }
b84da831 334
e790e666 335The use of '*' as a prefix to the name means the member is optional in
363b4262 336the corresponding JSON protocol usage.
cc162655
EB
337
338The default initialization value of an optional argument should not be changed
339between versions of QEMU unless the new default maintains backward
340compatibility to the user-visible behavior of the old default.
341
342With proper documentation, this policy still allows some flexibility; for
343example, documenting that a default of 0 picks an optimal buffer size allows
344one release to declare the optimal size at 512 while another release declares
345the optimal size at 4096 - the user-visible behavior is not the bytes used by
346the buffer, but the fact that the buffer was optimal size.
347
348On input structures (only mentioned in the 'data' side of a command), changing
349from mandatory to optional is safe (older clients will supply the option, and
350newer clients can benefit from the default); changing from optional to
351mandatory is backwards incompatible (older clients may be omitting the option,
352and must continue to work).
353
354On output structures (only mentioned in the 'returns' side of a command),
355changing from mandatory to optional is in general unsafe (older clients may be
9ee86b85
EB
356expecting the member, and could crash if it is missing), although it
357can be done if the only way that the optional argument will be omitted
358is when it is triggered by the presence of a new input flag to the
359command that older clients don't know to send. Changing from optional
360to mandatory is safe.
cc162655
EB
361
362A structure that is used in both input and output of various commands
363must consider the backwards compatibility constraints of both directions
364of use.
622f557f 365
3b2a8b85 366A struct definition can specify another struct as its base.
9ee86b85 367In this case, the members of the base type are included as top-level members
363b4262
EB
368of the new struct's dictionary in the Client JSON Protocol wire
369format. An example definition is:
622f557f 370
3b2a8b85
EB
371 { 'struct': 'BlockdevOptionsGenericFormat', 'data': { 'file': 'str' } }
372 { 'struct': 'BlockdevOptionsGenericCOWFormat',
622f557f
KW
373 'base': 'BlockdevOptionsGenericFormat',
374 'data': { '*backing': 'str' } }
375
376An example BlockdevOptionsGenericCOWFormat object on the wire could use
9ee86b85 377both members like this:
622f557f
KW
378
379 { "file": "/some/place/my-image",
380 "backing": "/some/place/my-backing-file" }
381
e790e666 382
51631493
KW
383=== Enumeration types ===
384
e790e666 385Usage: { 'enum': STRING, 'data': ARRAY-OF-STRING }
351d36e4 386 { 'enum': STRING, '*prefix': STRING, 'data': ARRAY-OF-STRING }
e790e666
EB
387
388An enumeration type is a dictionary containing a single 'data' key
389whose value is a list of strings. An example enumeration is:
b84da831
MR
390
391 { 'enum': 'MyEnum', 'data': [ 'value1', 'value2', 'value3' ] }
392
e790e666
EB
393Nothing prevents an empty enumeration, although it is probably not
394useful. The list of strings should be lower case; if an enum name
395represents multiple words, use '-' between words. The string 'max' is
396not allowed as an enum value, and values should not be repeated.
397
351d36e4
DB
398The enum constants will be named by using a heuristic to turn the
399type name into a set of underscore separated words. For the example
400above, 'MyEnum' will turn into 'MY_ENUM' giving a constant name
401of 'MY_ENUM_VALUE1' for the first value. If the default heuristic
9ee86b85 402does not result in a desirable name, the optional 'prefix' member
351d36e4
DB
403can be used when defining the enum.
404
363b4262
EB
405The enumeration values are passed as strings over the Client JSON
406Protocol, but are encoded as C enum integral values in generated code.
407While the C code starts numbering at 0, it is better to use explicit
e790e666
EB
408comparisons to enum values than implicit comparisons to 0; the C code
409will also include a generated enum member ending in _MAX for tracking
410the size of the enum, useful when using common functions for
411converting between strings and enum values. Since the wire format
412always passes by name, it is acceptable to reorder or add new
363b4262
EB
413enumeration members in any location without breaking clients of Client
414JSON Protocol; however, removing enum values would break
9ee86b85
EB
415compatibility. For any struct that has a member that will only contain
416a finite set of string values, using an enum type for that member is
417better than open-coding the member to be type 'str'.
e790e666
EB
418
419
51631493
KW
420=== Union types ===
421
e790e666 422Usage: { 'union': STRING, 'data': DICT }
ac4338f8 423or: { 'union': STRING, 'data': DICT, 'base': STRUCT-NAME-OR-DICT,
e790e666 424 'discriminator': ENUM-MEMBER-OF-BASE }
51631493 425
e790e666 426Union types are used to let the user choose between several different
7b1b98c4 427variants for an object. There are two flavors: simple (no
02a57ae3 428discriminator or base), and flat (both discriminator and base). A union
7b1b98c4 429type is defined using a data dictionary as explained in the following
02a57ae3
EB
430paragraphs. The data dictionary for either type of union must not
431be empty.
51631493 432
e790e666
EB
433A simple union type defines a mapping from automatic discriminator
434values to data types like in this example:
51631493 435
bd59adce
EB
436 { 'struct': 'BlockdevOptionsFile', 'data': { 'filename': 'str' } }
437 { 'struct': 'BlockdevOptionsQcow2',
438 'data': { 'backing': 'str', '*lazy-refcounts': 'bool' } }
51631493 439
bd59adce
EB
440 { 'union': 'BlockdevOptionsSimple',
441 'data': { 'file': 'BlockdevOptionsFile',
442 'qcow2': 'BlockdevOptionsQcow2' } }
51631493 443
363b4262 444In the Client JSON Protocol, a simple union is represented by a
9ee86b85
EB
445dictionary that contains the 'type' member as a discriminator, and a
446'data' member that is of the specified data type corresponding to the
363b4262 447discriminator value, as in these examples:
51631493 448
bd59adce
EB
449 { "type": "file", "data": { "filename": "/some/place/my-image" } }
450 { "type": "qcow2", "data": { "backing": "/some/place/my-image",
451 "lazy-refcounts": true } }
51631493 452
e790e666
EB
453The generated C code uses a struct containing a union. Additionally,
454an implicit C enum 'NameKind' is created, corresponding to the union
455'Name', for accessing the various branches of the union. No branch of
456the union can be named 'max', as this would collide with the implicit
457enum. The value for each branch can be of any type.
51631493 458
ac4338f8
EB
459A flat union definition avoids nesting on the wire, and specifies a
460set of common members that occur in all variants of the union. The
d33c8a7d 461'base' key must specify either a type name (the type must be a
ac4338f8
EB
462struct, not a union), or a dictionary representing an anonymous type.
463All branches of the union must be complex types, and the top-level
464members of the union dictionary on the wire will be combination of
465members from both the base type and the appropriate branch type (when
466merging two dictionaries, there must be no keys in common). The
467'discriminator' member must be the name of a non-optional enum-typed
468member of the base struct.
51631493 469
e790e666 470The following example enhances the above simple union example by
bd59adce
EB
471adding an optional common member 'read-only', renaming the
472discriminator to something more applicable than the simple union's
473default of 'type', and reducing the number of {} required on the wire:
50f2bdc7 474
94a3f0af 475 { 'enum': 'BlockdevDriver', 'data': [ 'file', 'qcow2' ] }
50f2bdc7 476 { 'union': 'BlockdevOptions',
ac4338f8 477 'base': { 'driver': 'BlockdevDriver', '*read-only': 'bool' },
50f2bdc7 478 'discriminator': 'driver',
bd59adce
EB
479 'data': { 'file': 'BlockdevOptionsFile',
480 'qcow2': 'BlockdevOptionsQcow2' } }
50f2bdc7 481
e790e666
EB
482Resulting in these JSON objects:
483
bd59adce 484 { "driver": "file", "read-only": true,
e790e666 485 "filename": "/some/place/my-image" }
bd59adce
EB
486 { "driver": "qcow2", "read-only": false,
487 "backing": "/some/place/my-image", "lazy-refcounts": true }
e790e666
EB
488
489Notice that in a flat union, the discriminator name is controlled by
490the user, but because it must map to a base member with enum type, the
491code generator can ensure that branches exist for all values of the
492enum (although the order of the keys need not match the declaration of
493the enum). In the resulting generated C data types, a flat union is
9ee86b85
EB
494represented as a struct with the base members included directly, and
495then a union of structures for each branch of the struct.
e790e666
EB
496
497A simple union can always be re-written as a flat union where the base
498class has a single member named 'type', and where each branch of the
3b2a8b85 499union has a struct with a single member named 'data'. That is,
50f2bdc7 500
e790e666 501 { 'union': 'Simple', 'data': { 'one': 'str', 'two': 'int' } }
50f2bdc7 502
e790e666 503is identical on the wire to:
50f2bdc7 504
e790e666 505 { 'enum': 'Enum', 'data': ['one', 'two'] }
3b2a8b85
EB
506 { 'struct': 'Branch1', 'data': { 'data': 'str' } }
507 { 'struct': 'Branch2', 'data': { 'data': 'int' } }
ac4338f8 508 { 'union': 'Flat': 'base': { 'type': 'Enum' }, 'discriminator': 'type',
e790e666 509 'data': { 'one': 'Branch1', 'two': 'Branch2' } }
69dd62df 510
e790e666 511
7b1b98c4 512=== Alternate types ===
69dd62df 513
7b1b98c4
EB
514Usage: { 'alternate': STRING, 'data': DICT }
515
516An alternate type is one that allows a choice between two or more JSON
517data types (string, integer, number, or object, but currently not
518array) on the wire. The definition is similar to a simple union type,
519where each branch of the union names a QAPI type. For example:
520
bd59adce 521 { 'alternate': 'BlockdevRef',
69dd62df
KW
522 'data': { 'definition': 'BlockdevOptions',
523 'reference': 'str' } }
524
7b1b98c4 525Unlike a union, the discriminator string is never passed on the wire
363b4262
EB
526for the Client JSON Protocol. Instead, the value's JSON type serves
527as an implicit discriminator, which in turn means that an alternate
528can only express a choice between types represented differently in
529JSON. If a branch is typed as the 'bool' built-in, the alternate
530accepts true and false; if it is typed as any of the various numeric
531built-ins, it accepts a JSON number; if it is typed as a 'str'
532built-in or named enum type, it accepts a JSON string; and if it is
533typed as a complex type (struct or union), it accepts a JSON object.
534Two different complex types, for instance, aren't permitted, because
535both are represented as a JSON object.
7b1b98c4
EB
536
537The example alternate declaration above allows using both of the
538following example objects:
69dd62df
KW
539
540 { "file": "my_existing_block_device_id" }
541 { "file": { "driver": "file",
bd59adce 542 "read-only": false,
63922c64 543 "filename": "/tmp/mydisk.qcow2" } }
69dd62df
KW
544
545
51631493 546=== Commands ===
b84da831 547
e790e666 548Usage: { 'command': STRING, '*data': COMPLEX-TYPE-NAME-OR-DICT,
c818408e 549 '*returns': TYPE-NAME, '*boxed': true,
e790e666
EB
550 '*gen': false, '*success-response': false }
551
552Commands are defined by using a dictionary containing several members,
553where three members are most common. The 'command' member is a
363b4262
EB
554mandatory string, and determines the "execute" value passed in a
555Client JSON Protocol command exchange.
e790e666
EB
556
557The 'data' argument maps to the "arguments" dictionary passed in as
363b4262
EB
558part of a Client JSON Protocol command. The 'data' member is optional
559and defaults to {} (an empty dictionary). If present, it must be the
315932b5 560string name of a complex type, or a dictionary that declares an
700dc9f5 561anonymous type with the same semantics as a 'struct' expression.
e790e666 562
9ee86b85 563The 'returns' member describes what will appear in the "return" member
363b4262
EB
564of a Client JSON Protocol reply on successful completion of a command.
565The member is optional from the command declaration; if absent, the
9ee86b85 566"return" member will be an empty dictionary. If 'returns' is present,
363b4262 567it must be the string name of a complex or built-in type, a
700dc9f5
MA
568one-element array containing the name of a complex or built-in type.
569Although it is permitted to have the 'returns' member name a built-in
570type or an array of built-in types, any command that does this cannot
571be extended to return additional information in the future; thus, new
572commands should strongly consider returning a dictionary-based type or
573an array of dictionaries, even if the dictionary only contains one
574member at the present.
363b4262
EB
575
576All commands in Client JSON Protocol use a dictionary to report
577failure, with no way to specify that in QAPI. Where the error return
578is different than the usual GenericError class in order to help the
579client react differently to certain error conditions, it is worth
580documenting this in the comments before the command declaration.
e790e666
EB
581
582Some example commands:
583
584 { 'command': 'my-first-command',
585 'data': { 'arg1': 'str', '*arg2': 'str' } }
3b2a8b85 586 { 'struct': 'MyType', 'data': { '*value': 'str' } }
e790e666
EB
587 { 'command': 'my-second-command',
588 'returns': [ 'MyType' ] }
589
363b4262 590which would validate this Client JSON Protocol transaction:
e790e666
EB
591
592 => { "execute": "my-first-command",
593 "arguments": { "arg1": "hello" } }
594 <= { "return": { } }
595 => { "execute": "my-second-command" }
596 <= { "return": [ { "value": "one" }, { } ] }
597
c818408e
EB
598The generator emits a prototype for the user's function implementing
599the command. Normally, 'data' is a dictionary for an anonymous type,
600or names a struct type (possibly empty, but not a union), and its
601members are passed as separate arguments to this function. If the
602command definition includes a key 'boxed' with the boolean value true,
603then 'data' is instead the name of any non-empty complex type
604(struct, union, or alternate), and a pointer to that QAPI type is
605passed as a single argument.
606
607The generator also emits a marshalling function that extracts
608arguments for the user's function out of an input QDict, calls the
609user's function, and if it succeeded, builds an output QObject from
610its return value.
611
e790e666 612In rare cases, QAPI cannot express a type-safe representation of a
2d21291a
MA
613corresponding Client JSON Protocol command. You then have to suppress
614generation of a marshalling function by including a key 'gen' with
615boolean value false, and instead write your own function. Please try
616to avoid adding new commands that rely on this, and instead use
617type-safe unions. For an example of this usage:
e790e666
EB
618
619 { 'command': 'netdev_add',
b8a98326 620 'data': {'type': 'str', 'id': 'str'},
e790e666
EB
621 'gen': false }
622
623Normally, the QAPI schema is used to describe synchronous exchanges,
624where a response is expected. But in some cases, the action of a
625command is expected to change state in a way that a successful
626response is not possible (although the command will still return a
627normal dictionary error on failure). When a successful reply is not
628possible, the command expression should include the optional key
629'success-response' with boolean value false. So far, only QGA makes
9ee86b85 630use of this member.
b84da831 631
b84da831 632
21cd70df
WX
633=== Events ===
634
c818408e
EB
635Usage: { 'event': STRING, '*data': COMPLEX-TYPE-NAME-OR-DICT,
636 '*boxed': true }
e790e666
EB
637
638Events are defined with the keyword 'event'. It is not allowed to
639name an event 'MAX', since the generator also produces a C enumeration
640of all event names with a generated _MAX value at the end. When
641'data' is also specified, additional info will be included in the
3b2a8b85 642event, with similar semantics to a 'struct' expression. Finally there
e790e666
EB
643will be C API generated in qapi-event.h; when called by QEMU code, a
644message with timestamp will be emitted on the wire.
21cd70df
WX
645
646An example event is:
647
648{ 'event': 'EVENT_C',
649 'data': { '*a': 'int', 'b': 'str' } }
650
651Resulting in this JSON object:
652
653{ "event": "EVENT_C",
654 "data": { "b": "test string" },
655 "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
b84da831 656
c818408e
EB
657The generator emits a function to send the event. Normally, 'data' is
658a dictionary for an anonymous type, or names a struct type (possibly
659empty, but not a union), and its members are passed as separate
660arguments to this function. If the event definition includes a key
661'boxed' with the boolean value true, then 'data' is instead the name of
662any non-empty complex type (struct, union, or alternate), and a
663pointer to that QAPI type is passed as a single argument.
664
59a2c4ce 665
79f75981
MA
666=== Downstream extensions ===
667
668QAPI schema names that are externally visible, say in the Client JSON
669Protocol, need to be managed with care. Names starting with a
670downstream prefix of the form __RFQDN_ are reserved for the downstream
671who controls the valid, reverse fully qualified domain name RFQDN.
672RFQDN may only contain ASCII letters, digits, hyphen and period.
673
674Example: Red Hat, Inc. controls redhat.com, and may therefore add a
675downstream command __com.redhat_drive-mirror.
676
677
39a18158
MA
678== Client JSON Protocol introspection ==
679
680Clients of a Client JSON Protocol commonly need to figure out what
681exactly the server (QEMU) supports.
682
683For this purpose, QMP provides introspection via command
684query-qmp-schema. QGA currently doesn't support introspection.
685
39a65e2c
EB
686While Client JSON Protocol wire compatibility should be maintained
687between qemu versions, we cannot make the same guarantees for
688introspection stability. For example, one version of qemu may provide
689a non-variant optional member of a struct, and a later version rework
690the member to instead be non-optional and associated with a variant.
691Likewise, one version of qemu may list a member with open-ended type
692'str', and a later version could convert it to a finite set of strings
693via an enum type; or a member may be converted from a specific type to
694an alternate that represents a choice between the original type and
695something else.
696
39a18158
MA
697query-qmp-schema returns a JSON array of SchemaInfo objects. These
698objects together describe the wire ABI, as defined in the QAPI schema.
f5455044
EB
699There is no specified order to the SchemaInfo objects returned; a
700client must search for a particular name throughout the entire array
701to learn more about that name, but is at least guaranteed that there
702will be no collisions between type, command, and event names.
39a18158
MA
703
704However, the SchemaInfo can't reflect all the rules and restrictions
705that apply to QMP. It's interface introspection (figuring out what's
706there), not interface specification. The specification is in the QAPI
707schema. To understand how QMP is to be used, you need to study the
708QAPI schema.
709
710Like any other command, query-qmp-schema is itself defined in the QAPI
711schema, along with the SchemaInfo type. This text attempts to give an
712overview how things work. For details you need to consult the QAPI
713schema.
714
715SchemaInfo objects have common members "name" and "meta-type", and
716additional variant members depending on the value of meta-type.
717
718Each SchemaInfo object describes a wire ABI entity of a certain
719meta-type: a command, event or one of several kinds of type.
720
1a9a507b
MA
721SchemaInfo for commands and events have the same name as in the QAPI
722schema.
39a18158
MA
723
724Command and event names are part of the wire ABI, but type names are
1a9a507b
MA
725not. Therefore, the SchemaInfo for types have auto-generated
726meaningless names. For readability, the examples in this section use
727meaningful type names instead.
728
729To examine a type, start with a command or event using it, then follow
730references by name.
39a18158
MA
731
732QAPI schema definitions not reachable that way are omitted.
733
734The SchemaInfo for a command has meta-type "command", and variant
735members "arg-type" and "ret-type". On the wire, the "arguments"
736member of a client's "execute" command must conform to the object type
737named by "arg-type". The "return" member that the server passes in a
738success response conforms to the type named by "ret-type".
739
740If the command takes no arguments, "arg-type" names an object type
741without members. Likewise, if the command returns nothing, "ret-type"
742names an object type without members.
743
744Example: the SchemaInfo for command query-qmp-schema
745
746 { "name": "query-qmp-schema", "meta-type": "command",
7599697c 747 "arg-type": "q_empty", "ret-type": "SchemaInfoList" }
39a18158 748
7599697c 749 Type "q_empty" is an automatic object type without members, and type
39a18158
MA
750 "SchemaInfoList" is the array of SchemaInfo type.
751
752The SchemaInfo for an event has meta-type "event", and variant member
753"arg-type". On the wire, a "data" member that the server passes in an
754event conforms to the object type named by "arg-type".
755
756If the event carries no additional information, "arg-type" names an
757object type without members. The event may not have a data member on
758the wire then.
759
760Each command or event defined with dictionary-valued 'data' in the
1a9a507b 761QAPI schema implicitly defines an object type.
39a18158
MA
762
763Example: the SchemaInfo for EVENT_C from section Events
764
765 { "name": "EVENT_C", "meta-type": "event",
7599697c 766 "arg-type": "q_obj-EVENT_C-arg" }
39a18158 767
7599697c 768 Type "q_obj-EVENT_C-arg" is an implicitly defined object type with
39a18158
MA
769 the two members from the event's definition.
770
771The SchemaInfo for struct and union types has meta-type "object".
772
773The SchemaInfo for a struct type has variant member "members".
774
775The SchemaInfo for a union type additionally has variant members "tag"
776and "variants".
777
778"members" is a JSON array describing the object's common members, if
779any. Each element is a JSON object with members "name" (the member's
780name), "type" (the name of its type), and optionally "default". The
781member is optional if "default" is present. Currently, "default" can
782only have value null. Other values are reserved for future
f5455044
EB
783extensions. The "members" array is in no particular order; clients
784must search the entire object when learning whether a particular
785member is supported.
39a18158
MA
786
787Example: the SchemaInfo for MyType from section Struct types
788
789 { "name": "MyType", "meta-type": "object",
790 "members": [
791 { "name": "member1", "type": "str" },
792 { "name": "member2", "type": "int" },
793 { "name": "member3", "type": "str", "default": null } ] }
794
795"tag" is the name of the common member serving as type tag.
796"variants" is a JSON array describing the object's variant members.
797Each element is a JSON object with members "case" (the value of type
798tag this element applies to) and "type" (the name of an object type
f5455044
EB
799that provides the variant members for this type tag value). The
800"variants" array is in no particular order, and is not guaranteed to
801list cases in the same order as the corresponding "tag" enum type.
39a18158
MA
802
803Example: the SchemaInfo for flat union BlockdevOptions from section
804Union types
805
806 { "name": "BlockdevOptions", "meta-type": "object",
807 "members": [
808 { "name": "driver", "type": "BlockdevDriver" },
bd59adce 809 { "name": "read-only", "type": "bool", "default": null } ],
39a18158
MA
810 "tag": "driver",
811 "variants": [
bd59adce
EB
812 { "case": "file", "type": "BlockdevOptionsFile" },
813 { "case": "qcow2", "type": "BlockdevOptionsQcow2" } ] }
39a18158
MA
814
815Note that base types are "flattened": its members are included in the
816"members" array.
817
818A simple union implicitly defines an enumeration type for its implicit
819discriminator (called "type" on the wire, see section Union types).
39a18158
MA
820
821A simple union implicitly defines an object type for each of its
1a9a507b 822variants.
39a18158 823
bd59adce 824Example: the SchemaInfo for simple union BlockdevOptionsSimple from section
39a18158
MA
825Union types
826
bd59adce 827 { "name": "BlockdevOptionsSimple", "meta-type": "object",
39a18158 828 "members": [
bd59adce 829 { "name": "type", "type": "BlockdevOptionsSimpleKind" } ],
39a18158
MA
830 "tag": "type",
831 "variants": [
bd59adce
EB
832 { "case": "file", "type": "q_obj-BlockdevOptionsFile-wrapper" },
833 { "case": "qcow2", "type": "q_obj-BlockdevOptionsQcow2-wrapper" } ] }
39a18158 834
bd59adce
EB
835 Enumeration type "BlockdevOptionsSimpleKind" and the object types
836 "q_obj-BlockdevOptionsFile-wrapper", "q_obj-BlockdevOptionsQcow2-wrapper"
837 are implicitly defined.
39a18158
MA
838
839The SchemaInfo for an alternate type has meta-type "alternate", and
840variant member "members". "members" is a JSON array. Each element is
841a JSON object with member "type", which names a type. Values of the
f5455044
EB
842alternate type conform to exactly one of its member types. There is
843no guarantee on the order in which "members" will be listed.
39a18158 844
bd59adce 845Example: the SchemaInfo for BlockdevRef from section Alternate types
39a18158 846
bd59adce 847 { "name": "BlockdevRef", "meta-type": "alternate",
39a18158
MA
848 "members": [
849 { "type": "BlockdevOptions" },
850 { "type": "str" } ] }
851
852The SchemaInfo for an array type has meta-type "array", and variant
853member "element-type", which names the array's element type. Array
ce5fcb47
EB
854types are implicitly defined. For convenience, the array's name may
855resemble the element type; however, clients should examine member
856"element-type" instead of making assumptions based on parsing member
857"name".
39a18158
MA
858
859Example: the SchemaInfo for ['str']
860
ce5fcb47 861 { "name": "[str]", "meta-type": "array",
39a18158
MA
862 "element-type": "str" }
863
864The SchemaInfo for an enumeration type has meta-type "enum" and
f5455044
EB
865variant member "values". The values are listed in no particular
866order; clients must search the entire enum when learning whether a
867particular value is supported.
39a18158
MA
868
869Example: the SchemaInfo for MyEnum from section Enumeration types
870
871 { "name": "MyEnum", "meta-type": "enum",
872 "values": [ "value1", "value2", "value3" ] }
873
874The SchemaInfo for a built-in type has the same name as the type in
875the QAPI schema (see section Built-in Types), with one exception
876detailed below. It has variant member "json-type" that shows how
877values of this type are encoded on the wire.
878
879Example: the SchemaInfo for str
880
881 { "name": "str", "meta-type": "builtin", "json-type": "string" }
882
883The QAPI schema supports a number of integer types that only differ in
884how they map to C. They are identical as far as SchemaInfo is
885concerned. Therefore, they get all mapped to a single type "int" in
886SchemaInfo.
887
888As explained above, type names are not part of the wire ABI. Not even
889the names of built-in types. Clients should examine member
890"json-type" instead of hard-coding names of built-in types.
891
892
b84da831
MR
893== Code generation ==
894
9ee86b85 895Schemas are fed into five scripts to generate all the code/files that,
39a18158
MA
896paired with the core QAPI libraries, comprise everything required to
897take JSON commands read in by a Client JSON Protocol server, unmarshal
898the arguments into the underlying C types, call into the corresponding
9ee86b85
EB
899C function, map the response back to a Client JSON Protocol response
900to be returned to the user, and introspect the commands.
b84da831 901
9ee86b85
EB
902As an example, we'll use the following schema, which describes a
903single complex user-defined type, along with command which takes a
904list of that type as a parameter, and returns a single element of that
905type. The user is responsible for writing the implementation of
906qmp_my_command(); everything else is produced by the generator.
b84da831 907
87a560c4 908 $ cat example-schema.json
3b2a8b85 909 { 'struct': 'UserDefOne',
9ee86b85 910 'data': { 'integer': 'int', '*string': 'str' } }
b84da831
MR
911
912 { 'command': 'my-command',
9ee86b85 913 'data': { 'arg1': ['UserDefOne'] },
b84da831 914 'returns': 'UserDefOne' }
b84da831 915
59a2c4ce
EB
916 { 'event': 'MY_EVENT' }
917
9ee86b85
EB
918For a more thorough look at generated code, the testsuite includes
919tests/qapi-schema/qapi-schema-tests.json that covers more examples of
920what the generator will accept, and compiles the resulting C code as
921part of 'make check-unit'.
922
b84da831
MR
923=== scripts/qapi-types.py ===
924
9ee86b85
EB
925Used to generate the C types defined by a schema, along with
926supporting code. The following files are created:
b84da831
MR
927
928$(prefix)qapi-types.h - C types corresponding to types defined in
929 the schema you pass in
930$(prefix)qapi-types.c - Cleanup functions for the above C types
931
932The $(prefix) is an optional parameter used as a namespace to keep the
933generated code from one schema/code-generation separated from others so code
934can be generated/used from multiple schemas without clobbering previously
935created code.
936
937Example:
938
87a560c4 939 $ python scripts/qapi-types.py --output-dir="qapi-generated" \
16d80f61 940 --prefix="example-" example-schema.json
9ee86b85
EB
941 $ cat qapi-generated/example-qapi-types.h
942[Uninteresting stuff omitted...]
943
944 #ifndef EXAMPLE_QAPI_TYPES_H
945 #define EXAMPLE_QAPI_TYPES_H
946
947[Built-in types omitted...]
948
949 typedef struct UserDefOne UserDefOne;
950
951 typedef struct UserDefOneList UserDefOneList;
952
953 struct UserDefOne {
954 int64_t integer;
955 bool has_string;
956 char *string;
957 };
958
959 void qapi_free_UserDefOne(UserDefOne *obj);
960
961 struct UserDefOneList {
962 UserDefOneList *next;
963 UserDefOne *value;
964 };
965
966 void qapi_free_UserDefOneList(UserDefOneList *obj);
967
968 #endif
87a560c4 969 $ cat qapi-generated/example-qapi-types.c
6e2bb3ec
MA
970[Uninteresting stuff omitted...]
971
2b162ccb 972 void qapi_free_UserDefOne(UserDefOne *obj)
6e2bb3ec 973 {
6e2bb3ec
MA
974 Visitor *v;
975
976 if (!obj) {
977 return;
978 }
979
2c0ef9f4 980 v = qapi_dealloc_visitor_new();
9ee86b85 981 visit_type_UserDefOne(v, NULL, &obj, NULL);
2c0ef9f4 982 visit_free(v);
6e2bb3ec 983 }
b84da831 984
2b162ccb 985 void qapi_free_UserDefOneList(UserDefOneList *obj)
b84da831 986 {
b84da831
MR
987 Visitor *v;
988
989 if (!obj) {
990 return;
991 }
992
2c0ef9f4 993 v = qapi_dealloc_visitor_new();
9ee86b85 994 visit_type_UserDefOneList(v, NULL, &obj, NULL);
2c0ef9f4 995 visit_free(v);
b84da831 996 }
b84da831 997
b84da831
MR
998=== scripts/qapi-visit.py ===
999
9ee86b85
EB
1000Used to generate the visitor functions used to walk through and
1001convert between a native QAPI C data structure and some other format
1002(such as QObject); the generated functions are named visit_type_FOO()
1003and visit_type_FOO_members().
b84da831
MR
1004
1005The following files are generated:
1006
1007$(prefix)qapi-visit.c: visitor function for a particular C type, used
1008 to automagically convert QObjects into the
1009 corresponding C type and vice-versa, as well
1010 as for deallocating memory for an existing C
1011 type
1012
1013$(prefix)qapi-visit.h: declarations for previously mentioned visitor
1014 functions
1015
1016Example:
1017
87a560c4 1018 $ python scripts/qapi-visit.py --output-dir="qapi-generated"
16d80f61 1019 --prefix="example-" example-schema.json
9ee86b85
EB
1020 $ cat qapi-generated/example-qapi-visit.h
1021[Uninteresting stuff omitted...]
1022
1023 #ifndef EXAMPLE_QAPI_VISIT_H
1024 #define EXAMPLE_QAPI_VISIT_H
1025
1026[Visitors for built-in types omitted...]
1027
1028 void visit_type_UserDefOne_members(Visitor *v, UserDefOne *obj, Error **errp);
1029 void visit_type_UserDefOne(Visitor *v, const char *name, UserDefOne **obj, Error **errp);
1030 void visit_type_UserDefOneList(Visitor *v, const char *name, UserDefOneList **obj, Error **errp);
1031
1032 #endif
87a560c4 1033 $ cat qapi-generated/example-qapi-visit.c
6e2bb3ec 1034[Uninteresting stuff omitted...]
b84da831 1035
9ee86b85 1036 void visit_type_UserDefOne_members(Visitor *v, UserDefOne *obj, Error **errp)
6e2bb3ec
MA
1037 {
1038 Error *err = NULL;
3a864e7c 1039
9ee86b85 1040 visit_type_int(v, "integer", &obj->integer, &err);
297a3646
MA
1041 if (err) {
1042 goto out;
1043 }
9ee86b85
EB
1044 if (visit_optional(v, "string", &obj->has_string)) {
1045 visit_type_str(v, "string", &obj->string, &err);
1046 if (err) {
1047 goto out;
1048 }
297a3646 1049 }
6e2bb3ec 1050
297a3646 1051 out:
6e2bb3ec
MA
1052 error_propagate(errp, err);
1053 }
b84da831 1054
9ee86b85 1055 void visit_type_UserDefOne(Visitor *v, const char *name, UserDefOne **obj, Error **errp)
b84da831 1056 {
297a3646
MA
1057 Error *err = NULL;
1058
9ee86b85
EB
1059 visit_start_struct(v, name, (void **)obj, sizeof(UserDefOne), &err);
1060 if (err) {
1061 goto out;
1062 }
1063 if (!*obj) {
1064 goto out_obj;
6e2bb3ec 1065 }
9ee86b85 1066 visit_type_UserDefOne_members(v, *obj, &err);
15c2f669
EB
1067 if (err) {
1068 goto out_obj;
1069 }
1070 visit_check_struct(v, &err);
9ee86b85 1071 out_obj:
1158bb2a 1072 visit_end_struct(v, (void **)obj);
68ab47e4
EB
1073 if (err && visit_is_input(v)) {
1074 qapi_free_UserDefOne(*obj);
1075 *obj = NULL;
1076 }
9ee86b85 1077 out:
297a3646 1078 error_propagate(errp, err);
b84da831
MR
1079 }
1080
9ee86b85 1081 void visit_type_UserDefOneList(Visitor *v, const char *name, UserDefOneList **obj, Error **errp)
b84da831 1082 {
6e2bb3ec 1083 Error *err = NULL;
d9f62dde
EB
1084 UserDefOneList *tail;
1085 size_t size = sizeof(**obj);
6e2bb3ec 1086
d9f62dde 1087 visit_start_list(v, name, (GenericList **)obj, size, &err);
297a3646
MA
1088 if (err) {
1089 goto out;
1090 }
1091
d9f62dde
EB
1092 for (tail = *obj; tail;
1093 tail = (UserDefOneList *)visit_next_list(v, (GenericList *)tail, size)) {
1094 visit_type_UserDefOne(v, NULL, &tail->value, &err);
1095 if (err) {
1096 break;
1097 }
b84da831 1098 }
297a3646 1099
1158bb2a 1100 visit_end_list(v, (void **)obj);
68ab47e4
EB
1101 if (err && visit_is_input(v)) {
1102 qapi_free_UserDefOneList(*obj);
1103 *obj = NULL;
1104 }
297a3646
MA
1105 out:
1106 error_propagate(errp, err);
b84da831 1107 }
b84da831 1108
b84da831
MR
1109=== scripts/qapi-commands.py ===
1110
9ee86b85
EB
1111Used to generate the marshaling/dispatch functions for the commands
1112defined in the schema. The generated code implements
bd6092e4
MAL
1113qmp_marshal_COMMAND() (registered automatically), and declares
1114qmp_COMMAND() that the user must implement. The following files are
1115generated:
b84da831
MR
1116
1117$(prefix)qmp-marshal.c: command marshal/dispatch functions for each
1118 QMP command defined in the schema. Functions
1119 generated by qapi-visit.py are used to
2542bfd5 1120 convert QObjects received from the wire into
b84da831
MR
1121 function parameters, and uses the same
1122 visitor functions to convert native C return
1123 values to QObjects from transmission back
1124 over the wire.
1125
1126$(prefix)qmp-commands.h: Function prototypes for the QMP commands
1127 specified in the schema.
1128
1129Example:
1130
59a2c4ce 1131 $ python scripts/qapi-commands.py --output-dir="qapi-generated"
16d80f61 1132 --prefix="example-" example-schema.json
9ee86b85
EB
1133 $ cat qapi-generated/example-qmp-commands.h
1134[Uninteresting stuff omitted...]
1135
1136 #ifndef EXAMPLE_QMP_COMMANDS_H
1137 #define EXAMPLE_QMP_COMMANDS_H
1138
1139 #include "example-qapi-types.h"
1140 #include "qapi/qmp/qdict.h"
1141 #include "qapi/error.h"
1142
1143 UserDefOne *qmp_my_command(UserDefOneList *arg1, Error **errp);
1144
1145 #endif
87a560c4 1146 $ cat qapi-generated/example-qmp-marshal.c
6e2bb3ec 1147[Uninteresting stuff omitted...]
b84da831 1148
56d92b00 1149 static void qmp_marshal_output_UserDefOne(UserDefOne *ret_in, QObject **ret_out, Error **errp)
b84da831 1150 {
2a0f50e8 1151 Error *err = NULL;
b84da831
MR
1152 Visitor *v;
1153
7d5e199a 1154 v = qobject_output_visitor_new(ret_out);
9ee86b85 1155 visit_type_UserDefOne(v, "unused", &ret_in, &err);
3b098d56
EB
1156 if (!err) {
1157 visit_complete(v, ret_out);
6e2bb3ec 1158 }
2a0f50e8 1159 error_propagate(errp, err);
2c0ef9f4
EB
1160 visit_free(v);
1161 v = qapi_dealloc_visitor_new();
9ee86b85 1162 visit_type_UserDefOne(v, "unused", &ret_in, NULL);
2c0ef9f4 1163 visit_free(v);
b84da831
MR
1164 }
1165
7fad30f0 1166 static void qmp_marshal_my_command(QDict *args, QObject **ret, Error **errp)
b84da831 1167 {
2a0f50e8 1168 Error *err = NULL;
3f99144c 1169 UserDefOne *retval;
b84da831 1170 Visitor *v;
9ee86b85 1171 UserDefOneList *arg1 = NULL;
b84da831 1172
048abb7b 1173 v = qobject_input_visitor_new(QOBJECT(args));
ed841535
EB
1174 visit_start_struct(v, NULL, NULL, 0, &err);
1175 if (err) {
1176 goto out;
1177 }
9ee86b85 1178 visit_type_UserDefOneList(v, "arg1", &arg1, &err);
15c2f669
EB
1179 if (!err) {
1180 visit_check_struct(v, &err);
1181 }
1158bb2a 1182 visit_end_struct(v, NULL);
2a0f50e8 1183 if (err) {
b84da831
MR
1184 goto out;
1185 }
297a3646 1186
2a0f50e8
EB
1187 retval = qmp_my_command(arg1, &err);
1188 if (err) {
297a3646 1189 goto out;
6e2bb3ec 1190 }
b84da831 1191
2a0f50e8 1192 qmp_marshal_output_UserDefOne(retval, ret, &err);
297a3646 1193
b84da831 1194 out:
2a0f50e8 1195 error_propagate(errp, err);
2c0ef9f4
EB
1196 visit_free(v);
1197 v = qapi_dealloc_visitor_new();
ed841535 1198 visit_start_struct(v, NULL, NULL, 0, NULL);
9ee86b85 1199 visit_type_UserDefOneList(v, "arg1", &arg1, NULL);
1158bb2a 1200 visit_end_struct(v, NULL);
2c0ef9f4 1201 visit_free(v);
b84da831
MR
1202 }
1203
1204 static void qmp_init_marshal(void)
1205 {
7fad30f0 1206 qmp_register_command("my-command", qmp_marshal_my_command, QCO_NO_OPTIONS);
b84da831
MR
1207 }
1208
1209 qapi_init(qmp_init_marshal);
59a2c4ce
EB
1210
1211=== scripts/qapi-event.py ===
1212
9ee86b85
EB
1213Used to generate the event-related C code defined by a schema, with
1214implementations for qapi_event_send_FOO(). The following files are
1215created:
59a2c4ce
EB
1216
1217$(prefix)qapi-event.h - Function prototypes for each event type, plus an
1218 enumeration of all event names
1219$(prefix)qapi-event.c - Implementation of functions to send an event
1220
1221Example:
1222
1223 $ python scripts/qapi-event.py --output-dir="qapi-generated"
16d80f61 1224 --prefix="example-" example-schema.json
9ee86b85
EB
1225 $ cat qapi-generated/example-qapi-event.h
1226[Uninteresting stuff omitted...]
1227
1228 #ifndef EXAMPLE_QAPI_EVENT_H
1229 #define EXAMPLE_QAPI_EVENT_H
1230
1231 #include "qapi/error.h"
1232 #include "qapi/qmp/qdict.h"
1233 #include "example-qapi-types.h"
1234
1235
1236 void qapi_event_send_my_event(Error **errp);
1237
1238 typedef enum example_QAPIEvent {
1239 EXAMPLE_QAPI_EVENT_MY_EVENT = 0,
1240 EXAMPLE_QAPI_EVENT__MAX = 1,
1241 } example_QAPIEvent;
1242
1243 extern const char *const example_QAPIEvent_lookup[];
1244
1245 #endif
59a2c4ce
EB
1246 $ cat qapi-generated/example-qapi-event.c
1247[Uninteresting stuff omitted...]
1248
1249 void qapi_event_send_my_event(Error **errp)
1250 {
1251 QDict *qmp;
2a0f50e8 1252 Error *err = NULL;
59a2c4ce
EB
1253 QMPEventFuncEmit emit;
1254 emit = qmp_event_get_func_emit();
1255 if (!emit) {
1256 return;
1257 }
1258
1259 qmp = qmp_event_build_dict("MY_EVENT");
1260
2a0f50e8 1261 emit(EXAMPLE_QAPI_EVENT_MY_EVENT, qmp, &err);
59a2c4ce 1262
2a0f50e8 1263 error_propagate(errp, err);
59a2c4ce
EB
1264 QDECREF(qmp);
1265 }
1266
efd2eaa6
MA
1267 const char *const example_QAPIEvent_lookup[] = {
1268 [EXAMPLE_QAPI_EVENT_MY_EVENT] = "MY_EVENT",
7fb1cf16 1269 [EXAMPLE_QAPI_EVENT__MAX] = NULL,
59a2c4ce 1270 };
39a18158
MA
1271
1272=== scripts/qapi-introspect.py ===
1273
1274Used to generate the introspection C code for a schema. The following
1275files are created:
1276
1277$(prefix)qmp-introspect.c - Defines a string holding a JSON
1278 description of the schema.
1279$(prefix)qmp-introspect.h - Declares the above string.
1280
1281Example:
1282
1283 $ python scripts/qapi-introspect.py --output-dir="qapi-generated"
1284 --prefix="example-" example-schema.json
39a18158
MA
1285 $ cat qapi-generated/example-qmp-introspect.h
1286[Uninteresting stuff omitted...]
1287
1288 #ifndef EXAMPLE_QMP_INTROSPECT_H
1289 #define EXAMPLE_QMP_INTROSPECT_H
1290
1291 extern const char example_qmp_schema_json[];
1292
1293 #endif
9ee86b85
EB
1294 $ cat qapi-generated/example-qmp-introspect.c
1295[Uninteresting stuff omitted...]
1296
1297 const char example_qmp_schema_json[] = "["
1298 "{\"arg-type\": \"0\", \"meta-type\": \"event\", \"name\": \"MY_EVENT\"}, "
1299 "{\"arg-type\": \"1\", \"meta-type\": \"command\", \"name\": \"my-command\", \"ret-type\": \"2\"}, "
1300 "{\"members\": [], \"meta-type\": \"object\", \"name\": \"0\"}, "
1301 "{\"members\": [{\"name\": \"arg1\", \"type\": \"[2]\"}], \"meta-type\": \"object\", \"name\": \"1\"}, "
1302 "{\"members\": [{\"name\": \"integer\", \"type\": \"int\"}, {\"default\": null, \"name\": \"string\", \"type\": \"str\"}], \"meta-type\": \"object\", \"name\": \"2\"}, "
1303 "{\"element-type\": \"2\", \"meta-type\": \"array\", \"name\": \"[2]\"}, "
1304 "{\"json-type\": \"int\", \"meta-type\": \"builtin\", \"name\": \"int\"}, "
1305 "{\"json-type\": \"string\", \"meta-type\": \"builtin\", \"name\": \"str\"}]";