On 11/10/22 13:05, Claudio Fontana wrote: > On 11/10/22 12:42, Thomas Huth wrote: >> On 08/11/2022 10.49, Claudio Fontana wrote: >>> On 11/4/22 13:57, Thomas Huth wrote: >>>> Running QEMU with "-nic help" used to work in QEMU 5.2 and earlier versions >>>> (it showed the available netdev backends), but this feature got broken >>>> during >>>> some refactoring in version 6.0. Let's restore the old behavior, and while >>>> we're at it, let's also print the available NIC models here now since this >>>> option can be used to configure both, netdev backend and model in one go. >>>> >>>> Fixes: ad6f932fe8 ("net: do not exit on "netdev_add help" monitor command") >>>> Signed-off-by: Thomas Huth <th...@redhat.com> >>>> --- >>>> net/net.c | 14 ++++++++++++-- >>>> 1 file changed, 12 insertions(+), 2 deletions(-) >>>> >>>> diff --git a/net/net.c b/net/net.c >>>> index c0516a8067..b4b8f2a9cc 100644 >>>> --- a/net/net.c >>>> +++ b/net/net.c >>>> @@ -1571,8 +1571,18 @@ static int net_param_nic(void *dummy, QemuOpts >>>> *opts, Error **errp) >>>> const char *type; >>>> >>>> type = qemu_opt_get(opts, "type"); >>>> - if (type && g_str_equal(type, "none")) { >>>> - return 0; /* Nothing to do, default_net is cleared in vl.c */ >>>> + if (type) { >>>> + if (g_str_equal(type, "none")) { >>>> + return 0; /* Nothing to do, default_net is cleared in vl.c >>>> */ >>>> + } >>>> + if (is_help_option(type)) { >>>> + GPtrArray *nic_models = qemu_get_nic_models(TYPE_DEVICE); >>>> + show_netdevs(); >>>> + printf("\n"); >>>> + qemu_show_nic_models(type, (const char **)nic_models->pdata); >>>> + g_ptr_array_free(nic_models, true); >>> >>> nit: would not the order: >>> >>>> + GPtrArray *nic_models; >>>> + show_netdevs(); >>>> + printf("\n"); >>>> + nic_models = qemu_get_nic_models(TYPE_DEVICE); >>>> + qemu_show_nic_models(type, (const char **)nic_models->pdata); >>>> + g_ptr_array_free(nic_models, true); >>> >>> flow more logically? >> >> I think that's mostly a matter of taste ... > > To some extent, but for the reader it would make more sense not to intermix > unrelated code? > > I'd say: > > - show_netdevs > _ get nic models > - show nic models > > instead of: > > - get nic models > - show netdevs > - show nic models > > > > and as long as the declaration >> of the variable has to stay at the top of the block (according to QEMU's >> coding style), I think I'd also prefer to keep the initialization there. >> > > This conflict can easily be solved by putting the nic_models on its own line, > as I have shown in my hunk above. >
And another option (not used enough in QEMU code imo), is to open a block specifically for the nic models. Ie you can say: show_netdevs(); printf("\n"); { GPtrArray *nic_models = qemu_get_nic_models(TYPE_DEVICE); qemu_show_nic_models(type, (const char **)nic_models->pdata); g_ptr_array_free(nic_models, true); } this even has the additional benefit of making the allocation/free of the nic_models clearer as it corresponds to the block. C