[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,