qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Laszlo Ersek <lersek@redhat.com>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: pbonzini@redhat.com, aliguori@us.ibm.com, qemu-devel@nongnu.org,
	armbru@redhat.com, mdroth@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [PATCH 16/16] qapi: convert netdev_del
Date: Fri, 18 May 2012 18:15:34 +0200	[thread overview]
Message-ID: <4FB675A6.5010308@redhat.com> (raw)
In-Reply-To: <1337265221-7136-17-git-send-email-lcapitulino@redhat.com>

On 05/17/12 16:33, Luiz Capitulino wrote:

> diff --git a/hmp.c b/hmp.c
> index 7a4e25f..2ce8cb9 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -990,3 +990,12 @@ void hmp_netdev_add(Monitor *mon, const QDict *qdict)
>  out:
>      hmp_handle_error(mon, &err);
>  }
> +
> +void hmp_netdev_del(Monitor *mon, const QDict *qdict)
> +{
> +    const char *id = qdict_get_str(qdict, "id");
> +    Error *err = NULL;
> +
> +    qmp_netdev_del(id, &err);
> +    hmp_handle_error(mon, &err);
> +}

I'm not sure what invariants "qdict" satisfies on entry to this
function... Does it certainly contain "id", and is it a string? If not,
even qdict_get_str() (or something below it) would crash, so I'll assume
we do set "id" to non-NULL here -- hmp_device_del() does the same.


> diff --git a/hmp.h b/hmp.h
> index 017df87..79d138d 100644
> --- a/hmp.h
> +++ b/hmp.h
> @@ -63,5 +63,6 @@ void hmp_migrate(Monitor *mon, const QDict *qdict);
>  void hmp_device_del(Monitor *mon, const QDict *qdict);
>  void hmp_dump_guest_memory(Monitor *mon, const QDict *qdict);
>  void hmp_netdev_add(Monitor *mon, const QDict *qdict);
> +void hmp_netdev_del(Monitor *mon, const QDict *qdict);
>  
>  #endif
> diff --git a/net.c b/net.c
> index 5f0c53c..4aa416c 100644
> --- a/net.c
> +++ b/net.c
> @@ -1269,19 +1269,18 @@ exit_err:
>      return -1;
>  }
>  
> -int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
> +void qmp_netdev_del(const char *id, Error **errp)
>  {
> -    const char *id = qdict_get_str(qdict, "id");
>      VLANClientState *vc;
>  
>      vc = qemu_find_netdev(id);

OK, "id" must be non-NULL either way.

>      if (!vc) {
> -        qerror_report(QERR_DEVICE_NOT_FOUND, id);
> -        return -1;
> +        error_set(errp, QERR_DEVICE_NOT_FOUND, id);
> +        return;
>      }
> +
>      qemu_del_vlan_client(vc);
> -    qemu_opts_del(qemu_opts_find(qemu_find_opts("netdev"), id));
> -    return 0;
> +    qemu_opts_del(qemu_opts_find(qemu_find_opts_err("netdev", errp), id));
>  }

I think this last change is both unnecessary and ineffective.
qemu_find_opts("netdev") should always succeed.

If not, then -- even though qemu_find_opts_err() -> find_list() sets the
error -- we call qemu_opts_find(NULL, id), which I think crashes.

Anyway it seems harmless.

