mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00

New option will be used to allow commands, which are prepared/need to run, during preconfig state. Other commands that should be able to run in preconfig state, should be amended to not expect machine in initialized state or deal with it. For compatibility reasons, commands that don't use new flag 'allow-preconfig' explicitly are not permitted to run in preconfig state but allowed in all other states like they used to be. Within this patch allow following commands in preconfig state: qmp_capabilities query-qmp-schema query-commands query-command-line-options query-status exit-preconfig to allow qmp connection, basic introspection and moving to the next state. PS: set-numa-node and query-hotpluggable-cpus will be enabled later in a separate patches. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <1526057503-39287-1-git-send-email-imammedo@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> [ehabkost: Changed "since 2.13" to "since 3.0"] Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
#
|
|
# QAPI parser test harness
|
|
#
|
|
# Copyright (c) 2013 Red Hat Inc.
|
|
#
|
|
# Authors:
|
|
# Markus Armbruster <armbru@redhat.com>
|
|
#
|
|
# This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
# See the COPYING file in the top-level directory.
|
|
#
|
|
|
|
from __future__ import print_function
|
|
import sys
|
|
from qapi.common import QAPIError, QAPISchema, QAPISchemaVisitor
|
|
|
|
|
|
class QAPISchemaTestVisitor(QAPISchemaVisitor):
|
|
|
|
def visit_module(self, name):
|
|
print('module %s' % name)
|
|
|
|
def visit_include(self, name, info):
|
|
print('include %s' % name)
|
|
|
|
def visit_enum_type(self, name, info, values, prefix):
|
|
print('enum %s %s' % (name, values))
|
|
if prefix:
|
|
print(' prefix %s' % prefix)
|
|
|
|
def visit_object_type(self, name, info, base, members, variants):
|
|
print('object %s' % name)
|
|
if base:
|
|
print(' base %s' % base.name)
|
|
for m in members:
|
|
print(' member %s: %s optional=%s' % \
|
|
(m.name, m.type.name, m.optional))
|
|
self._print_variants(variants)
|
|
|
|
def visit_alternate_type(self, name, info, variants):
|
|
print('alternate %s' % name)
|
|
self._print_variants(variants)
|
|
|
|
def visit_command(self, name, info, arg_type, ret_type, gen,
|
|
success_response, boxed, allow_oob, allow_preconfig):
|
|
print('command %s %s -> %s' % \
|
|
(name, arg_type and arg_type.name, ret_type and ret_type.name))
|
|
print(' gen=%s success_response=%s boxed=%s oob=%s' % \
|
|
(gen, success_response, boxed, allow_oob))
|
|
|
|
def visit_event(self, name, info, arg_type, boxed):
|
|
print('event %s %s' % (name, arg_type and arg_type.name))
|
|
print(' boxed=%s' % boxed)
|
|
|
|
@staticmethod
|
|
def _print_variants(variants):
|
|
if variants:
|
|
print(' tag %s' % variants.tag_member.name)
|
|
for v in variants.variants:
|
|
print(' case %s: %s' % (v.name, v.type.name))
|
|
|
|
|
|
try:
|
|
schema = QAPISchema(sys.argv[1])
|
|
except QAPIError as err:
|
|
print(err, file=sys.stderr)
|
|
exit(1)
|
|
|
|
schema.visit(QAPISchemaTestVisitor())
|
|
|
|
for doc in schema.docs:
|
|
if doc.symbol:
|
|
print('doc symbol=%s' % doc.symbol)
|
|
else:
|
|
print('doc freeform')
|
|
print(' body=\n%s' % doc.body.text)
|
|
for arg, section in doc.args.items():
|
|
print(' arg=%s\n%s' % (arg, section.text))
|
|
for section in doc.sections:
|
|
print(' section=%s\n%s' % (section.name, section.text))
|