On Donnerstag, 29. September 2022 18:32:37 CEST Marc-André Lureau wrote: > From: Marc-André Lureau <marcandre.lur...@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.lur...@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,