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