On Montag, 3. Oktober 2022 12:06:12 CEST Daniel P. Berrangé wrote: > The current message when using '-net user...' with SLIRP disabled at > compile time is: > > qemu-system-x86_64: -net user: Parameter 'type' expects a net backend type > (maybe it is not compiled into this binary)
Is this intended as alternative to Marc-André's previous patch? If yes, then same applies here: what about people not passing any networking arg to QEMU? They would not get any error message at all, right? https://lore.kernel.org/all/2973900.g0HVWOepMQ@silver/ > An observation is that we're using the 'netdev->type' field here which > is an enum value, produced after QAPI has converted from its string > form. > > IOW, at this point in the code, we know that the user's specified > type name was a valid network backend. The only possible scenario that > can make the backend init function be NULL, is if support for that > backend was disabled at build time. Given this, we don't need to caveat > our error message with a 'maybe' hint, we can be totally explicit. > > The use of QERR_INVALID_PARAMETER_VALUE doesn't really lend itself to > user friendly error message text. Since this is not used to set a > specific QAPI error class, we can simply stop using this pre-formatted > error text and provide something better. > > Thus the new message is: > > qemu-system-x86_64: -net user: network backend 'user' is not compiled into > this binary And why not naming the child, i.e. that QEMU was built without slirp? > The case of passing 'hubport' for -net is also given a message reminding > people they should have used -netdev/-nic instead, as this backend type > is only valid for the modern syntax. > > Signed-off-by: Daniel P. Berrangé <berra...@redhat.com> > --- > > NB, this does not make any difference to people who were relying on the > QEMU built-in default hub that was created if you don't list any -net / > -netdev / -nic argument, only those using explicit args. > > net/net.c | 18 +++++++++++------- > 1 file changed, 11 insertions(+), 7 deletions(-) > > diff --git a/net/net.c b/net/net.c > index 2db160e063..8ddafacf13 100644 > --- a/net/net.c > +++ b/net/net.c > @@ -1036,19 +1036,23 @@ static int net_client_init1(const Netdev *netdev, > bool is_netdev, Error **errp) if (is_netdev) { > if (netdev->type == NET_CLIENT_DRIVER_NIC || > !net_client_init_fun[netdev->type]) { > - error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type", > - "a netdev backend type"); > + error_setg(errp, "network backend '%s' is not compiled into > this binary", + NetClientDriver_str(netdev->type)); > return -1; > } > } else { > if (netdev->type == NET_CLIENT_DRIVER_NONE) { > return 0; /* nothing to do */ > } > - if (netdev->type == NET_CLIENT_DRIVER_HUBPORT || > - !net_client_init_fun[netdev->type]) { > - error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type", > - "a net backend type (maybe it is not compiled " > - "into this binary)"); > + if (netdev->type == NET_CLIENT_DRIVER_HUBPORT) { > + error_setg(errp, "network backend '%s' is only supported with > -netdev/-nic", + NetClientDriver_str(netdev->type)); > + return -1; > + } > + > + if (!net_client_init_fun[netdev->type]) { > + error_setg(errp, "network backend '%s' is not compiled into > this binary", + NetClientDriver_str(netdev->type)); > return -1; > }