qemu-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]