diff options
author | Markus Armbruster <armbru@redhat.com> | 2021-10-28 12:25:20 +0200 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2021-10-29 21:28:01 +0200 |
commit | 57df0dff1a1f4c846aa74a082bfd595a8a990015 (patch) | |
tree | d5953753c4ec81c9f153ea9ce6fe1370b33c7c1b /qapi | |
parent | 7ce5fc63c75d0ac756fd0b4d0472774de17f8fec (diff) | |
download | qemu-57df0dff1a1f4c846aa74a082bfd595a8a990015.zip qemu-57df0dff1a1f4c846aa74a082bfd595a8a990015.tar.gz qemu-57df0dff1a1f4c846aa74a082bfd595a8a990015.tar.bz2 |
qapi: Extend -compat to set policy for unstable interfaces
New option parameters unstable-input and unstable-output set policy
for unstable interfaces just like deprecated-input and
deprecated-output set policy for deprecated interfaces (see commit
6dd75472d5 "qemu-options: New -compat to set policy for deprecated
interfaces"). This is intended for testing users of the management
interfaces. It is experimental.
For now, this covers only syntactic aspects of QMP, i.e. stuff tagged
with feature 'unstable'. We may want to extend it to cover semantic
aspects, or the command line.
Note that there is no good way for management application to detect
presence of these new option parameters: they are not visible output
of query-qmp-schema or query-command-line-options. Tolerable, because
it's meant for testing. If running with -compat fails, skip the test.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Acked-by: John Snow <jsnow@redhat.com>
Message-Id: <20211028102520.747396-10-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
[Doc comments fixed up]
Diffstat (limited to 'qapi')
-rw-r--r-- | qapi/compat.json | 8 | ||||
-rw-r--r-- | qapi/qapi-util.c | 6 | ||||
-rw-r--r-- | qapi/qobject-output-visitor.c | 8 |
3 files changed, 19 insertions, 3 deletions
diff --git a/qapi/compat.json b/qapi/compat.json index 74a8493..dd7261a 100644 --- a/qapi/compat.json +++ b/qapi/compat.json @@ -47,9 +47,15 @@ # # @deprecated-input: how to handle deprecated input (default 'accept') # @deprecated-output: how to handle deprecated output (default 'accept') +# @unstable-input: how to handle unstable input (default 'accept') +# (since 6.2) +# @unstable-output: how to handle unstable output (default 'accept') +# (since 6.2) # # Since: 6.0 ## { 'struct': 'CompatPolicy', 'data': { '*deprecated-input': 'CompatPolicyInput', - '*deprecated-output': 'CompatPolicyOutput' } } + '*deprecated-output': 'CompatPolicyOutput', + '*unstable-input': 'CompatPolicyInput', + '*unstable-output': 'CompatPolicyOutput' } } diff --git a/qapi/qapi-util.c b/qapi/qapi-util.c index 53b493c..fda7044 100644 --- a/qapi/qapi-util.c +++ b/qapi/qapi-util.c @@ -49,6 +49,12 @@ bool compat_policy_input_ok(unsigned special_features, error_class, kind, name, errp)) { return false; } + if ((special_features & (1u << QAPI_UNSTABLE)) + && !compat_policy_input_ok1("Unstable", + policy->unstable_input, + error_class, kind, name, errp)) { + return false; + } return true; } diff --git a/qapi/qobject-output-visitor.c b/qapi/qobject-output-visitor.c index b155bf4..74770ed 100644 --- a/qapi/qobject-output-visitor.c +++ b/qapi/qobject-output-visitor.c @@ -212,8 +212,12 @@ static bool qobject_output_type_null(Visitor *v, const char *name, static bool qobject_output_policy_skip(Visitor *v, const char *name, unsigned special_features) { - return !(special_features & 1u << QAPI_DEPRECATED) - || v->compat_policy.deprecated_output == COMPAT_POLICY_OUTPUT_HIDE; + CompatPolicy *pol = &v->compat_policy; + + return ((special_features & 1u << QAPI_DEPRECATED) + && pol->deprecated_output == COMPAT_POLICY_OUTPUT_HIDE) + || ((special_features & 1u << QAPI_UNSTABLE) + && pol->unstable_output == COMPAT_POLICY_OUTPUT_HIDE); } /* Finish building, and return the root object. |