>  
>  static void print_net_client(Monitor *mon, VLANClientState *vc)
> diff --git a/net.h b/net.h
> index 1eb9280..bdc2a06 100644
> --- a/net.h
> +++ b/net.h
> @@ -172,7 +172,6 @@ void net_host_device_add(Monitor *mon, const QDict *qdict);
>  void net_host_device_remove(Monitor *mon, const QDict *qdict);
>  void netdev_add(QemuOpts *opts, Error **errp);
>  int qmp_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret);
> -int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
>  
>  #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
>  #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
> diff --git a/qapi-schema.json b/qapi-schema.json
> index 69fcd8e..bb1f806 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -1826,3 +1826,17 @@
>  { 'command': 'netdev_add',
>    'data': {'type': 'str', 'id': 'str', '*props': '**'},

Yep, "id" is mandatory, and I think it ensures that "id"'s value is at
worst an empty string in qmp_netdev_del(), not a NULL pointer.
(qmp_input_type_str() calls g_strdup(), if I'm not lost.)

>    'gen': 'no' }
> +
> +##
> +# @netdev_del:
> +#
> +# Remove a network backend.
> +#
> +# @id: the name of the network backend to remove
> +#
> +# Returns: Nothing on success
> +#          If @id is not a valid network backend, DeviceNotFound
> +#
> +# Since: 0.14.0
> +##
> +{ 'command': 'netdev_del', 'data': {'id': 'str'} }
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index f6550cb..57ea803 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -671,10 +671,7 @@ EQMP
>      {
>          .name       = "netdev_del",
>          .args_type  = "id:s",
> -        .params     = "id",
> -        .help       = "remove host network device",
> -        .user_print = monitor_user_noop,
> -        .mhandler.cmd_new = do_netdev_del,
> +        .mhandler.cmd_new = qmp_marshal_input_netdev_del,
>      },
>  
>  SQMP

I'm ready to ACK the series, but I'm intrigued by the net_init_netdev()
change in 15/16... :)

Thanks!
Laszlo

  reply	other threads:[~2012-05-18 16:14 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-17 14:33 [Qemu-devel] [PATCH qmp-next v4 00/16]: qapi: convert netdev_add & netdev_del Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 01/16] qemu-option: qemu_opts_create(): use error_set() Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 02/16] qemu-option: parse_option_number(): " Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 03/16] qemu-option: parse_option_bool(): " Luiz Capitulino
2012-05-18 13:59   ` Laszlo Ersek
2012-05-17 14:33 ` [Qemu-devel] [PATCH 04/16] qemu-option: parse_option_size(): " Luiz Capitulino
2012-05-18 14:03   ` Laszlo Ersek
2012-05-18 14:49     ` Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 05/16] qemu-option: qemu_opt_parse(): " Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 06/16] qemu-option: qemu_opts_validate(): " Luiz Capitulino
2012-05-18 14:18   ` Laszlo Ersek
2012-05-17 14:33 ` [Qemu-devel] [PATCH 07/16] qemu-option: opt_set(): " Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 08/16] qemu-option: introduce qemu_opt_set_err() Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 09/16] qemu-option: qemu_opts_from_qdict(): use error_set() Luiz Capitulino
2012-05-18 14:43   ` Laszlo Ersek
2012-05-18 14:51     ` Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 10/16] qerror: introduce QERR_INVALID_OPTION_GROUP Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 11/16] qemu-config: find_list(): use error_set() Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 12/16] qemu-config: introduce qemu_find_opts_err() Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 13/16] net: purge the monitor object from all init functions Luiz Capitulino
2012-05-17 14:33 ` [Qemu-devel] [PATCH 14/16] net: net_client_init(): use error_set() Luiz Capitulino
2012-05-18 15:09   ` Laszlo Ersek
2012-05-17 14:33 ` [Qemu-devel] [PATCH 15/16] qapi: convert netdev_add Luiz Capitulino
2012-05-18 15:51   ` Laszlo Ersek
2012-05-18 17:41     ` Luiz Capitulino
2012-05-18 17:48       ` Paolo Bonzini
2012-05-17 14:33 ` [Qemu-devel] [PATCH 16/16] qapi: convert netdev_del Luiz Capitulino
2012-05-18 16:15   ` Laszlo Ersek [this message]
2012-05-18 17:49     ` Luiz Capitulino
  -- strict thread matches above, loose matches on Subject: below --
2012-05-21 17:41 [Qemu-devel] [PATCH qmp-next v5 00/16]: qapi: convert netdev_add & netdev_del Luiz Capitulino
2012-05-21 17:41 ` [Qemu-devel] [PATCH 16/16] qapi: convert netdev_del Luiz Capitulino

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4FB675A6.5010308@redhat.com \
    --to=lersek@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=armbru@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).