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