qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] net: print a more actionable error when slirp is not found


From: Christian Schoenebeck
Subject: Re: [PATCH] net: print a more actionable error when slirp is not found
Date: Fri, 30 Sep 2022 21:47:29 +0200

On Donnerstag, 29. September 2022 18:32:37 CEST Marc-André Lureau wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> If slirp is not found during compile-time, and not manually disabled,
> print a friendly error message, as suggested in the "If your networking
> is failing after updating to the latest git version of QEMU..." thread
> by various people.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  meson.build |  4 ++++
>  net/net.c   | 19 +++++++++++++++++--
>  2 files changed, 21 insertions(+), 2 deletions(-)
> 
> diff --git a/meson.build b/meson.build
> index 8dc661363f..4f69d7d0b4 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -657,6 +657,10 @@ if not get_option('slirp').auto() or have_system
>    endif
>  endif
> 
> +if get_option('slirp').disabled()
> +  config_host_data.set('CONFIG_SLIRP_DISABLED', true)
> +endif
> +
>  vde = not_found
>  if not get_option('vde').auto() or have_system or have_tools
>    vde = cc.find_library('vdeplug', has_headers: ['libvdeplug.h'],
> diff --git a/net/net.c b/net/net.c
> index 2db160e063..e6072a5ddd 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -990,14 +990,29 @@ static int net_init_nic(const Netdev *netdev, const
> char *name, return idx;
>  }
> 
> +#if (defined(CONFIG_SLIRP) || !defined(CONFIG_SLIRP_DISABLED))
> +static int net_init_user(const Netdev *netdev, const char *name,
> +                         NetClientState *peer, Error **errp)
> +{
> +#ifdef CONFIG_SLIRP
> +    return net_init_slirp(netdev, name, peer, errp);
> +#else
> +    error_setg(errp,
> +               "Type 'user' is not a supported netdev backend by this QEMU
> build " +               "because the libslirp development files were not
> found during build " +               "of QEMU.");
> +#endif
> +    return -1;
> +}
> +#endif

I just tried this, but somehow it is not working for me. net_init_user() is 
never called and therefore I don't get the error message. That should be 
working if the user launched QEMU without any networking arg, right?

And still, I would find it better if there was also a clear build-time error 
if there was no libslirp and slirp feature was not explicitly disabled.

> 
>  static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])(
>      const Netdev *netdev,
>      const char *name,
>      NetClientState *peer, Error **errp) = {
>          [NET_CLIENT_DRIVER_NIC]       = net_init_nic,
> -#ifdef CONFIG_SLIRP
> -        [NET_CLIENT_DRIVER_USER]      = net_init_slirp,
> +#if (defined(CONFIG_SLIRP) || !defined(CONFIG_SLIRP_DISABLED))
> +        [NET_CLIENT_DRIVER_USER]      = net_init_user,
>  #endif
>          [NET_CLIENT_DRIVER_TAP]       = net_init_tap,
>          [NET_CLIENT_DRIVER_SOCKET]    = net_init_socket,







reply via email to

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