From nobody Wed Mar 12 13:19:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1741348140; cv=none; d=zohomail.com; s=zohoarc; b=jezi6c3ab6JorCZkhETqfTMm3TUAikmDltnHUpNyMClM4UeliI1oh3bdnDdVn3i9oaSrrRZzs0ZBJTWkN1efo0uLOSndTM31C5+4aF9l/KKFEiZ+k9yBrBayDxoaJ+jd6TE0FWx+fbgaTBBaYj1sTb7IM78tlUQrIZcDniMFT5w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1741348140; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=Q/sqvVI4mRAelSt7qv5rirudZvZdwGlMueZ4tlLjhsY=; b=X7PcM6hisNZN3YWM+upJ8+nRT0LASn4wGve61pgQOwXfVNwVVejWVUkOxRnSfOA5oYiOfp02XH8uYIXKGYDD+n96FPn7RecKjg0otPbDsO9/UR/30TsSG56qOvkOxoiHxXXM8A9dQJbhrsazeIBYHOSCSFIVOCo25qt2Zb+dSUg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1741348140965448.04603861217913; Fri, 7 Mar 2025 03:49:00 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 033CC18A3; Fri, 7 Mar 2025 06:48:59 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 1AA73187D; Fri, 7 Mar 2025 06:48:36 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id D0842180E; Fri, 7 Mar 2025 06:48:32 -0500 (EST) Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 509A71809 for ; Fri, 7 Mar 2025 06:48:31 -0500 (EST) Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-223cc017ef5so33599815ad.0 for ; Fri, 07 Mar 2025 03:48:31 -0800 (PST) Received: from localhost ([157.82.205.237]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-73698515944sm3113725b3a.140.2025.03.07.03.48.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 07 Mar 2025 03:48:29 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20230601.gappssmtp.com; s=20230601; t=1741348110; x=1741952910; darn=lists.libvirt.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=Q/sqvVI4mRAelSt7qv5rirudZvZdwGlMueZ4tlLjhsY=; b=ln+Q8f/YawBoca9/g1vI4tMhEjx2Gg6nCGb8M3syATCJsyUZWqMjwIaLBb8O29MSBS SVA5Kwe71rRC42LCcAp7loK2ZqRg0E8LPQK8WGy13Ay2yU0We1vLClswr7QDGhSE+uJn XPkSibZxeYCZZ02QCs87wnVcqwzkR6MSIhOKaTX3ZSVlcJRObDk9GvK4eTcoFj6a54KG DJFF3+WLzcgNwWmDz0ggbr4MyyFPO0KfJlXekgVUeOv7YaTmN6YMVqwGPK55swhMmNpz CsBMKZr8WHGcH+CHDAfzHALWnOYRxJNuSMD+dReAiPJLbxHjnOePqOf4D/JZBWYkq2lR VeLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741348110; x=1741952910; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Q/sqvVI4mRAelSt7qv5rirudZvZdwGlMueZ4tlLjhsY=; b=Fx/TN7JvjfgOJibRlYQ5cOp3Md8QSJR8WqTDQVwPQSWz2Kdg5G6e3PaPK8myhbxW7T WL15mNDemlDJmP9AxztpXrBFVzXwFjpvCkhNmg6St9ESpQgqdFtkZJhJaDCRTXT7iItK /qL/pdhXBKGFFep0IMONdG7t28PnnLs+YB5nr2yfuiXkD7P1xdmPtJY+XuQBSXeO1H5q hpQyyhX9ccIIOsCce3arfnDjjuKnZh74EK71SjxQ1mKTTnnBoKfTwpngZsbu/tM4/u1x oonNcXt79qCiIpDXShLcp1quPau/06JzsM83Zvsvzgw2CKg2cAYTIxTmiuX3IgEAQKp4 sOPw== X-Gm-Message-State: AOJu0YxaU1/2fEb77wK8LOobepukhYl72DFVXCdIQSzpWPG5winYW00c KULZnWWRmvSfLQaYXd0VVdXlkwxNOGsz5YdetQt2up1qE9T6UxL8pMdeaGpciIVlOdzhNAycHjb p4CE= X-Gm-Gg: ASbGncvOt/NlTvOUMAy77tDn1hUxOS6i6COzFCKIIDuKb4cE5omrFIBCSILdBECDz/c +IGZGYJeJXwFp57v1FHP1Cea4XdnC5GpUFn8v+obPIxm7//0GmmkT5WYrRsEz02VadLaduzMxKY 0JKXgmRBhljavQjnxrJnkrG8dyZwqoacZ3BudOL05Gu+cn294T6+qcZeKa/JX+krh+Uc4DZuNsM oIQdO4Olq9kJTFIePfP89S4Z8MTCG7/RNJ14U2PtVMF658etckiI3XlN9uvItabPn+Mstg/slXG 97OZRb62UkD6kZvfkryXcQkuSIRylFKNXTz5zteWxwHXF2AS X-Google-Smtp-Source: AGHT+IF/xjjxzCjzqwzMP/v9lo8JONXIzyyM7vlIKUdfguaClTZwF/xcdPlbp7sCIRsanCWVEy+mdA== X-Received: by 2002:a05:6a00:2d01:b0:728:e2cc:bfd6 with SMTP id d2e1a72fcca58-736aaae1324mr4878828b3a.18.1741348109778; Fri, 07 Mar 2025 03:48:29 -0800 (PST) From: Akihiko Odaki Date: Fri, 07 Mar 2025 20:48:27 +0900 Subject: [PATCH] util: Check libnl function availability MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250307-nl-v1-1-c66fc2bf8703@daynix.com> X-B4-Tracking: v=1; b=H4sIAArdymcC/6tWKk4tykwtVrJSqFYqSi3LLM7MzwNyDHUUlJIzE vPSU3UzU4B8JSMDI1MDYwMT3bwcXTMD01QD0ySLZNM0IyWgwoKi1LTMCrAh0bG1tQBizuVZVAA AAA== X-Change-ID: 20250304-nl-605e05b8c5f2 To: devel@lists.libvirt.org X-Mailer: b4 0.14.2 Message-ID-Hash: 6VYXYMDJG5FIPWHRVUSMP575FH536QLU X-Message-ID-Hash: 6VYXYMDJG5FIPWHRVUSMP575FH536QLU X-MailFrom: akihiko.odaki@daynix.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0 CC: devel@daynix.com, Akihiko Odaki X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @daynix-com.20230601.gappssmtp.com) X-ZM-MESSAGEID: 1741348141379019000 virNetDevBridgeSetupVlans() calls virNetlinkBridgeVlanFilterSet(), which requires libnl. Use the function only when libnl is available to avoid breaking builds. Signed-off-by: Akihiko Odaki --- src/util/virnetdevbridge.c | 122 ++++++++++++++++++++++-------------------= ---- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/src/util/virnetdevbridge.c b/src/util/virnetdevbridge.c index c79d0c79b7b16a0a070b5013ed7df9d0a63b1c38..70e82a0029634ddf44c2b933577= bf783c89f035c 100644 --- a/src/util/virnetdevbridge.c +++ b/src/util/virnetdevbridge.c @@ -313,66 +313,6 @@ virNetDevBridgePortSetIsolated(const char *brname, return virNetDevBridgePortSet(brname, ifname, "isolated", enable ? 1 := 0); } =20 -static int -virNetDevBridgeSetupVlans(const char *ifname, const virNetDevVlan *virtVla= n) -{ - int error =3D 0; - unsigned short flags; - - if (!virtVlan || !virtVlan->nTags) - return 0; - - // The interface will have been automatically added to vlan 1, so remo= ve it - if (virNetlinkBridgeVlanFilterSet(ifname, RTM_DELLINK, 0, 1, &error) <= 0) { - if (error !=3D 0) { - virReportSystemError(-error, - _("error removing vlan filter from interf= ace %1$s"), - ifname); - } - return -1; - } - - // If trunk mode, add the native VLAN then add the others, if any - if (virtVlan->trunk) { - size_t i; - - if (virtVlan->nativeTag) { - flags =3D BRIDGE_VLAN_INFO_PVID; - if (virtVlan->nativeMode =3D=3D VIR_NATIVE_VLAN_MODE_UNTAGGED = || - virtVlan->nativeMode =3D=3D VIR_NATIVE_VLAN_MODE_DEFAULT) { - flags |=3D BRIDGE_VLAN_INFO_UNTAGGED; - } - - if (virNetlinkBridgeVlanFilterSet(ifname, RTM_SETLINK, flags, - virtVlan->nativeTag, &error)= < 0) { - goto error; - } - } - - for (i =3D 0; i < virtVlan->nTags; i++) { - if (virtVlan->tag[i] !=3D virtVlan->nativeTag) - if (virNetlinkBridgeVlanFilterSet(ifname, RTM_SETLINK, 0, - virtVlan->tag[i], &error= ) < 0) { - goto error; - } - } - } else { - // In native mode, add the single VLAN as pvid untagged - flags =3D BRIDGE_VLAN_INFO_PVID | BRIDGE_VLAN_INFO_UNTAGGED; - if (virNetlinkBridgeVlanFilterSet(ifname, RTM_SETLINK, flags, - virtVlan->tag[0], &error) < 0) { - goto error; - } - } - - return 0; - - error: - if (error !=3D 0) - virReportSystemError(-error, _("error adding vlan filter to interf= ace %1$s"), ifname); - return -1; -} - =20 #else int @@ -651,7 +591,67 @@ int virNetDevBridgeDelete(const char *brname G_GNUC_UN= USED) * * Returns 0 in case of success or an errno code in case of failure. */ -#if defined(WITH_STRUCT_IFREQ) && defined(SIOCBRADDIF) +#if defined(WITH_STRUCT_IFREQ) && defined(SIOCBRADDIF) && defined(WITH_LIB= NL) +static int +virNetDevBridgeSetupVlans(const char *ifname, const virNetDevVlan *virtVla= n) +{ + int error =3D 0; + unsigned short flags; + + if (!virtVlan || !virtVlan->nTags) + return 0; + + // The interface will have been automatically added to vlan 1, so remo= ve it + if (virNetlinkBridgeVlanFilterSet(ifname, RTM_DELLINK, 0, 1, &error) <= 0) { + if (error !=3D 0) { + virReportSystemError(-error, + _("error removing vlan filter from interf= ace %1$s"), + ifname); + } + return -1; + } + + // If trunk mode, add the native VLAN then add the others, if any + if (virtVlan->trunk) { + size_t i; + + if (virtVlan->nativeTag) { + flags =3D BRIDGE_VLAN_INFO_PVID; + if (virtVlan->nativeMode =3D=3D VIR_NATIVE_VLAN_MODE_UNTAGGED = || + virtVlan->nativeMode =3D=3D VIR_NATIVE_VLAN_MODE_DEFAULT) { + flags |=3D BRIDGE_VLAN_INFO_UNTAGGED; + } + + if (virNetlinkBridgeVlanFilterSet(ifname, RTM_SETLINK, flags, + virtVlan->nativeTag, &error)= < 0) { + goto error; + } + } + + for (i =3D 0; i < virtVlan->nTags; i++) { + if (virtVlan->tag[i] !=3D virtVlan->nativeTag) + if (virNetlinkBridgeVlanFilterSet(ifname, RTM_SETLINK, 0, + virtVlan->tag[i], &error= ) < 0) { + goto error; + } + } + } else { + // In native mode, add the single VLAN as pvid untagged + flags =3D BRIDGE_VLAN_INFO_PVID | BRIDGE_VLAN_INFO_UNTAGGED; + if (virNetlinkBridgeVlanFilterSet(ifname, RTM_SETLINK, flags, + virtVlan->tag[0], &error) < 0) { + goto error; + } + } + + return 0; + + error: + if (error !=3D 0) + virReportSystemError(-error, _("error adding vlan filter to interf= ace %1$s"), ifname); + return -1; +} + int virNetDevBridgeAddPort(const char *brname, const char *ifname, const virNetDevVlan *virtVlan) --- base-commit: e5299ddf86121d3c792ca271ffcb54900eb19dc3 change-id: 20250304-nl-605e05b8c5f2 Best regards, --=20 Akihiko Odaki