From nobody Fri May 3 17:07:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1603206476; cv=none; d=zohomail.com; s=zohoarc; b=EJpTU7jfxzkBkXAXBHZbKv88pMhx4YLDoUn1ionSXCjDu/E+Lc0oUGevJ39qeV8z7/SM1cqf8fRMXaH9sARu4qH+csw5NNRf1nYpCNiBQtrMn4U/uApYW1SrbjLq5QAITWYmdsmz4x5+s+wWXEaBPeVBnH8gLOu9t7ZLbe4T6rU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603206476; h=Content-Type:Content-Transfer-Encoding:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=rDp5nBnP0+8XGaZSOqRUrCxQBW3G+TwXDRv60vYxuik=; b=Qhk56juasrab4hCnEeYDhWzR9Fskg+dHTDMb9vhHcL3xO0vVffE3XT1Bkpjw3etV0vINNJSVsfGZK4walh5U7MyuwdfeTVx6DoBdGW8JrqPTeRtbcKL0QdcJZRdjFV0eakct9dYt+aG1V6IfCNnLCa0VlGYBzch09CDuB9nGa38= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1603206476522383.97458600222046; Tue, 20 Oct 2020 08:07:56 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-437-TW1NZqeKPhq1CBpJzRuc_g-1; Tue, 20 Oct 2020 11:07:53 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D0116108E1B0; Tue, 20 Oct 2020 15:07:45 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0C6C15D9CD; Tue, 20 Oct 2020 15:07:42 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 712A68C7C3; Tue, 20 Oct 2020 15:07:39 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 09KF760O029256 for ; Tue, 20 Oct 2020 11:07:06 -0400 Received: by smtp.corp.redhat.com (Postfix) id BD18855775; Tue, 20 Oct 2020 15:07:06 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-114-206.ams2.redhat.com [10.36.114.206]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7F8EB55763; Tue, 20 Oct 2020 15:07:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1603206475; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=rDp5nBnP0+8XGaZSOqRUrCxQBW3G+TwXDRv60vYxuik=; b=Ecl8YAxMwjyt718Fy1D7zlf0A/Y1/dB25fj5+f/P20evbMnwFNYlyeYBovarN9ztfhS+f5 oT2bd+obEht9AHk3aAajg42RbaOqHO8tqFuIuE8S1ylqRmEmLLWHJC6COhmMur8HPxQdMD vmSOAWZFkjD7t3OQAz82AQUGdEJTZ2I= X-MC-Unique: TW1NZqeKPhq1CBpJzRuc_g-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Subject: [libvirt PATCH] qemu: honour fatal errors dealing with qemu slirp helper Date: Tue, 20 Oct 2020 16:07:03 +0100 Message-Id: <20201020150703.365650-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Currently all errors from qemuInterfacePrepareSlirp() are completely ignored by the callers. The intention is that missing qemu-slirp binary should cause the caller to fallback to the built-in slirp impl. Many of the possible errors though should indeed be considered fatal. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Daniel Henrique Barboza --- src/qemu/qemu_hotplug.c | 7 +++++-- src/qemu/qemu_interface.c | 21 +++++++++++++++------ src/qemu/qemu_interface.h | 5 +++-- src/qemu/qemu_process.c | 8 ++++++-- src/qemu/qemu_slirp.c | 3 --- 5 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 79fc8baa5c..dc998236de 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1311,9 +1311,12 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, case VIR_DOMAIN_NET_TYPE_USER: if (!priv->disableSlirp && virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) { - qemuSlirpPtr slirp =3D qemuInterfacePrepareSlirp(driver, net); + qemuSlirpPtr slirp =3D NULL; + int rv =3D qemuInterfacePrepareSlirp(driver, net, &slirp); =20 - if (!slirp) + if (rv =3D=3D -1) + return -1; + if (rv =3D=3D 0) break; =20 QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp =3D slirp; diff --git a/src/qemu/qemu_interface.c b/src/qemu/qemu_interface.c index cbf3d99981..b4ab809970 100644 --- a/src/qemu/qemu_interface.c +++ b/src/qemu/qemu_interface.c @@ -636,30 +636,39 @@ qemuInterfaceBridgeConnect(virDomainDefPtr def, } =20 =20 -qemuSlirpPtr +/* + * Returns: -1 on error, 0 if slirp isn't available, 1 on succcess + */ +int qemuInterfacePrepareSlirp(virQEMUDriverPtr driver, - virDomainNetDefPtr net) + virDomainNetDefPtr net, + qemuSlirpPtr *slirpret) { g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); g_autoptr(qemuSlirp) slirp =3D NULL; size_t i; =20 + if (!cfg->slirpHelperName || + !virFileExists(cfg->slirpHelperName)) + return 0; /* fallback to builtin slirp impl */ + if (!(slirp =3D qemuSlirpNewForHelper(cfg->slirpHelperName))) - return NULL; + return -1; =20 for (i =3D 0; i < net->guestIP.nips; i++) { const virNetDevIPAddr *ip =3D net->guestIP.ips[i]; =20 if (VIR_SOCKET_ADDR_IS_FAMILY(&ip->address, AF_INET) && !qemuSlirpHasFeature(slirp, QEMU_SLIRP_FEATURE_IPV4)) - return NULL; + return 0; =20 if (VIR_SOCKET_ADDR_IS_FAMILY(&ip->address, AF_INET6) && !qemuSlirpHasFeature(slirp, QEMU_SLIRP_FEATURE_IPV6)) - return NULL; + return 0; } =20 - return g_steal_pointer(&slirp); + *slirpret =3D g_steal_pointer(&slirp); + return 1; } =20 =20 diff --git a/src/qemu/qemu_interface.h b/src/qemu/qemu_interface.h index 3dcefc6a12..b5e91e3ab2 100644 --- a/src/qemu/qemu_interface.h +++ b/src/qemu/qemu_interface.h @@ -56,5 +56,6 @@ int qemuInterfaceOpenVhostNet(virDomainDefPtr def, int *vhostfd, size_t *vhostfdSize) G_GNUC_NO_INLINE; =20 -qemuSlirpPtr qemuInterfacePrepareSlirp(virQEMUDriverPtr driver, - virDomainNetDefPtr net); +int qemuInterfacePrepareSlirp(virQEMUDriverPtr driver, + virDomainNetDefPtr net, + qemuSlirpPtr *slirp); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 5bc76a75e3..59206a17fb 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5697,9 +5697,13 @@ qemuProcessNetworkPrepareDevices(virQEMUDriverPtr dr= iver, } else if (actualType =3D=3D VIR_DOMAIN_NET_TYPE_USER && !priv->disableSlirp && virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DBUS_VMSTATE))= { - qemuSlirpPtr slirp =3D qemuInterfacePrepareSlirp(driver, net); + qemuSlirpPtr slirp =3D NULL; + int rv =3D qemuInterfacePrepareSlirp(driver, net, &slirp); =20 - QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp =3D slirp; + if (rv =3D=3D -1) + return -1; + if (rv =3D=3D 1) + QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp =3D slirp; } =20 } diff --git a/src/qemu/qemu_slirp.c b/src/qemu/qemu_slirp.c index d2e4ed79be..dfb36125f0 100644 --- a/src/qemu/qemu_slirp.c +++ b/src/qemu/qemu_slirp.c @@ -101,9 +101,6 @@ qemuSlirpNewForHelper(const char *helper) virJSONValuePtr featuresJSON; size_t i, nfeatures; =20 - if (!helper) - return NULL; - slirp =3D qemuSlirpNew(); if (!slirp) { virReportError(VIR_ERR_INTERNAL_ERROR, --=20 2.26.2