[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 27/34] qemu-options: New -compat to set policy for depreca
From: |
Marc-André Lureau |
Subject: |
Re: [PATCH v3 27/34] qemu-options: New -compat to set policy for deprecated interfaces |
Date: |
Mon, 16 Mar 2020 18:43:45 +0100 |
Hi
On Sun, Mar 15, 2020 at 4:46 PM Markus Armbruster <address@hidden> wrote:
>
> Policy is separate for input and output.
>
> Input policy can be "accept" (accept silently), or "reject" (reject
> the request with an error).
>
> Output policy can be "accept" (pass on unchanged), or "hide" (filter
> out the deprecated parts).
>
> Default is "accept". Policies other than "accept" are implemented
> later in this series.
>
> For now, -compat covers only syntactic aspects of QMP, i.e. stuff
> tagged with feature 'deprecated'. We may want to extend it to cover
> semantic aspects, CLI, and experimental features.
>
> The option is experimental.
>
> Signed-off-by: Markus Armbruster <address@hidden>
> ---
> qapi/compat.json | 51 ++++++++++++++++++++++++++++++++++++
> qapi/qapi-schema.json | 1 +
> include/qapi/compat-policy.h | 20 ++++++++++++++
> qapi/qmp-dispatch.c | 3 +++
> softmmu/vl.c | 17 ++++++++++++
> qapi/Makefile.objs | 8 +++---
> qemu-options.hx | 20 ++++++++++++++
> 7 files changed, 116 insertions(+), 4 deletions(-)
> create mode 100644 qapi/compat.json
> create mode 100644 include/qapi/compat-policy.h
>
> diff --git a/qapi/compat.json b/qapi/compat.json
> new file mode 100644
> index 0000000000..fd6f8e932c
> --- /dev/null
> +++ b/qapi/compat.json
> @@ -0,0 +1,51 @@
> +# -*- Mode: Python -*-
> +
> +##
> +# = Compatibility policy
> +##
> +
> +##
> +# @CompatPolicyInput:
> +#
> +# Policy for handling "funny" input.
> +#
> +# @accept: Accept silently
> +# @reject: Reject with an error
> +#
> +# Since: 5.0
> +##
> +{ 'enum': 'CompatPolicyInput',
> + 'data': [ 'accept', 'reject' ] }
> +
> +##
> +# @CompatPolicyOutput:
> +#
> +# Policy for handling "funny" output.
> +#
> +# @accept: Pass on unchanged
> +# @hide: Filter out
> +#
> +# Since: 5.0
> +##
> +{ 'enum': 'CompatPolicyOutput',
> + 'data': [ 'accept', 'hide' ] }
> +
> +##
> +# @CompatPolicy:
> +#
> +# Policy for handling deprecated management interfaces.
> +#
> +# This is intended for testing users of the management interfaces.
> +#
> +# Limitation: covers only syntactic aspects of QMP, i.e. stuff tagged
> +# with feature 'deprecated'. We may want to extend it to cover
> +# semantic aspects, CLI, and experimental features.
> +#
> +# @deprecated-input: how to handle deprecated input (default 'accept')
> +# @deprecated-output: how to handle deprecated output (default 'accept')
If this is going to cover something else than qmp, then perhaps it
should use a "qmp" prefix.
If not, then the CLI should probably be -qmp-compat.
> +#
> +# Since: 5.0
> +##
> +{ 'struct': 'CompatPolicy',
> + 'data': { '*deprecated-input': 'CompatPolicyInput',
> + '*deprecated-output': 'CompatPolicyOutput' } }
> diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json
> index 43b0ba0dea..f575b76d81 100644
> --- a/qapi/qapi-schema.json
> +++ b/qapi/qapi-schema.json
> @@ -75,6 +75,7 @@
> { 'include': 'migration.json' }
> { 'include': 'transaction.json' }
> { 'include': 'trace.json' }
> +{ 'include': 'compat.json' }
> { 'include': 'control.json' }
> { 'include': 'introspect.json' }
> { 'include': 'qom.json' }
> diff --git a/include/qapi/compat-policy.h b/include/qapi/compat-policy.h
> new file mode 100644
> index 0000000000..8efb2c58aa
> --- /dev/null
> +++ b/include/qapi/compat-policy.h
> @@ -0,0 +1,20 @@
> +/*
> + * Policy for handling "funny" management interfaces
> + *
> + * Copyright (C) 2019 Red Hat, Inc.
> + *
> + * Authors:
> + * Markus Armbruster <address@hidden>,
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or
> + * later. See the COPYING file in the top-level directory.
> + */
> +
> +#ifndef QAPI_COMPAT_POLICY_H
> +#define QAPI_COMPAT_POLICY_H
> +
> +#include "qapi/qapi-types-compat.h"
> +
> +extern CompatPolicy compat_policy;
> +
> +#endif
> diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
> index fb53687ce9..80beab517f 100644
> --- a/qapi/qmp-dispatch.c
> +++ b/qapi/qmp-dispatch.c
> @@ -12,6 +12,7 @@
> */
>
> #include "qemu/osdep.h"
> +#include "qapi/compat-policy.h"
> #include "qapi/error.h"
> #include "qapi/qmp/dispatch.h"
> #include "qapi/qmp/qdict.h"
> @@ -19,6 +20,8 @@
> #include "sysemu/runstate.h"
> #include "qapi/qmp/qbool.h"
>
> +CompatPolicy compat_policy;
> +
> static QDict *qmp_dispatch_check_obj(const QObject *request, bool allow_oob,
> QObject **id, Error **errp)
> {
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index ff2685dff8..74eb43d114 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -27,6 +27,7 @@
> #include "qemu/units.h"
> #include "hw/boards.h"
> #include "hw/qdev-properties.h"
> +#include "qapi/compat-policy.h"
> #include "qapi/error.h"
> #include "qemu-version.h"
> #include "qemu/cutils.h"
> @@ -105,6 +106,7 @@
> #include "sysemu/replay.h"
> #include "qapi/qapi-events-run-state.h"
> #include "qapi/qapi-visit-block-core.h"
> +#include "qapi/qapi-visit-compat.h"
> #include "qapi/qapi-visit-ui.h"
> #include "qapi/qapi-commands-block-core.h"
> #include "qapi/qapi-commands-run-state.h"
> @@ -3749,6 +3751,21 @@ void qemu_init(int argc, char **argv, char **envp)
> qemu_opt_get_bool(opts, "mem-lock", false);
> enable_cpu_pm = qemu_opt_get_bool(opts, "cpu-pm", false);
> break;
> + case QEMU_OPTION_compat:
> + {
> + CompatPolicy *opts;
> + Visitor *v;
> +
> + v = qobject_input_visitor_new_str(optarg, NULL,
> + &error_fatal);
> +
> + visit_type_CompatPolicy(v, NULL, &opts, &error_fatal);
> + QAPI_CLONE_MEMBERS(CompatPolicy, &compat_policy, opts);
> +
> + qapi_free_CompatPolicy(opts);
> + visit_free(v);
> + break;
> + }
> case QEMU_OPTION_msg:
> opts = qemu_opts_parse_noisily(qemu_find_opts("msg"), optarg,
> false);
> diff --git a/qapi/Makefile.objs b/qapi/Makefile.objs
> index 4673ab7490..a3de2e2756 100644
> --- a/qapi/Makefile.objs
> +++ b/qapi/Makefile.objs
> @@ -5,10 +5,10 @@ util-obj-y += opts-visitor.o qapi-clone-visitor.o
> util-obj-y += qmp-event.o
> util-obj-y += qapi-util.o
>
> -QAPI_COMMON_MODULES = audio authz block-core block char common control crypto
> -QAPI_COMMON_MODULES += dump error introspect job machine migration misc
> -QAPI_COMMON_MODULES += net pragma qdev qom rdma rocker run-state sockets tpm
> -QAPI_COMMON_MODULES += trace transaction ui
> +QAPI_COMMON_MODULES = audio authz block-core block char common compat
> +QAPI_COMMON_MODULES += control crypto dump error introspect job
> +QAPI_COMMON_MODULES += machine migration misc net pragma qdev qom rdma
> +QAPI_COMMON_MODULES += rocker run-state sockets tpm trace transaction ui
> QAPI_TARGET_MODULES = machine-target misc-target
> QAPI_MODULES = $(QAPI_COMMON_MODULES) $(QAPI_TARGET_MODULES)
>
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 1d8f852d89..5459e6c94c 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -3357,6 +3357,26 @@ DEFHEADING()
>
> DEFHEADING(Debug/Expert options:)
>
> +DEF("compat", HAS_ARG, QEMU_OPTION_compat,
> + "-compat
> [deprecated-input=accept|reject][,deprecated-output=accept|hide]\n"
> + " Policy for handling deprecated management interfaces\n",
> + QEMU_ARCH_ALL)
> +SRST
> +``-compat
> [deprecated-input=@var{input-policy}][,deprecated-output=@var{output-policy}]``
> + Set policy for handling deprecated management interfaces (experimental):
> +
> + ``deprecated-input=accept`` (default)
> + Accept deprecated commands and arguments
> + ``deprecated-input=reject``
> + Reject deprecated commands and arguments
> + ``deprecated-output=accept`` (default)
> + Emit deprecated command results and events
> + ``deprecated-output=hide``
> + Suppress deprecated command results and events
> +
> + Limitation: covers only syntactic aspects of QMP.
> +ERST
> +
> DEF("fw_cfg", HAS_ARG, QEMU_OPTION_fwcfg,
> "-fw_cfg [name=]<name>,file=<file>\n"
> " add named fw_cfg entry with contents from file\n"
> --
> 2.21.1
>
>
--
Marc-André Lureau
- Re: [PATCH v3 13/34] qapi: Consistently put @features parameter right after @ifcond, (continued)
- [PATCH v3 12/34] qapi: Add feature flags to remaining definitions, Markus Armbruster, 2020/03/15
- [PATCH v3 28/34] qapi: Implement deprecated-output=hide for QMP command results, Markus Armbruster, 2020/03/15
- [PATCH v3 26/34] qapi: Mark deprecated QMP parts with feature 'deprecated', Markus Armbruster, 2020/03/15
- [PATCH v3 29/34] qapi: Implement deprecated-output=hide for QMP events, Markus Armbruster, 2020/03/15
- [PATCH v3 34/34] qapi: New -compat deprecated-input=crash, Markus Armbruster, 2020/03/15
- [PATCH v3 18/34] qapi/schema: Rename QAPISchemaObjectType{Variant, Variants}, Markus Armbruster, 2020/03/15
- [PATCH v3 31/34] qapi: Implement deprecated-output=hide for QMP introspection, Markus Armbruster, 2020/03/15
- [PATCH v3 27/34] qemu-options: New -compat to set policy for deprecated interfaces, Markus Armbruster, 2020/03/15
- Re: [PATCH v3 27/34] qemu-options: New -compat to set policy for deprecated interfaces,
Marc-André Lureau <=
- [PATCH v3 15/34] qapi/introspect: Factor out _make_tree(), Markus Armbruster, 2020/03/15
- [PATCH v3 14/34] qapi/introspect: Rename *qlit* to reduce confusion, Markus Armbruster, 2020/03/15
- [PATCH v3 20/34] qapi: Add feature flags to struct members, Markus Armbruster, 2020/03/15