On 09/15/2015 11:46 AM, Eric Blake wrote: > On 09/14/2015 08:27 PM, Wen Congyang wrote: >>> Building fails: >>> GEN qmp-commands.h >>> In file included from /work/src/qemu/qapi-schema.json:9: >>> In file included from /work/src/qemu/qapi/block.json:6: >>> /work/src/qemu/qapi/block-core.json:1844: Flat union 'BlockdevOptionsNBD' >>> must have a string base field >>> Makefile:286: recipe for target 'qmp-commands.h' failed >>> make: *** [qmp-commands.h] Error 1 > > Yep, doesn't work until pending qapi patches land.
This patchset: qapi: QMP introspection? > >>> >>> What about this: >>> { 'struct': 'BlockdevOptionsNBDBase', >>> 'data': { 'transport': 'NBDTransport', 'export': 'str' } } >>> { 'union': 'BlockdevOptionsNBD', >>> 'base': 'BlockdevOptionsNBDBase', >>> 'discriminator': 'transport', >>> 'data': { 'unix': 'NBDUnix', 'tcp': 'NBDInet', 'udp': 'NBDInet' } } >> >> Another problem: >> In file included from /work/src/qemu/qapi-schema.json:9: >> In file included from /work/src/qemu/qapi/block.json:6: >> /work/src/qemu/qapi/block-core.json:1866: Member 'nbd' of union >> 'BlockdevOptions' cannot use union type 'BlockdevOptionsNBD' >> Makefile:286: recipe for target 'qmp-commands.h' failed > > Yep. Artificial restriction; we hope to lift it soon, but don't have > enough qapi patches in place for that one yet (I have not posted my work > in progress to get us that far). > > Possible workaround in the meantime - instead of trying to go with a > nice flat union (where all QMP keys are in the same {} level), we can > use nesting (structs that add another {} to include the unions). How to include the unions to a structs? Use 'base'? Thanks Wen Congyang >