From nobody Sun May 12 13:01:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.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 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1696959414; cv=none; d=zohomail.com; s=zohoarc; b=YoATylCLnIejUS77sGBe8bIaaisdlGJ9RNb9uP0tRQNjmb+Vu8niEcCkX2hTRhgaL3hfrndL7yYPMdeWNDqApvn+atkLoQ/UzBSB+DF60t5a3wxB5DKubZeBgNawa9xu3D97IGlzlOCrvdZzTLBxeuV49EV76qPaeRinfW4cVeg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696959414; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=UFJgvGYV9AoRFiGNsMB8Bd9RfYyuQYHXL3RJo7iuOd8=; b=oKuaFfzyeoVezXZhlR88RCPN/u8GQAJoxBdkXdUGwJsnHSrZ9uXIu0/BzSynz6jE0U5Lz6lfFdn3yXx7yVf+yCrGVrbpygca9uaxgsUy6yQ2Bk/3c4pNuEhO1wfcMV6zUK4912E6CFNVp1YLCVxJW+6BTg60vmrN+/oVy8p7XkE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 169695941459552.46132863797072; Tue, 10 Oct 2023 10:36:54 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-658-xr3vp4o0MFiRu597lrtshQ-1; Tue, 10 Oct 2023 13:36:44 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id EB706858F1B; Tue, 10 Oct 2023 17:36:29 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id D851E492B04; Tue, 10 Oct 2023 17:36:29 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id C871F19465B8; Tue, 10 Oct 2023 17:36:29 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 669571946597 for ; Tue, 10 Oct 2023 17:36:28 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 3C3FE492B06; Tue, 10 Oct 2023 17:36:28 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast04.extmail.prod.ext.rdu2.redhat.com [10.11.55.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 34B65492B04 for ; Tue, 10 Oct 2023 17:36:28 +0000 (UTC) Received: from us-smtp-inbound-delivery-1.mimecast.com (us-smtp-inbound-delivery-1.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id D9B00101B041 for ; Tue, 10 Oct 2023 17:36:27 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-80-C2juxObFORin0pR336_B3A-1; Tue, 10 Oct 2023 13:36:18 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4S4jVw1Xx0zDqdM for ; Tue, 10 Oct 2023 17:26:32 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4S4jVv0N2mzFqjK; Tue, 10 Oct 2023 17:26:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696959413; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=UFJgvGYV9AoRFiGNsMB8Bd9RfYyuQYHXL3RJo7iuOd8=; b=XJPeACiQQiEnVWK0fgna3Q4Zyljer9OI4hSg3pBp6Bf9iJdxXKZ7RZxZ/AEFbhAD73ujsv iXUyEyNd+W5CIFVCwZ51hx1n6mmNh9cny3Dz75YPM5QI/TU1HE2fJgF550Z1xZxIwCrxA5 YgZWYYpekd8wyWH2UO+SZnKoJdL3N5E= X-MC-Unique: xr3vp4o0MFiRu597lrtshQ-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: C2juxObFORin0pR336_B3A-1 X-Riseup-User-ID: 0932CB7BFABE482F5E95C6427BFEE36007FCA5DD7E74DD00EB00C0F456714576 From: K Shiva Kiran To: libvir-list@redhat.com Subject: [PATCH v2 01/11] nwfilter_conf: Add schema and parser logic for nwfilter metadata Date: Tue, 10 Oct 2023 22:48:33 +0530 Message-ID: <20231010172509.103884-2-shiva_kr@riseup.net> In-Reply-To: <20231010172509.103884-1-shiva_kr@riseup.net> References: <20231010172509.103884-1-shiva_kr@riseup.net> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: K Shiva Kiran Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696959416461100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Adds three new elements , <description> and <metadata> Signed-off-by: K Shiva Kiran <shiva_kr@riseup.net> --- docs/formatnwfilter.rst | 31 ++++++++++++++++++++++ src/conf/nwfilter_conf.c | 30 +++++++++++++++++++++ src/conf/nwfilter_conf.h | 5 ++++ src/conf/schemas/nwfilter.rng | 9 +++++++ tests/nwfilterxml2xmlin/metadata-test.xml | 12 +++++++++ tests/nwfilterxml2xmlout/metadata-test.xml | 10 +++++++ tests/nwfilterxml2xmltest.c | 1 + 7 files changed, 98 insertions(+) create mode 100644 tests/nwfilterxml2xmlin/metadata-test.xml create mode 100644 tests/nwfilterxml2xmlout/metadata-test.xml diff --git a/docs/formatnwfilter.rst b/docs/formatnwfilter.rst index 434da5b1fd..94a35abfce 100644 --- a/docs/formatnwfilter.rst +++ b/docs/formatnwfilter.rst @@ -419,6 +419,37 @@ better organized for more efficient processing by the = firewall subsystem of the underlying host. Currently the system only supports the chains ``root, ipv4, ipv6, arp and rarp``. =20 +General Metadata +~~~~~~~~~~~~~~~~ + +:: + + <filter name=3D'clean-traffic' filter=3D'arp'> + <uuid>6ef53069-ba34-94a0-d33d-17751b9b8cb1</uuid> + <title>A short description - title - of the filter + Some human readable description + + .. + .. + + ... + + +``title`` + The optional element ``title`` provides space for a short description o= f the + filter. The title should not contain any newlines. :since:`Since 9.9.0`= . +``description`` + The content of the ``description`` element provides a human readable + description of the filter. This data is not used by libvirt in any + way, it can contain any information the user wants. :since:`Since 9.9.0` +``metadata`` + The ``metadata`` node can be used by applications to store custom metad= ata in + the form of XML nodes/trees. Applications must use custom namespaces on= their + XML nodes/trees, with only one top-level element per namespace (if the + application needs structure, they should have sub-elements to their nam= espace + element). :since:`Since 9.9.0` + + References to other filters ~~~~~~~~~~~~~~~~~~~~~~~~~~~ =20 diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c index 35f6efbbe2..d03f78af4d 100644 --- a/src/conf/nwfilter_conf.c +++ b/src/conf/nwfilter_conf.c @@ -327,6 +327,10 @@ virNWFilterDefFree(virNWFilterDef *def) g_free(def->filterEntries); g_free(def->chainsuffix); =20 + g_free(def->title); + g_free(def->description); + xmlFreeNode(def->metadata); + g_free(def); } =20 @@ -2516,6 +2520,7 @@ virNWFilterDefParseXML(xmlXPathContextPtr ctxt) virNWFilterEntry *entry; int chain_priority; const char *name_prefix; + xmlNodePtr metadataNode =3D NULL; =20 ret =3D g_new0(virNWFilterDef, 1); =20 @@ -2582,6 +2587,23 @@ virNWFilterDefParseXML(xmlXPathContextPtr ctxt) } } =20 + /* Extract short description of filter (title) */ + ret->title =3D virXPathString("string(./title[1])", ctxt); + if (ret->title && strchr(ret->title, '\n')) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Network filter title can't contain newlines")); + return NULL; + } + + /* Extract documentation if present */ + ret->description =3D virXPathString("string(./description[1])", ctxt); + + /* Extract custom metadata */ + if ((metadataNode =3D virXPathNode("./metadata[1]", ctxt)) !=3D NULL) { + ret->metadata =3D xmlCopyNode(metadataNode, 1); + virXMLNodeSanitizeNamespaces(ret->metadata); + } + curr =3D curr->children; =20 while (curr !=3D NULL) { @@ -2873,6 +2895,14 @@ virNWFilterDefFormat(const virNWFilterDef *def) virUUIDFormat(def->uuid, uuid); virBufferAsprintf(&buf, "%s\n", uuid); =20 + virBufferEscapeString(&buf, "%s\n", def->title); + + virBufferEscapeString(&buf, "%s\n", + def->description); + + if (virXMLFormatMetadata(&buf, def->metadata) < 0) + return NULL; + for (i =3D 0; i < def->nentries; i++) { if (virNWFilterEntryFormat(&buf, def->filterEntries[i]) < 0) return NULL; diff --git a/src/conf/nwfilter_conf.h b/src/conf/nwfilter_conf.h index 22c2fb51f0..34de6eab3d 100644 --- a/src/conf/nwfilter_conf.h +++ b/src/conf/nwfilter_conf.h @@ -517,6 +517,11 @@ struct _virNWFilterDef { =20 size_t nentries; virNWFilterEntry **filterEntries; + + /* User-defined metadata */ + char* title; + char* description; + xmlNodePtr metadata; }; =20 =20 diff --git a/src/conf/schemas/nwfilter.rng b/src/conf/schemas/nwfilter.rng index 262bd551e3..c56bbac732 100644 --- a/src/conf/schemas/nwfilter.rng +++ b/src/conf/schemas/nwfilter.rng @@ -14,6 +14,15 @@ + + + + + + + + + diff --git a/tests/nwfilterxml2xmlin/metadata-test.xml b/tests/nwfilterxml2= xmlin/metadata-test.xml new file mode 100644 index 0000000000..db2c7d2828 --- /dev/null +++ b/tests/nwfilterxml2xmlin/metadata-test.xml @@ -0,0 +1,12 @@ + + 81ff0d90-c91e-6742-64da-4a736edb9a8e + This is a title + This is a description. +It can contain newlines. + + + + fooish + barish + + diff --git a/tests/nwfilterxml2xmlout/metadata-test.xml b/tests/nwfilterxml= 2xmlout/metadata-test.xml new file mode 100644 index 0000000000..fe8bdfee01 --- /dev/null +++ b/tests/nwfilterxml2xmlout/metadata-test.xml @@ -0,0 +1,10 @@ + + 81ff0d90-c91e-6742-64da-4a736edb9a8e + This is a title + This is a description. +It can contain newlines. + + fooish + barish + + diff --git a/tests/nwfilterxml2xmltest.c b/tests/nwfilterxml2xmltest.c index c2481481ee..6a378a853a 100644 --- a/tests/nwfilterxml2xmltest.c +++ b/tests/nwfilterxml2xmltest.c @@ -130,6 +130,7 @@ mymain(void) DO_TEST("iter-test3", false); =20 DO_TEST("ipset-test", false); + DO_TEST("metadata-test", false); =20 return ret =3D=3D 0 ? EXIT_SUCCESS : EXIT_FAILURE; } --=20 2.42.0 From nobody Sun May 12 13:01:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.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 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1696959407; cv=none; d=zohomail.com; s=zohoarc; b=EpRQL5wMMFd5tu8XI/N1IjkfT6zRQ3q8vtbDz9W5NdO8KMWJDMZhUZvpEzGXfcawGIS+UFEljoHlYF2iW2P3/19sgWrTbJt8Dj5xxXPyJ+kh9WJRkCcvs0Yioce85MUrnZJjb8gw21v4DFjAK1DZn93pBOubv1GoH005vT7deGI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696959407; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KPsAFra45GzZ+cHh5/aFZIDdSuicd5MX5e8iXF/k8lk=; b=fxMV8ZtBkV0lAWPNzxCntghMlSgU0IHPSBOs/G+NesPLlskxP7OO2BcGON9WuE/a4KuOfxJ3SvtEeVGNixSPKfL9Sn+r2n9jjvzKGm7PvcpvOybbQtVPJ9WBbobRmInBGA1j98JXBHjCHzg6MuUGBzOjT4fXoc2QMT53aA46se0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1696959407622536.5294024961861; Tue, 10 Oct 2023 10:36:47 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-571-XILqqPXbPnm4whsQ5Yr1Rg-1; Tue, 10 Oct 2023 13:36:40 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id B96C0887E54; Tue, 10 Oct 2023 17:36:28 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9F69963F45; Tue, 10 Oct 2023 17:36:28 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 8DA6F19465B8; Tue, 10 Oct 2023 17:36:28 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 603B71946597 for ; Tue, 10 Oct 2023 17:36:27 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 501D41B99; Tue, 10 Oct 2023 17:36:27 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast10.extmail.prod.ext.rdu2.redhat.com [10.11.55.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 49550158 for ; Tue, 10 Oct 2023 17:36:27 +0000 (UTC) Received: from us-smtp-inbound-delivery-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 289DD1C0DB0D for ; Tue, 10 Oct 2023 17:36:27 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-448-WGbTwvfyO6qL7CNq766ihw-1; Tue, 10 Oct 2023 13:36:19 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4S4jVx6CVMzDqgv for ; Tue, 10 Oct 2023 17:26:33 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4S4jVw4y95zFqjK; Tue, 10 Oct 2023 17:26:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696959406; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=KPsAFra45GzZ+cHh5/aFZIDdSuicd5MX5e8iXF/k8lk=; b=KnXxZOZvReHd5w6m2Vrsblbx3ea6b+XwSm/SsL5KW5N4KubFMIJpGIOusGoayvjDgWjz5J aSRWF66NiUxN0Psq64nvi71Hiul/9GI7LzuxRQ+NAlUN+GiEr0xcCwySQ7S4/HTZc0rA+j 7+16htf9y8zvG//Q+CdFUPaTBOGH6jg= X-MC-Unique: XILqqPXbPnm4whsQ5Yr1Rg-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: WGbTwvfyO6qL7CNq766ihw-1 X-Riseup-User-ID: 4E8E79229EF1E1241947BD25BBAAEE91943E32E38EB0C8E684D1C0506B49F3B9 From: K Shiva Kiran To: libvir-list@redhat.com Subject: [PATCH v2 02/11] nwfilter_conf: Introduce public API to get/set user metadata Date: Tue, 10 Oct 2023 22:48:34 +0530 Message-ID: <20231010172509.103884-3-shiva_kr@riseup.net> In-Reply-To: <20231010172509.103884-1-shiva_kr@riseup.net> References: <20231010172509.103884-1-shiva_kr@riseup.net> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: K Shiva Kiran Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696959408553100002 Content-Type: text/plain; charset="utf-8"; x-default="true" Two new APIs to work with user defined metadata: - virNWFilterSetMetadata() - virNWFilterGetMetadata() Signed-off-by: K Shiva Kiran --- include/libvirt/libvirt-nwfilter.h | 27 +++++ include/libvirt/virterror.h | 1 + src/driver-nwfilter.h | 15 +++ src/libvirt-nwfilter.c | 154 +++++++++++++++++++++++++++++ src/libvirt_public.syms | 6 ++ src/util/virerror.c | 3 + 6 files changed, 206 insertions(+) diff --git a/include/libvirt/libvirt-nwfilter.h b/include/libvirt/libvirt-n= wfilter.h index 33b842b464..1bfe05d633 100644 --- a/include/libvirt/libvirt-nwfilter.h +++ b/include/libvirt/libvirt-nwfilter.h @@ -159,4 +159,31 @@ int virNWFilterBindingDelete(virNW= FilterBindingPtr binding); int virNWFilterBindingRef(virNWFilterBindingPtr bindin= g); int virNWFilterBindingFree(virNWFilterBindingPtr bindi= ng); =20 +/** + * virNWFilterMetadataType: + * + * Since: 9.9.0 + */ +typedef enum { + VIR_NWFILTER_METADATA_DESCRIPTION =3D 0, /* Operate on (= Since: 9.9.0) */ + VIR_NWFILTER_METADATA_TITLE =3D 1, /* Operate on (Since:= 9.9.0) */ + VIR_NWFILTER_METADATA_ELEMENT =3D 2, /* Operate on <metadata> (Sin= ce: 9.9.0) */ + +# ifdef VIR_ENUM_SENTINELS + VIR_NWFILTER_METADATA_LAST /* (Since: 9.9.0) */ +# endif +} virNWFilterMetadataType; + +int virNWFilterSetMetadata(virNWFilterPtr nwfilter, + int type, + const char *metadata, + const char *key, + const char *uri, + unsigned int flags); + +char * virNWFilterGetMetadata(virNWFilterPtr nwfilter, + int type, + const char *uri, + unsigned int flags); + #endif /* LIBVIRT_NWFILTER_H */ diff --git a/include/libvirt/virterror.h b/include/libvirt/virterror.h index 224eddc9e4..04d06b4bda 100644 --- a/include/libvirt/virterror.h +++ b/include/libvirt/virterror.h @@ -349,6 +349,7 @@ typedef enum { VIR_ERR_CHECKPOINT_INCONSISTENT =3D 109, /* checkpoint can't be used (= Since: 6.10.0) */ VIR_ERR_MULTIPLE_DOMAINS =3D 110, /* more than one matching domain= found (Since: 7.1.0) */ VIR_ERR_NO_NETWORK_METADATA =3D 111, /* Network metadata is not prese= nt (Since: 9.7.0) */ + VIR_ERR_NO_NWFILTER_METADATA =3D 112, /* NWFilter metadata is not pre= sent (Since: 9.9.0) */ =20 # ifdef VIR_ENUM_SENTINELS VIR_ERR_NUMBER_LAST /* (Since: 5.0.0) */ diff --git a/src/driver-nwfilter.h b/src/driver-nwfilter.h index 1ec591ece9..8d38dbd23c 100644 --- a/src/driver-nwfilter.h +++ b/src/driver-nwfilter.h @@ -86,6 +86,19 @@ typedef int typedef int (*virDrvNWFilterBindingFree)(virNWFilterBindingPtr binding); =20 +typedef int +(*virDrvNWFilterSetMetadata)(virNWFilterPtr nwfilter, + int type, + const char *metadata, + const char *key, + const char *uri, + unsigned int flags); + +typedef char * +(*virDrvNWFilterGetMetadata)(virNWFilterPtr nwfilter, + int type, + const char *uri, + unsigned int flags); =20 typedef struct _virNWFilterDriver virNWFilterDriver; =20 @@ -111,4 +124,6 @@ struct _virNWFilterDriver { virDrvNWFilterBindingCreateXML nwfilterBindingCreateXML; virDrvNWFilterBindingDelete nwfilterBindingDelete; virDrvNWFilterBindingGetXMLDesc nwfilterBindingGetXMLDesc; + virDrvNWFilterSetMetadata nwfilterSetMetadata; + virDrvNWFilterGetMetadata nwfilterGetMetadata; }; diff --git a/src/libvirt-nwfilter.c b/src/libvirt-nwfilter.c index ff82cc3b7f..a496bc9f0a 100644 --- a/src/libvirt-nwfilter.c +++ b/src/libvirt-nwfilter.c @@ -920,3 +920,157 @@ virNWFilterBindingRef(virNWFilterBindingPtr binding) virObjectRef(binding); return 0; } + + +/** + * virNWFilterSetMetadata: + * @nwfilter: a network filter object + * @type: type of metadata, from virNWFilterMetadataType + * @metadata: new metadata text + * @key: XML namespace key, or NULL + * @uri: XML namespace URI, or NULL + * @flags: extra flags; not used yet, so callers should always pass 0 + * + * Sets the appropriate nwfilter element given by @type to the + * value of @metadata. + * For options VIR_NWFILTER_METADATA_TITLE and VIR_NWFILTER_METADATA_DESCR= IPTION + * @key and @uri are irrelevant and must be set to NULL. + * + * For type VIR_NWFILTER_METADATA_ELEMENT @metadata must be a well-formed + * XML belonging to namespace defined by @uri with local name @key. + * + * Passing NULL for @metadata says to remove that element from the + * network filter XML (passing the empty string leaves the element present= ). + * + * The resulting metadata will be present in virNWFilterGetXMLDesc(), + * as well as quick access through virNWFilterGetMetadata(). + * + * Returns 0 on success, -1 in case of failure. + * + * Since: 9.9.0 + */ +int +virNWFilterSetMetadata(virNWFilterPtr nwfilter, + int type, + const char *metadata, + const char *key, + const char *uri, + unsigned int flags) +{ + virConnectPtr conn; + + VIR_DEBUG("nwfilter=3D%p, type=3D%d, metadata=3D'%s', key=3D'%s', uri= =3D'%s', flags=3D0x%x", + nwfilter, type, NULLSTR(metadata), NULLSTR(key), NULLSTR(uri= ), + flags); + + virResetLastError(); + + virCheckNWFilterReturn(nwfilter, -1); + conn =3D nwfilter->conn; + + virCheckReadOnlyGoto(conn->flags, error); + + switch (type) { + case VIR_NWFILTER_METADATA_TITLE: + if (metadata && strchr(metadata, '\n')) { + virReportInvalidArg(metadata, "%s", + _("metadata title can't contain newlines")= ); + goto error; + } + G_GNUC_FALLTHROUGH; + case VIR_NWFILTER_METADATA_DESCRIPTION: + virCheckNullArgGoto(uri, error); + virCheckNullArgGoto(key, error); + break; + case VIR_NWFILTER_METADATA_ELEMENT: + virCheckNonNullArgGoto(uri, error); + if (metadata) + virCheckNonNullArgGoto(key, error); + break; + default: + /* For future expansion */ + break; + } + + if (conn->nwfilterDriver->nwfilterSetMetadata) { + int ret; + ret =3D conn->nwfilterDriver->nwfilterSetMetadata(nwfilter, type, = metadata, key, uri, + flags); + if (ret < 0) + goto error; + return ret; + } + + virReportUnsupportedError(); + + error: + virDispatchError(nwfilter->conn); + return -1; +} + + +/** + * virNWFilterGetMetadata: + * @nwfilter: a network filter object + * @type: type of metadata, from virNWFilterMetadataType + * @uri: XML namespace identifier + * @flags: extra flags; not used yet, so callers should always pass 0 + * + * Retrieves the appropriate network filter element given by @type. + * If VIR_NWFILTER_METADATA_ELEMENT is requested parameter @uri + * must be set to the name of the namespace the requested elements + * belong to, otherwise must be NULL. + * + * If an element of the network filter XML is not present, the resulting + * error will be VIR_ERR_NO_NWFILTER_METADATA. This method forms + * a shortcut for seeing information from virNWFilterSetMetadata() + * without having to go through virNWFilterGetXMLDesc(). + * + * Returns the metadata string on success (caller must free), + * or NULL in case of failure. + * + * Since: 9.9.0 + */ +char * +virNWFilterGetMetadata(virNWFilterPtr nwfilter, + int type, + const char *uri, + unsigned int flags) +{ + virConnectPtr conn; + + VIR_DEBUG("nwfilter=3D%p, type=3D%d, uri=3D'%s', flags=3D0x%x", + nwfilter, type, NULLSTR(uri), flags); + + virResetLastError(); + + virCheckNWFilterReturn(nwfilter, NULL); + + switch (type) { + case VIR_NWFILTER_METADATA_TITLE: + case VIR_NWFILTER_METADATA_DESCRIPTION: + virCheckNullArgGoto(uri, error); + break; + case VIR_NWFILTER_METADATA_ELEMENT: + virCheckNonNullArgGoto(uri, error); + break; + default: + /* For future expansion */ + break; + } + + conn =3D nwfilter->conn; + + if (conn->nwfilterDriver->nwfilterGetMetadata) { + char *ret; + if (!(ret =3D conn->nwfilterDriver->nwfilterGetMetadata(nwfilter, = type, uri, flags))) + goto error; + return ret; + } + + virReportUnsupportedError(); + + error: + virDispatchError(nwfilter->conn); + return NULL; +} diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms index bd1e916d2a..02d32567a4 100644 --- a/src/libvirt_public.syms +++ b/src/libvirt_public.syms @@ -938,4 +938,10 @@ LIBVIRT_9.7.0 { virNetworkSetMetadata; } LIBVIRT_9.0.0; =20 +LIBVIRT_9.9.0 { + global: + virNWFilterGetMetadata; + virNWFilterSetMetadata; +} LIBVIRT_9.7.0; + # .... define new API here using predicted next version number .... diff --git a/src/util/virerror.c b/src/util/virerror.c index 227a182417..a1d0d73e5d 100644 --- a/src/util/virerror.c +++ b/src/util/virerror.c @@ -1290,6 +1290,9 @@ static const virErrorMsgTuple virErrorMsgStrings[] = =3D { [VIR_ERR_NO_NETWORK_METADATA] =3D { N_("metadata not found"), N_("metadata not found: %1$s") }, + [VIR_ERR_NO_NWFILTER_METADATA] =3D { + N_("metadata not found"), + N_("metadata not found: %1$s") }, }; =20 G_STATIC_ASSERT(G_N_ELEMENTS(virErrorMsgStrings) =3D=3D VIR_ERR_NUMBER_LAS= T); --=20 2.42.0 From nobody Sun May 12 13:01:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.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 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1696959397; cv=none; d=zohomail.com; s=zohoarc; b=PHxtrnUJgdjMOInbLgiqOKl3wBzRNID9VCwn3JRr3ZO5zQvNBPMlngU4mm6tuSUJMymDJAZS0NJvlaI9s9Td+9Ajh+gaVtYuyNSCwjd5EozXka/HCbGkBRiaQStUhWfl89CxIh3cUBJ1/bcUwKiOJeg3RLRN5Ww2FC5CORlXijE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696959397; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=veRSXCUzgnqHizCApCq3mHjRTBQZVnPY5KZ1ldUmo00=; b=BynYSvkJ9RygV2ZhAIoskKucA1P/KWnWD75Yxdgw6nwc9NRUXb5D6n/nXuShCEmByGxe+juvmU1VMS9bdRLL4ZH2FLj/kuRS/4MkUQ8z19lmNCEIQ9zx3lEEV4PxXGwZv3+XnWzwyROn3s4jy9Eepqt3+794q51VEknygbFG1dA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 169695939700021.42894497566317; Tue, 10 Oct 2023 10:36:37 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-338-2nLPG-zdOxC5_GOBxKmwBg-1; Tue, 10 Oct 2023 13:36:31 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0E7C58039C1; Tue, 10 Oct 2023 17:36:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id EBCF0C0F788; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 7688D19465B8; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 269181946597 for <libvir-list@listman.corp.redhat.com>; Tue, 10 Oct 2023 17:36:20 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id F2BAB158; Tue, 10 Oct 2023 17:36:19 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast10.extmail.prod.ext.rdu2.redhat.com [10.11.55.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E9C981BA2 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:19 +0000 (UTC) Received: from us-smtp-inbound-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BF47C1C07585 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:19 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-615-pxsAAfY0MSCppPa9aaVrzg-1; Tue, 10 Oct 2023 13:36:18 -0400 Received: from mx0.riseup.net (mx0-pn.riseup.net [10.0.1.42]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4S4jW150VQzDqt3 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:37 +0000 (UTC) Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx0.riseup.net (Postfix) with ESMTPS id 4S4jVz3kpRz9t6j for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:35 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4S4jVy2QSWzFpcn; Tue, 10 Oct 2023 17:26:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696959395; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=veRSXCUzgnqHizCApCq3mHjRTBQZVnPY5KZ1ldUmo00=; b=Kso6unwyIN0sRXBXlj3FVb7phP8HlOT7R+CbK8+EhZHyPqAczEkAqP1/oBwyYdHXoK6zPg ZcjY6szbhobIGA/OKYmMhikS4hdCi+PFMWzck0R7jSp5EsvCwCifvNnE7uxiA8O2gduS+b QAxqZkjnbeU7ezLqRCgd67dIKHSLloE= X-MC-Unique: 2nLPG-zdOxC5_GOBxKmwBg-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: pxsAAfY0MSCppPa9aaVrzg-1 X-Riseup-User-ID: B8FEADDA9F1EDA38C7C2B63A3D7731E27C0A296D10672F371526201FF49A563C From: K Shiva Kiran <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [PATCH v2 03/11] nwfilter: Implement RPC Date: Tue, 10 Oct 2023 22:48:35 +0530 Message-ID: <20231010172509.103884-4-shiva_kr@riseup.net> In-Reply-To: <20231010172509.103884-1-shiva_kr@riseup.net> References: <20231010172509.103884-1-shiva_kr@riseup.net> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva Kiran <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696959398414100003 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: K Shiva Kiran <shiva_kr@riseup.net> --- src/remote/remote_driver.c | 2 ++ src/remote/remote_protocol.x | 34 +++++++++++++++++++++++++++++++++- src/remote_protocol-structs | 19 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 857acef69a..0573e1afb3 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -8300,6 +8300,8 @@ static virNWFilterDriver nwfilter_driver =3D { .nwfilterBindingCreateXML =3D remoteNWFilterBindingCreateXML, /* 4.5.0= */ .nwfilterBindingDelete =3D remoteNWFilterBindingDelete, /* 4.5.0 */ .nwfilterBindingGetXMLDesc =3D remoteNWFilterBindingGetXMLDesc, /* 4.5= .0 */ + .nwfilterSetMetadata =3D remoteNWFilterSetMetadata, /* 9.9.0 */ + .nwfilterGetMetadata =3D remoteNWFilterGetMetadata, /* 9.9.0 */ }; =20 static virConnectDriver connect_driver =3D { diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x index e295b0acc3..9fbf93e588 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -1684,6 +1684,25 @@ struct remote_nwfilter_get_xml_desc_ret { remote_nonnull_string xml; }; =20 +struct remote_nwfilter_set_metadata_args { + remote_nonnull_nwfilter nwfilter; + int type; + remote_string metadata; + remote_string key; + remote_string uri; + unsigned int flags; +}; + +struct remote_nwfilter_get_metadata_args { + remote_nonnull_nwfilter nwfilter; + int type; + remote_string uri; + unsigned int flags; +}; + +struct remote_nwfilter_get_metadata_ret { + remote_nonnull_string metadata; +}; =20 /* Interface calls: */ =20 @@ -7021,5 +7040,18 @@ enum remote_procedure { * @generate: both * @acl: none */ - REMOTE_PROC_NETWORK_EVENT_CALLBACK_METADATA_CHANGE =3D 446 + REMOTE_PROC_NETWORK_EVENT_CALLBACK_METADATA_CHANGE =3D 446, + + /** + * @generate: both + * @acl: nwfilter:write + * @acl: nwfilter:save + */ + REMOTE_PROC_NWFILTER_SET_METADATA =3D 447, + + /** + * @generate: both + * @acl: nwfilter:read + */ + REMOTE_PROC_NWFILTER_GET_METADATA =3D 448 }; diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs index 924ca41825..2ee491a3fe 100644 --- a/src/remote_protocol-structs +++ b/src/remote_protocol-structs @@ -1220,6 +1220,23 @@ struct remote_nwfilter_get_xml_desc_args { struct remote_nwfilter_get_xml_desc_ret { remote_nonnull_string xml; }; +struct remote_nwfilter_set_metadata_args { + remote_nonnull_nwfilter nwfilter; + int type; + remote_string metadata; + remote_string key; + remote_string uri; + u_int flags; +}; +struct remote_nwfilter_get_metadata_args { + remote_nonnull_nwfilter nwfilter; + int type; + remote_string uri; + u_int flags; +}; +struct remote_nwfilter_get_metadata_ret { + remote_nonnull_string metadata; +}; struct remote_connect_num_of_interfaces_ret { int num; }; @@ -3743,4 +3760,6 @@ enum remote_procedure { REMOTE_PROC_NETWORK_SET_METADATA =3D 444, REMOTE_PROC_NETWORK_GET_METADATA =3D 445, REMOTE_PROC_NETWORK_EVENT_CALLBACK_METADATA_CHANGE =3D 446, + REMOTE_PROC_NWFILTER_SET_METADATA =3D 447, + REMOTE_PROC_NWFILTER_GET_METADATA =3D 448, }; --=20 2.42.0 From nobody Sun May 12 13:01:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.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 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1696959406; cv=none; d=zohomail.com; s=zohoarc; b=ha2yKfv1IoKt/0ASE9FwlyYxCZ8/oATFpiXzzj0vW9izVii71uY9WESPrVZgP74Q657axdv+xwBiSeikbHsxDANuNFjh/Y9JsVgZKbwkdLm5TjAKKH7ZYHu6NvQ7blLmB1PleI0gnhSOudbdprXTWnO81n1yNAzZ86z1ZI0SsdQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696959406; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Mz0hPIvFw8UXnbSWKk6RGSnD636ftqFoYiiunFwt42w=; b=TarkU1n68tKiDNUtl4AI1HcIHstmNh4EMAnyfQFHXL38iabaDfKD1l3CdbRXfMh9s7Nx5ubjWae/n8u1V97Bswjae69QpYZIKz0/14IJ8uYlecGnC0qhtmIrbiWxjlTcjxFiUoKlslnhZJehZizl3cCR1eHwX+9u8PSjF6gsT98= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1696959406619802.7107317359784; Tue, 10 Oct 2023 10:36:46 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-413-cntisv6DN9S0LFdDehrAnA-1; Tue, 10 Oct 2023 13:36:35 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4A55518188C8; Tue, 10 Oct 2023 17:36:32 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3357840C6CA0; Tue, 10 Oct 2023 17:36:32 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 24B8A19465BB; Tue, 10 Oct 2023 17:36:32 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 53AB41946597 for <libvir-list@listman.corp.redhat.com>; Tue, 10 Oct 2023 17:36:31 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 3665A40C6CA0; Tue, 10 Oct 2023 17:36:31 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast07.extmail.prod.ext.rdu2.redhat.com [10.11.55.23]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2F01A40C6CA2 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:31 +0000 (UTC) Received: from us-smtp-inbound-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 04F283C1478E for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:31 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-615-CMwpL33xM3KZ8vQUB4g2yA-1; Tue, 10 Oct 2023 13:36:18 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4S4jW11F1BzDqG3 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:37 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4S4jW001w0zFpcn; Tue, 10 Oct 2023 17:26:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696959405; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=Mz0hPIvFw8UXnbSWKk6RGSnD636ftqFoYiiunFwt42w=; b=QFHnWhuCBeF/1NcprQTXwhYE9cr7T0r4qhGyr5WUecI9/xJfeTQlIs1NPt6+3MsJi34N+g tdTqCRTNvAMOihxn/974oUHdDZJru1zlsDXmfEmcjTvFdLamMcCef2dzGwgvVScSvy65Ts 658aplMH2EFnjMUOmW+AWJppTO0ghdQ= X-MC-Unique: cntisv6DN9S0LFdDehrAnA-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: CMwpL33xM3KZ8vQUB4g2yA-1 X-Riseup-User-ID: 38AA3841077A15C0EB1A21AD6797215471605F2782708CB0E57B4FBD497234EE From: K Shiva Kiran <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [PATCH v2 04/11] virsh: Add new command `nwfilter-desc` Date: Tue, 10 Oct 2023 22:48:36 +0530 Message-ID: <20231010172509.103884-5-shiva_kr@riseup.net> In-Reply-To: <20231010172509.103884-1-shiva_kr@riseup.net> References: <20231010172509.103884-1-shiva_kr@riseup.net> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.2 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva Kiran <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.2 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696959408547100001 Content-Type: text/plain; charset="utf-8"; x-default="true" This command can be used to view/modify the `<title>` and `<description>` fields of the Network filter object. Signed-off-by: K Shiva Kiran <shiva_kr@riseup.net> --- docs/manpages/virsh.rst | 40 ++++++++ tools/virsh-nwfilter.c | 209 ++++++++++++++++++++++++++++++++++++++++ tools/virsh-util.c | 25 +++++ tools/virsh-util.h | 9 ++ 4 files changed, 283 insertions(+) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 4ae3bb4d93..3c7cbf1e11 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -8134,6 +8134,46 @@ The editor used can be supplied by the ``$VISUAL`` o= r ``$EDITOR`` environment variables, and defaults to ``vi``. =20 =20 +nwfilter-desc +------------- + +**Syntax:** + +:: + + nwfilter-desc [--nwfilter] nwfilter-name + [--title] [--edit] [--remove] + [--new-desc new-value] + +Show or modify description and title of a network filter. + +These values are user fields that allow storing arbitrary textual data to +allow easy identification of network filters. +Title should be short, although it's not enforced. +(See also ``nwfilter-metadata`` that works with XML based network filter m= etadata.) + +- *--title* + + Specifies to operate on the title field instead of description. + +- *--edit* + + Opens an editor with the current title or description. + Modifications to the contents will be saved back. + Alternatively, the new contents can be provided via the *--new-desc* opt= ion. + +- *--remove* + + Removes the title or description field. + +- *--new-desc* + + Stores the provided title/description string. + +If neither of *--edit* or *--new-desc* are specified, the title or descrip= tion +is displayed instead of being modified. + + NWFILTER BINDING COMMANDS =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D =20 diff --git a/tools/virsh-nwfilter.c b/tools/virsh-nwfilter.c index 92b2b7b3bc..615d126def 100644 --- a/tools/virsh-nwfilter.c +++ b/tools/virsh-nwfilter.c @@ -26,6 +26,7 @@ #include "viralloc.h" #include "virfile.h" #include "vsh-table.h" +#include "virxml.h" =20 virNWFilterPtr virshCommandOptNWFilterBy(vshControl *ctl, const vshCmd *cmd, @@ -345,6 +346,53 @@ virshNWFilterListCollect(vshControl *ctl, return list; } =20 +/* extract description or title from nwfilter xml */ +static char * +virshGetNWFilterDescription(vshControl *ctl, virNWFilterPtr nwfilter, + bool title, unsigned int flags, + unsigned int queryflags) +{ + char *desc =3D NULL; + g_autoptr(xmlDoc) doc =3D NULL; + g_autoptr(xmlXPathContext) ctxt =3D NULL; + int type; + + if (title) + type =3D VIR_NWFILTER_METADATA_TITLE; + else + type =3D VIR_NWFILTER_METADATA_DESCRIPTION; + + if ((desc =3D virNWFilterGetMetadata(nwfilter, type, NULL, flags))) { + return desc; + } else { + int errCode =3D virGetLastErrorCode(); + + if (errCode =3D=3D VIR_ERR_NO_NWFILTER_METADATA) { + desc =3D g_strdup(""); + vshResetLibvirtError(); + return desc; + } + + if (errCode !=3D VIR_ERR_NO_SUPPORT) + return desc; + } + + /* fall back to xml */ + if (virshNWFilterGetXMLFromNWFilter(ctl, nwfilter, queryflags, &doc, &= ctxt) < 0) + return NULL; + + if (title) + desc =3D virXPathString("string(./title[1])", ctxt); + else + desc =3D virXPathString("string(./description[1])", ctxt); + + if (!desc) + desc =3D g_strdup(""); + + return desc; +} + + /* * "nwfilter-list" command */ @@ -768,6 +816,161 @@ cmdNWFilterBindingList(vshControl *ctl, const vshCmd = *cmd G_GNUC_UNUSED) } =20 =20 +/* + * "nwfilter-desc" command + */ +static const vshCmdInfo info_nwfilter_desc[] =3D { + {.name =3D "help", + .data =3D N_("show or set network filter's description or title") + }, + {.name =3D "desc", + .data =3D N_("Allows setting or modifying the description or title of= a network filter.") + }, + {.name =3D NULL} +}; + +static const vshCmdOptDef opts_nwfilter_desc[] =3D { + {.name =3D "nwfilter", + .type =3D VSH_OT_DATA, + .flags =3D VSH_OFLAG_REQ, + .help =3D N_("network filter name or uuid"), + .completer =3D virshNWFilterNameCompleter, + }, + {.name =3D "title", + .type =3D VSH_OT_BOOL, + .help =3D N_("modify/get the title instead of description") + }, + {.name =3D "edit", + .type =3D VSH_OT_BOOL, + .help =3D N_("open an editor to modify the description") + }, + {.name =3D "remove", + .type =3D VSH_OT_BOOL, + .help =3D N_("remove the element") + }, + {.name =3D "new-desc", + .type =3D VSH_OT_ARGV, + .help =3D N_("message") + }, + {.name =3D NULL} +}; + +static bool +cmdNWFilterDesc(vshControl *ctl, const vshCmd *cmd) +{ + g_autoptr(virshNWFilter) nwfilter =3D NULL; + bool title =3D vshCommandOptBool(cmd, "title"); + bool edit =3D vshCommandOptBool(cmd, "edit"); + bool remove =3D vshCommandOptBool(cmd, "remove"); + int type; + g_autofree char *descArg =3D NULL; + const vshCmdOpt *opt =3D NULL; + g_auto(virBuffer) buf =3D VIR_BUFFER_INITIALIZER; + unsigned int flags =3D 0; + unsigned int queryflags =3D 0; + + VSH_EXCLUSIVE_OPTIONS("remove", "edit"); + + if (!(nwfilter =3D virshCommandOptNWFilter(ctl, cmd, NULL))) + return false; + + if (title) + type =3D VIR_NWFILTER_METADATA_TITLE; + else + type =3D VIR_NWFILTER_METADATA_DESCRIPTION; + + + while ((opt =3D vshCommandOptArgv(ctl, cmd, opt))) + virBufferAsprintf(&buf, "%s ", opt->data); + + virBufferTrim(&buf, " "); + + descArg =3D virBufferContentAndReset(&buf); + + if (remove) { + + if (descArg) { + vshPrintExtra(ctl, "unexpected data: \'%s\'", descArg); + return false; + } + + if (virNWFilterSetMetadata(nwfilter, type, "", NULL, NULL, flags) = < 0) + goto error; + + vshPrintExtra(ctl, "%s removed successfully", title ? "Title" : "D= escription"); + + } else if (edit || descArg) { + + g_autofree char *descNWFilter =3D NULL; + g_autofree char *descNew =3D NULL; + + if (!(descNWFilter =3D virshGetNWFilterDescription(ctl, nwfilter, + title, flags, que= ryflags))) + return false; + + if (!descArg) + descArg =3D g_strdup(descNWFilter); + + if (edit) { + g_autoptr(vshTempFile) tmp =3D NULL; + g_autofree char *desc_edited =3D NULL; + char *tmpstr; + + /* Create and open a temporary file. */ + if (!(tmp =3D vshEditWriteToTempFile(ctl, descArg))) + return false; + + /* Start the editor. */ + if (vshEditFile(ctl, tmp) =3D=3D -1) + return false; + + /* Read back the edited file. */ + if (!(desc_edited =3D vshEditReadBackFile(ctl, tmp))) + return false; + + /* strip a possible newline at the end */ + if (title && + (tmpstr =3D strrchr(desc_edited, '\n')) && + *(tmpstr+1) =3D=3D '\0') + *tmpstr =3D '\0'; + + /* Check whether XML has changed */ + if (STREQ(descNWFilter, desc_edited)) { + vshPrintExtra(ctl, "Network filter %s has not changed", ti= tle ? "title" : "description"); + return true; + } + + descNew =3D g_steal_pointer(&desc_edited); + + } else { + descNew =3D g_steal_pointer(&descArg); + } + + if (virNWFilterSetMetadata(nwfilter, type, descNew, NULL, NULL, fl= ags) < 0) + goto error; + + vshPrintExtra(ctl, "Network filter %s updated successfully", title= ? "title" : "description"); + + } else { + g_autofree char *desc =3D virshGetNWFilterDescription(ctl, nwfilte= r, title, flags, queryflags); + if (!desc) + return false; + + if (strlen(desc) > 0) { + vshPrint(ctl, "%s", desc); + } else { + vshPrintExtra(ctl, _("No %1$s for network filter: %2$s"), titl= e ? "title" : "description", virNWFilterGetName(nwfilter)); + } + } + + return true; + + error: + vshError(ctl, "Failed to set %s for network filter", title ? "titl= e" : "description"); + return false; +} + + const vshCmdDef nwfilterCmds[] =3D { {.name =3D "nwfilter-define", .handler =3D cmdNWFilterDefine, @@ -823,5 +1026,11 @@ const vshCmdDef nwfilterCmds[] =3D { .info =3D info_nwfilter_binding_list, .flags =3D 0 }, + {.name =3D "nwfilter-desc", + .handler =3D cmdNWFilterDesc, + .opts =3D opts_nwfilter_desc, + .info =3D info_nwfilter_desc, + .flags =3D 0 + }, {.name =3D NULL} }; diff --git a/tools/virsh-util.c b/tools/virsh-util.c index fb6327613a..c3af770c29 100644 --- a/tools/virsh-util.c +++ b/tools/virsh-util.c @@ -423,6 +423,31 @@ virshNetworkGetXMLFromNet(vshControl *ctl, } =20 =20 +int +virshNWFilterGetXMLFromNWFilter(vshControl *ctl, + virNWFilterPtr nwfilter, + unsigned int flags, + xmlDocPtr *xml, + xmlXPathContextPtr *ctxt) +{ + g_autofree char *desc =3D NULL; + + if (!(desc =3D virNWFilterGetXMLDesc(nwfilter, flags))) { + vshError(ctl, _("Failed to get nwfilter description xml")); + return -1; + } + + *xml =3D virXMLParseStringCtxt(desc, _("(nwfilter_definition)"), ctxt); + + if (!(*xml)) { + vshError(ctl, _("Failed to parse nwfilter description xml")); + return -1; + } + + return 0; +} + + int virshDomainGetXML(vshControl *ctl, const vshCmd *cmd, diff --git a/tools/virsh-util.h b/tools/virsh-util.h index 2386847072..4cad3d7eb9 100644 --- a/tools/virsh-util.h +++ b/tools/virsh-util.h @@ -152,6 +152,15 @@ virshNetworkGetXMLFromNet(vshControl *ctl, ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5) G_GNUC_WARN_UNUSED_RESULT; =20 +int +virshNWFilterGetXMLFromNWFilter(vshControl *ctl, + virNWFilterPtr nwfilter, + unsigned int flags, + xmlDocPtr *xml, + xmlXPathContextPtr *ctxt) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4) + ATTRIBUTE_NONNULL(5) G_GNUC_WARN_UNUSED_RESULT; + int virshDomainGetXML(vshControl *ctl, const vshCmd *cmd, --=20 2.42.0 From nobody Sun May 12 13:01:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.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 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1696959400; cv=none; d=zohomail.com; s=zohoarc; b=auVpJe3utZ2djzb6lP0CeRT8Hds2rtCWQCIy9XaAfK6Ue/Yop3CvCh/jbLW48D/AA+m7kjeeP8LWF1tNPZhPlcTWLHTPb8Xr/kmcddpZiaLrDwJfHfqtW2RgEMM2k+j0nPsPTv5x3lMF4gRVuZaZ5iGwsYVcusZ0TZgPqvNuZOU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696959400; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=WvY1hMkWMQiafo5NxrDhvgQrzm1EL3CKW/Q8TEMCEg0=; b=H12eWrENRTtZYda3pVZh24B9rc86GRJlh4MUW9uEUD664KyBo6WjjipwjEdzXK9cYlkFKDDIn1sVje9N1PqPWxgTkwH/mPNMH6myn6u5+mJ9k8lSH4BTszGoT9UKoWHQ0wQ/dlkXqlJujH2l+JSSgfpl0r4shAC4Us5vQVVT2aE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1696959399894445.0292919297425; Tue, 10 Oct 2023 10:36:39 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-45-khY31imeOtWxCs-qZitKRg-1; Tue, 10 Oct 2023 13:36:33 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id EA6302825EAE; Tue, 10 Oct 2023 17:36:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id D26D41BA2; Tue, 10 Oct 2023 17:36:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 517AC1946A54; Tue, 10 Oct 2023 17:36:23 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 1DD351946597 for <libvir-list@listman.corp.redhat.com>; Tue, 10 Oct 2023 17:36:22 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 0D336C0F789; Tue, 10 Oct 2023 17:36:22 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast03.extmail.prod.ext.rdu2.redhat.com [10.11.55.19]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B8536C0F78B for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: from us-smtp-inbound-delivery-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 9A195811E94 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-15-p_BYftAZOkC_htdspfwxhQ-1; Tue, 10 Oct 2023 13:36:19 -0400 Received: from mx0.riseup.net (mx0-pn.riseup.net [10.0.1.42]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4S4jW500bmzDqkZ for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:40 +0000 (UTC) Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx0.riseup.net (Postfix) with ESMTPS id 4S4jW25vDYz9t6j for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:38 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4S4jW14c9PzFpcn; Tue, 10 Oct 2023 17:26:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696959399; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=WvY1hMkWMQiafo5NxrDhvgQrzm1EL3CKW/Q8TEMCEg0=; b=ERjYqG/RyBWKC2piE/re34wF17M9YR5oP9UiQdqTMUQwhlEmBMNjIPhPt9LbbWN1qH+rCi VQTCgn8/46OHHhCHD1EQlgV0cmyDqRTUKcyqMRbD76clMUN84ZYszcGRbr+vEW2fwLwsOF av2UXSIQJAsI4MBvGicF3QGUQoY5174= X-MC-Unique: khY31imeOtWxCs-qZitKRg-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: p_BYftAZOkC_htdspfwxhQ-1 X-Riseup-User-ID: E77986D09203A7E5DE048A34BCEB3705F515B43655B95483117E8109741EBB3F From: K Shiva Kiran <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [PATCH v2 05/11] virsh: Add new command `nwfilter-metadata` Date: Tue, 10 Oct 2023 22:48:37 +0530 Message-ID: <20231010172509.103884-6-shiva_kr@riseup.net> In-Reply-To: <20231010172509.103884-1-shiva_kr@riseup.net> References: <20231010172509.103884-1-shiva_kr@riseup.net> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva Kiran <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696959400619100002 Content-Type: text/plain; charset="utf-8"; x-default="true" With the new command `nwfilter-metadata`, users will be able to view and modify the `<metadata>` field of the Network Filter XML. Signed-off-by: K Shiva Kiran <shiva_kr@riseup.net> --- docs/manpages/virsh.rst | 48 ++++++++++++++ tools/virsh-nwfilter.c | 142 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 190 insertions(+) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 3c7cbf1e11..e15f1832e7 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -8174,6 +8174,54 @@ If neither of *--edit* or *--new-desc* are specified= , the title or description is displayed instead of being modified. =20 =20 +nwfilter-metadata +----------------- + + nwfilter-metadata [--nwfilter] nwfilter-name [--uri] uri + [--edit] [[--key] nskey] [--set new-metadata-xml] + [--remove] + +Show or modify custom XML metadata of a network filter. + +The metadata is a user defined XML that allows storing arbitrary XML data +in the network filter definition. +Multiple separate custom metadata pieces can be stored in the +network filter XML. The pieces are identified by a private XML namespace +provided via the *uri* argument. +(See also ``nwfilter-desc`` that works with textual metadata of +a network filter, such as title and description.) + +- *--uri* + + Specifies the URI for the private namespace. + +- *--edit* + + Opens an editor with the metadata identified by the *uri* argument. + Modifications to the contents will be saved back. + Alternatively, the new contents can be provided via the *--set* argument. + +- *--key* + + Specifies the namespace key to be used. + +- *--set* + + Validates and stores the provided metadata string. + + **Note:** When setting metadata via *--edit* or *--set* the *--key* arg= ument + must be specified and is used to prefix the custom elements to bind them + to the private namespace. + +If neither of *--edit* and *--set* are specified the XML metadata correspo= nding +to the *uri* namespace is displayed instead of being modified. + +- *--remove* + + Specifies that the metadata element specified by the *--uri* argument sh= ould + be removed rather than updated. + + NWFILTER BINDING COMMANDS =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D =20 diff --git a/tools/virsh-nwfilter.c b/tools/virsh-nwfilter.c index 615d126def..801a52746e 100644 --- a/tools/virsh-nwfilter.c +++ b/tools/virsh-nwfilter.c @@ -971,6 +971,142 @@ cmdNWFilterDesc(vshControl *ctl, const vshCmd *cmd) } =20 =20 +/* + * "nwfilter-metadata" command + */ +static const vshCmdInfo info_nwfilter_metadata[] =3D { + {.name =3D "help", + .data =3D N_("show or set network filter's custom XML metadata") + }, + {.name =3D "desc", + .data =3D N_("Shows or modifies the XML metadata of a network filter.= ") + }, + {.name =3D NULL} +}; + +static const vshCmdOptDef opts_nwfilter_metadata[] =3D { + {.name =3D "nwfilter", + .type =3D VSH_OT_DATA, + .flags =3D VSH_OFLAG_REQ, + .help =3D N_("network filter name or uuid"), + .completer =3D virshNWFilterNameCompleter, + }, + {.name =3D "uri", + .type =3D VSH_OT_DATA, + .flags =3D VSH_OFLAG_REQ, + .help =3D N_("URI of the namespace") + }, + {.name =3D "edit", + .type =3D VSH_OT_BOOL, + .help =3D N_("use an editor to change the metadata") + }, + {.name =3D "key", + .type =3D VSH_OT_STRING, + .help =3D N_("key to be used as a namespace identifier"), + }, + {.name =3D "set", + .type =3D VSH_OT_STRING, + .completer =3D virshCompleteEmpty, + .help =3D N_("new metadata to set"), + }, + {.name =3D "remove", + .type =3D VSH_OT_BOOL, + .help =3D N_("remove the metadata corresponding to an uri") + }, + {.name =3D NULL} +}; + +/* helper to add new metadata using the --edit option */ +static char * +virshNWFilterGetEditMetadata(vshControl *ctl G_GNUC_UNUSED, + virNWFilterPtr nwfilter, + const char *uri, + unsigned int flags) +{ + char *ret; + + if (!(ret =3D virNWFilterGetMetadata(nwfilter, VIR_NWFILTER_METADATA_E= LEMENT, + uri, flags))) { + vshResetLibvirtError(); + ret =3D g_strdup("\n"); + } + + return ret; +} + +static bool +cmdNWFilterMetadata(vshControl *ctl, const vshCmd *cmd) +{ + g_autoptr(virshNWFilter) nwfilter =3D NULL; + bool edit =3D vshCommandOptBool(cmd, "edit"); + bool rem =3D vshCommandOptBool(cmd, "remove"); + const char *set =3D NULL; + const char *uri =3D NULL; + const char *key =3D NULL; + unsigned int flags =3D 0; + bool ret =3D false; + + VSH_EXCLUSIVE_OPTIONS("edit", "set"); + VSH_EXCLUSIVE_OPTIONS("remove", "set"); + VSH_EXCLUSIVE_OPTIONS("remove", "edit"); + + if (!(nwfilter =3D virshCommandOptNWFilter(ctl, cmd, NULL))) + return false; + + if (vshCommandOptStringReq(ctl, cmd, "uri", &uri) < 0 || + vshCommandOptStringReq(ctl, cmd, "key", &key) < 0 || + vshCommandOptStringReq(ctl, cmd, "set", &set) < 0) + return false; + + if ((set || edit) && !key) { + vshError(ctl, "%s", + _("namespace key is required when modifying metadata")); + return false; + } + + if (set || rem) { + if (virNWFilterSetMetadata(nwfilter, VIR_NWFILTER_METADATA_ELEMENT, + set, key, uri, flags)) + return false; + + if (rem) + vshPrintExtra(ctl, "%s\n", _("Metadata removed")); + else + vshPrintExtra(ctl, "%s\n", _("Metadata modified")); + } else if (edit) { +#define EDIT_GET_XML \ + virshNWFilterGetEditMetadata(ctl, nwfilter, uri, flags) +#define EDIT_NOT_CHANGED \ + do { \ + vshPrintExtra(ctl, "%s", _("Metadata not changed")); \ + ret =3D true; \ + goto edit_cleanup; \ + } while (0) + +#define EDIT_DEFINE \ + (virNWFilterSetMetadata(nwfilter, VIR_NWFILTER_METADATA_ELEMENT, d= oc_edited, \ + key, uri, flags) =3D=3D 0) +#include "virsh-edit.c" + + vshPrintExtra(ctl, "%s\n", _("Metadata modified")); + } else { + g_autofree char *data =3D NULL; + + /* get */ + if (!(data =3D virNWFilterGetMetadata(nwfilter, VIR_NWFILTER_METAD= ATA_ELEMENT, + uri, flags))) + return false; + + vshPrint(ctl, "%s\n", data); + } + + ret =3D true; + + cleanup: + return ret; +} + + const vshCmdDef nwfilterCmds[] =3D { {.name =3D "nwfilter-define", .handler =3D cmdNWFilterDefine, @@ -1032,5 +1168,11 @@ const vshCmdDef nwfilterCmds[] =3D { .info =3D info_nwfilter_desc, .flags =3D 0 }, + {.name =3D "nwfilter-metadata", + .handler =3D cmdNWFilterMetadata, + .opts =3D opts_nwfilter_metadata, + .info =3D info_nwfilter_metadata, + .flags =3D 0 + }, {.name =3D NULL} }; --=20 2.42.0 From nobody Sun May 12 13:01:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.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 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1696959442; cv=none; d=zohomail.com; s=zohoarc; b=HLL5lr0HKjvvRctYolMCdOWWeiHYrG50SX7iEG8XS0J9MAF5bQ+RyxsTQYlqA41/K9BoZt4xZnOvyuKWUxqeEAf7vEA6IXv1oxwEkYGDsuQGQBXMm1H4LA+q3HOuOuXAzsmLUahea0Ud1st9Nz3K3693qWnWGkMhXDw105vQnM0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696959442; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=OwvA907uiOHqn5xkcQjJxkK+DSP9o2OSJO9RJD1kSUw=; b=KUbsj+shXKgPPMZRQVnjXDSI0UGGSlRKo0IZPugQIoCKLK+5QNcObMqOf2fEkv9bZpLs/hbUOfwu7rhk0hFMQ7Spgcn0jVOz3dTCJJz8t790jN8yqIH9il89PBejqXo3sd9OC6euw/vGp+FtKfAYSrhFIBGYLS12v1mkgqUlmUw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1696959442984871.4547167244365; Tue, 10 Oct 2023 10:37:22 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-691-_I3qTrVRM5iqd9YA9X-Svw-1; Tue, 10 Oct 2023 13:37:09 -0400 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 76F96185A7BC; Tue, 10 Oct 2023 17:37:07 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 63545492B00; Tue, 10 Oct 2023 17:37:07 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 3570719465B8; Tue, 10 Oct 2023 17:37:07 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 632691946597 for <libvir-list@listman.corp.redhat.com>; Tue, 10 Oct 2023 17:37:06 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 555A721CAC76; Tue, 10 Oct 2023 17:37:06 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast10.extmail.prod.ext.rdu2.redhat.com [10.11.55.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4D9AF21CAC6B for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:37:06 +0000 (UTC) Received: from us-smtp-inbound-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2F4E21C11714 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:37:06 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-256-Z9T_y8NLMH-WAxLVS-kpWw-1; Tue, 10 Oct 2023 13:36:20 -0400 Received: from mx0.riseup.net (mx0-pn.riseup.net [10.0.1.42]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4S4jWK4KtVzDqp7 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:53 +0000 (UTC) Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx0.riseup.net (Postfix) with ESMTPS id 4S4jW43NgMz9tBF for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:40 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4S4jW327ggzFpcn; Tue, 10 Oct 2023 17:26:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696959442; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=OwvA907uiOHqn5xkcQjJxkK+DSP9o2OSJO9RJD1kSUw=; b=S4fGJq9+y6bC5y0PDOMbJp1UfdJXz/EWAP1iJWHhk02ucch5x1EXAjKqs/7mpgSoeJ9d9Y zKV29n8wqYURAZHZaBvAvWucZqEfbDjQG1C83CynnCy2WrOSNakxrKN/jEmQUmPwdZTvyG 4aLI0dz4GnI7X5BiDJel+ddx2VSAWlc= X-MC-Unique: _I3qTrVRM5iqd9YA9X-Svw-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: Z9T_y8NLMH-WAxLVS-kpWw-1 X-Riseup-User-ID: DB4A989A3505D4C7BF8AD620A4C62A40B915250901BD019467549926007FF9F5 From: K Shiva Kiran <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [PATCH v2 06/11] virsh: Add option --title for nwfilter-list Date: Tue, 10 Oct 2023 22:48:38 +0530 Message-ID: <20231010172509.103884-7-shiva_kr@riseup.net> In-Reply-To: <20231010172509.103884-1-shiva_kr@riseup.net> References: <20231010172509.103884-1-shiva_kr@riseup.net> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva Kiran <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696959444580100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: K Shiva Kiran <shiva_kr@riseup.net> --- docs/manpages/virsh.rst | 5 ++++- tools/virsh-nwfilter.c | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index e15f1832e7..5e03ce1e18 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -8083,10 +8083,13 @@ nwfilter-list =20 :: =20 - nwfilter-list + nwfilter-list [--title] =20 List all of the available network filters. =20 +If *--title* is specified, then the short network filter description +(title) is printed in an extra column. + =20 nwfilter-dumpxml ---------------- diff --git a/tools/virsh-nwfilter.c b/tools/virsh-nwfilter.c index 801a52746e..ca803865bf 100644 --- a/tools/virsh-nwfilter.c +++ b/tools/virsh-nwfilter.c @@ -407,6 +407,10 @@ static const vshCmdInfo info_nwfilter_list[] =3D { }; =20 static const vshCmdOptDef opts_nwfilter_list[] =3D { + {.name =3D "title", + .type =3D VSH_OT_BOOL, + .help =3D N_("show network filter title") + }, {.name =3D NULL} }; =20 @@ -416,13 +420,18 @@ cmdNWFilterList(vshControl *ctl, const vshCmd *cmd G_= GNUC_UNUSED) size_t i; char uuid[VIR_UUID_STRING_BUFLEN]; bool ret =3D false; + bool optTitle =3D vshCommandOptBool(cmd, "title"); struct virshNWFilterList *list =3D NULL; g_autoptr(vshTable) table =3D NULL; =20 if (!(list =3D virshNWFilterListCollect(ctl, 0))) return false; =20 - table =3D vshTableNew(_("UUID"), _("Name"), NULL); + if (optTitle) + table =3D vshTableNew(_("UUID"), _("Name"), _("Title"), NULL); + else + table =3D vshTableNew(_("UUID"), _("Name"), NULL); + if (!table) goto cleanup; =20 @@ -430,11 +439,26 @@ cmdNWFilterList(vshControl *ctl, const vshCmd *cmd G_= GNUC_UNUSED) virNWFilterPtr nwfilter =3D list->filters[i]; =20 virNWFilterGetUUIDString(nwfilter, uuid); - if (vshTableRowAppend(table, - uuid, - virNWFilterGetName(nwfilter), - NULL) < 0) - goto cleanup; + + if (optTitle) { + g_autofree char *title =3D NULL; + if (!(title =3D virshGetNWFilterDescription(ctl, nwfilter, tru= e, 0, 0))) + goto cleanup; + + if (vshTableRowAppend(table, + uuid, + virNWFilterGetName(nwfilter), + title, + NULL) < 0) + goto cleanup; + + } else { + if (vshTableRowAppend(table, + uuid, + virNWFilterGetName(nwfilter), + NULL) < 0) + goto cleanup; + } } =20 vshTablePrintToStdout(table, ctl); --=20 2.42.0 From nobody Sun May 12 13:01:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.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 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1696959395; cv=none; d=zohomail.com; s=zohoarc; b=AUAzmR215r5jgQ4mva1IG7cV7HVyHhYhOYaC3m0CyQLvi5JndYpzzrmH/ZHX6bxYzRIa8bE2ALRNJBFhLTCH40NdjiPSHuZs/uS94PqjbfRC9MAZ5sT9JgP+9xL0VyUasUs+1kevGVhb/4IhWv0uLOTmGPZxawhxJWk6UOL/2Ao= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696959395; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Pg4YsydoLHA6jUJZx9VZuBr9DkM5yhy6cYdTAiKa2oc=; b=B/RiAmVbkxy7ar1+eUx+32h5FqwZt1yfC2Gca5wY/PKZPcmJe9gS8cSXebf+X8/IyRk31upqKqZ0N4QlxDQJS4D7OJy3Kn8+nGJw57qPA/86BnpOIItLW42EURgu1/5qqIhrlVUKcEtY7PqKovpiSgSLCfiGfVY7PVoZzWSyXK8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1696959395886432.98668103801367; Tue, 10 Oct 2023 10:36:35 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-618-E7nGpptdPiGJF89A2pfSzQ-1; Tue, 10 Oct 2023 13:36:28 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0E5ED887E6C; Tue, 10 Oct 2023 17:36:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1007420296A3; Tue, 10 Oct 2023 17:36:23 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id AFF4619466F0; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 84A3B1946597 for <libvir-list@listman.corp.redhat.com>; Tue, 10 Oct 2023 17:36:20 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 66B1C1005E22; Tue, 10 Oct 2023 17:36:20 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast05.extmail.prod.ext.rdu2.redhat.com [10.11.55.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5E46C100915F for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:20 +0000 (UTC) Received: from us-smtp-inbound-delivery-1.mimecast.com (us-smtp-inbound-delivery-1.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 390618F5DA3 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:20 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-80-pNOvrXkWMnCtMzC5cTY-_A-1; Tue, 10 Oct 2023 13:36:18 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4S4jW60vZTzDqkN for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:42 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4S4jW46kZCzFqjK; Tue, 10 Oct 2023 17:26:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696959394; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=Pg4YsydoLHA6jUJZx9VZuBr9DkM5yhy6cYdTAiKa2oc=; b=Mt5mTDOnfmSUc9Ah0vbNqqXYhVnr7/RtXDopeKL5AXzHsE2Nnsz7o9Zqm+hWfb4NIb4SXk bC5F0+d9EC+DR9nS7kZnFcf67+hTYUZZIFbpBmA18jtsNwSVo5IAVZ/VfRbAy5YCfqG/Y6 A1nv5BWapdYJ3a6eNwis8kA6AHfZaAY= X-MC-Unique: E7nGpptdPiGJF89A2pfSzQ-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: pNOvrXkWMnCtMzC5cTY-_A-1 X-Riseup-User-ID: 9E1FDFB29E7FE36C9C9A2854370AF562E6426B08AB0D4FF2A941DB92476D474E From: K Shiva Kiran <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [PATCH v2 07/11] virnwfilterobj: Add obj get and set methods for nwfilter metadata Date: Tue, 10 Oct 2023 22:48:39 +0530 Message-ID: <20231010172509.103884-8-shiva_kr@riseup.net> In-Reply-To: <20231010172509.103884-1-shiva_kr@riseup.net> References: <20231010172509.103884-1-shiva_kr@riseup.net> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva Kiran <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696959396418100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Adds two new private methods for nwfilter metadata: - virNWFilterObjGetMetadata() - virNWFilterObjSetMetadata() Signed-off-by: K Shiva Kiran <shiva_kr@riseup.net> --- src/conf/virnwfilterobj.c | 148 ++++++++++++++++++++++++++++++++++++++ src/conf/virnwfilterobj.h | 13 ++++ src/libvirt_private.syms | 2 + 3 files changed, 163 insertions(+) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index 6456add593..437df9631b 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -635,3 +635,151 @@ virNWFilterObjUnlock(virNWFilterObj *obj) { virMutexUnlock(&obj->lock); } + + +char * +virNWFilterObjGetMetadata(virNWFilterObj *obj, + int type, + const char *uri) +{ + virNWFilterDef *def; + char *ret =3D NULL; + + if (type >=3D VIR_NWFILTER_METADATA_LAST) { + virReportError(VIR_ERR_INVALID_ARG, + _("unknown metadata type '%1$d'"), type); + return NULL; + } + + if (!(def =3D virNWFilterObjGetDef(obj))) + return NULL; + + switch ((virNWFilterMetadataType) type) { + case VIR_NWFILTER_METADATA_DESCRIPTION: + ret =3D g_strdup(def->description); + break; + + case VIR_NWFILTER_METADATA_TITLE: + ret =3D g_strdup(def->title); + break; + + case VIR_NWFILTER_METADATA_ELEMENT: + if (!def->metadata) + break; + + if (virXMLExtractNamespaceXML(def->metadata, uri, &ret) < 0) + return NULL; + break; + + case VIR_NWFILTER_METADATA_LAST: + break; + } + + if (!ret) + virReportError(VIR_ERR_NO_NWFILTER_METADATA, "%s", + _("Requested metadata element is not present")); + + return ret; +} + + +static int +virNWFilterDefSetMetadata(virNWFilterDef *def, + int type, + const char *metadata, + const char *key, + const char *uri) +{ + g_autoptr(xmlDoc) doc =3D NULL; + xmlNodePtr old; + g_autoptr(xmlNode) new =3D NULL; + + if (type >=3D VIR_NWFILTER_METADATA_LAST) { + virReportError(VIR_ERR_INVALID_ARG, + _("unknown metadata type '%1$d'"), type); + return -1; + } + + switch ((virNWFilterMetadataType) type) { + case VIR_NWFILTER_METADATA_DESCRIPTION: + g_clear_pointer(&def->description, g_free); + + if (STRNEQ_NULLABLE(metadata, "")) + def->description =3D g_strdup(metadata); + break; + + case VIR_NWFILTER_METADATA_TITLE: + g_clear_pointer(&def->title, g_free); + + if (STRNEQ_NULLABLE(metadata, "")) + def->title =3D g_strdup(metadata); + break; + + case VIR_NWFILTER_METADATA_ELEMENT: + if (metadata) { + + /* parse and modify the xml from the user */ + if (!(doc =3D virXMLParseStringCtxt(metadata, _("(metadata_xml= )"), NULL))) + return -1; + + if (virXMLInjectNamespace(doc->children, uri, key) < 0) + return -1; + + /* create the root node if needed */ + if (!def->metadata) + def->metadata =3D virXMLNewNode(NULL, "metadata"); + + if (!(new =3D xmlCopyNode(doc->children, 1))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Failed to copy XML node")); + return -1; + } + } + + /* remove possible other nodes sharing the namespace */ + while ((old =3D virXMLFindChildNodeByNs(def->metadata, uri))) { + xmlUnlinkNode(old); + xmlFreeNode(old); + } + + if (new) { + if (!(xmlAddChild(def->metadata, new))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("failed to add metadata to XML document")= ); + return -1; + } + new =3D NULL; + } + break; + + case VIR_NWFILTER_METADATA_LAST: + break; + } + + return 0; +} + + +int +virNWFilterObjSetMetadata(virNWFilterObj *obj, + int type, + const char *metadata, + const char *key, + const char *uri, + const char *configDir) +{ + virNWFilterDef *def; + + if (!(def =3D virNWFilterObjGetDef(obj))) + return -1; + + if (def) { + if (virNWFilterDefSetMetadata(def, type, metadata, key, uri) < 0) + return -1; + + if (virNWFilterSaveConfig(configDir, def) < 0) + return -1; + } + + return 0; +} diff --git a/src/conf/virnwfilterobj.h b/src/conf/virnwfilterobj.h index b67dc017c5..4079c0ab3d 100644 --- a/src/conf/virnwfilterobj.h +++ b/src/conf/virnwfilterobj.h @@ -117,3 +117,16 @@ virNWFilterObjLock(virNWFilterObj *obj); =20 void virNWFilterObjUnlock(virNWFilterObj *obj); + +char * +virNWFilterObjGetMetadata(virNWFilterObj *obj, + int type, + const char *uri); + +int +virNWFilterObjSetMetadata(virNWFilterObj *obj, + int type, + const char *metadata, + const char *key, + const char *uri, + const char *configDir); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 4e475d5b1a..7774ee03c4 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1410,6 +1410,7 @@ virNWFilterBindingObjListRemove; =20 # conf/virnwfilterobj.h virNWFilterObjGetDef; +virNWFilterObjGetMetadata; virNWFilterObjGetNewDef; virNWFilterObjListAssignDef; virNWFilterObjListExport; @@ -1423,6 +1424,7 @@ virNWFilterObjListNew; virNWFilterObjListNumOfNWFilters; virNWFilterObjListRemove; virNWFilterObjLock; +virNWFilterObjSetMetadata; virNWFilterObjTestUnassignDef; virNWFilterObjUnlock; virNWFilterObjWantRemoved; --=20 2.42.0 From nobody Sun May 12 13:01:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.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 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1696959405; cv=none; d=zohomail.com; s=zohoarc; b=A4LOyiT7Rq/AKozEpeI6wuLjW6cXvZhlrM8vB9ZD6pjynVGIFXYuxKQCM1zjHbNltkitwEEh18SSOzDCofojQn1UA17Nu2p80O6nK73HLZVk1d1kZ7Bb3XrqpwdJw4AUDYmTrmesNBmr6mKytguFcc1UmkVKzYB1Sk8SQD0/Y8c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696959405; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=y2lolhxNt2dFcO/GW0mdSzlNtk9LRs/g4MTcEHZLvY8=; b=TN/r1cFwdGi4jhNkeHbda8pxK0sU5UmKnVsdcqAZFjEev8xm3YRpJ7h8H/QEBI9lWIaqRWJVLvp2rOKWjuEzWnPPf30agOmdiCPeRU/T9J8HcKrmj33yrf5zvYlX3RrK/L4QS6g6LjCSBHA06FZzuf03hLWi0J4+SKCtaIqSGx8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 169695940579324.203615059663093; Tue, 10 Oct 2023 10:36:45 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-501-XBvcK6I7NGCjc9Et9Y85HQ-1; Tue, 10 Oct 2023 13:36:34 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id AD5B185542A; Tue, 10 Oct 2023 17:36:25 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 986F7492B06; Tue, 10 Oct 2023 17:36:25 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 5184619465B8; Tue, 10 Oct 2023 17:36:25 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 235B91946A4A for <libvir-list@listman.corp.redhat.com>; Tue, 10 Oct 2023 17:36:23 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 06719C0F78B; Tue, 10 Oct 2023 17:36:23 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast02.extmail.prod.ext.rdu2.redhat.com [10.11.55.18]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F3315C0F78A for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:22 +0000 (UTC) Received: from us-smtp-inbound-delivery-1.mimecast.com (us-smtp-inbound-delivery-1.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id D82F2887E5F for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:22 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-580-bqMgLMemMUOe8BdVtdm4vA-1; Tue, 10 Oct 2023 13:36:21 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4S4jW75dZPzDqt8 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:43 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4S4jW64FrFzFqjK; Tue, 10 Oct 2023 17:26:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696959404; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=y2lolhxNt2dFcO/GW0mdSzlNtk9LRs/g4MTcEHZLvY8=; b=Z4ixaN2iv62AN12Rvr12dssBLuKIAzpn7DXWk4f5AbuaqFvFIREIKxSFmcq8UklJCpO/QA NvsmPOcHi3AQ1XjQXTBeyp85JBzEdftgCCum48VlzfVnuB4Rlzl1UiqrnvfRUa9rXxiE80 VN737x+iL/HUQZ4JQia0frliMfn0h1w= X-MC-Unique: XBvcK6I7NGCjc9Et9Y85HQ-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: bqMgLMemMUOe8BdVtdm4vA-1 X-Riseup-User-ID: 070EC1CB3DD985F6DC94B249A678E9A1FB10E4A94E38D47B5A4E3C728EAB436C From: K Shiva Kiran <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [PATCH v2 08/11] nwfilter_driver: Add Driver implementation for metadata Date: Tue, 10 Oct 2023 22:48:40 +0530 Message-ID: <20231010172509.103884-9-shiva_kr@riseup.net> In-Reply-To: <20231010172509.103884-1-shiva_kr@riseup.net> References: <20231010172509.103884-1-shiva_kr@riseup.net> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva Kiran <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696959406455100003 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: K Shiva Kiran <shiva_kr@riseup.net> --- src/nwfilter/nwfilter_driver.c | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 09719edd75..00b2d89eb4 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -812,6 +812,65 @@ nwfilterBindingDelete(virNWFilterBindingPtr binding) } =20 =20 +static int +nwfilterSetMetadata(virNWFilterPtr nwfilter, + int type, + const char *metadata, + const char *key, + const char *uri, + unsigned int flags) +{ + virNWFilterObj *obj =3D NULL; + virNWFilterDef *def =3D NULL; + int ret =3D -1; + + virCheckFlags(0, -1); + + if (!(obj =3D nwfilterObjFromNWFilter(nwfilter->uuid))) + return -1; + + def =3D virNWFilterObjGetDef(obj); + + if (virNWFilterSetMetadataEnsureACL(nwfilter->conn, def) < 0) + goto cleanup; + + ret =3D virNWFilterObjSetMetadata(obj, type, metadata, key, uri, + driver->configDir); + + cleanup: + virNWFilterObjUnlock(obj); + return ret; +} + + +static char * +nwfilterGetMetadata(virNWFilterPtr nwfilter, + int type, + const char *uri, + unsigned int flags) +{ + virNWFilterObj *obj =3D NULL; + virNWFilterDef *def =3D NULL; + char *ret =3D NULL; + + virCheckFlags(0, NULL); + + if (!(obj =3D nwfilterObjFromNWFilter(nwfilter->uuid))) + return NULL; + + def =3D virNWFilterObjGetDef(obj); + + if (virNWFilterGetMetadataEnsureACL(nwfilter->conn, def) < 0) + goto cleanup; + + ret =3D virNWFilterObjGetMetadata(obj, type, uri); + + cleanup: + virNWFilterObjUnlock(obj); + return ret; +} + + static virNWFilterDriver nwfilterDriver =3D { .name =3D "nwfilter", .connectNumOfNWFilters =3D nwfilterConnectNumOfNWFilters, /* 0.8.0 */ @@ -828,6 +887,8 @@ static virNWFilterDriver nwfilterDriver =3D { .nwfilterBindingGetXMLDesc =3D nwfilterBindingGetXMLDesc, /* 4.5.0 */ .nwfilterBindingCreateXML =3D nwfilterBindingCreateXML, /* 4.5.0 */ .nwfilterBindingDelete =3D nwfilterBindingDelete, /* 4.5.0 */ + .nwfilterGetMetadata =3D nwfilterGetMetadata, /* 9.9.0 */ + .nwfilterSetMetadata =3D nwfilterSetMetadata, /* 9.9.0 */ }; =20 =20 --=20 2.42.0 From nobody Sun May 12 13:01:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.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 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1696959402; cv=none; d=zohomail.com; s=zohoarc; b=FYQ09gqecuV0K626fv/CZXKfYQC/867GTf9sfYKBb90vFvTiIwFv241OzFh095K1+puaBS/lU/1ALgYx9j1+RF7/HBxYdXZNWQ1/XqFaG36qUbuYZX4uQD/znBp+Hkc59+/fkE5mdiZN3ImEL6H0hjlzXYZ/pG1clHAa9i62XPw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696959402; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=PpxDCxZjuP1cK0tmg2/foOZ8vW8CH7LwAxJe3dM5fWc=; b=WEbUlLsfoQIX4C/WmIuh+pNqxBLg+jEj/WL0pIQKBkbeftmoIw+t+pk7eJP0tsy61XlAiht2xhmOlBetwK7agjYGWj4bAWjdjPsj61tjEm5FhdkPtKAOZJli3CCVlIfWfO+xtw0o8+oelt3WMKdJ0e2sD5/LiOCDjM1I5rXx7fs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1696959402859669.6232194242764; Tue, 10 Oct 2023 10:36:42 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-44-KL0YIEngNrmnJF8KjKF6QQ-1; Tue, 10 Oct 2023 13:36:32 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6676B382135D; Tue, 10 Oct 2023 17:36:25 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4F29CC0F788; Tue, 10 Oct 2023 17:36:25 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 8DBF519466E8; Tue, 10 Oct 2023 17:36:24 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 417431946597 for <libvir-list@listman.corp.redhat.com>; Tue, 10 Oct 2023 17:36:22 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 304821C06533; Tue, 10 Oct 2023 17:36:22 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast07.extmail.prod.ext.rdu2.redhat.com [10.11.55.23]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2921B1C060DF for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:22 +0000 (UTC) Received: from us-smtp-inbound-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 04B4C3C0E65C for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:22 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-271-tMLwY8roPYm6rKZ7CXg4hA-1; Tue, 10 Oct 2023 13:36:20 -0400 Received: from mx0.riseup.net (mx0-pn.riseup.net [10.0.1.42]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4S4jWQ4TvrzDqwH for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:58 +0000 (UTC) Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx0.riseup.net (Postfix) with ESMTPS id 4S4jW93Dbbz9t6j for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:45 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4S4jW81pKVzFqjK; Tue, 10 Oct 2023 17:26:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696959400; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=PpxDCxZjuP1cK0tmg2/foOZ8vW8CH7LwAxJe3dM5fWc=; b=eY02uH6folC4MWYd/W22tTgicxn70m3ln4+3T/gTBBJjDHRphJPQNAU7YbR8DPjirPdV/l IsuP3HpyrIIhfPOTxcSfguo3k/PnjbHF6rCZJcBFthNdFd0MLX4siBhghR5fb9+2xx4034 rYlv+1uWFB+PdFG1zd6mFVW1GjQum1w= X-MC-Unique: KL0YIEngNrmnJF8KjKF6QQ-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: tMLwY8roPYm6rKZ7CXg4hA-1 X-Riseup-User-ID: E7B18560786DBC38E76951A45386A9F0BB5E7845F39648A9194A5A1EDC27DA1C From: K Shiva Kiran <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [PATCH v2 09/11] test_driver: Implement test driver for network filters Date: Tue, 10 Oct 2023 22:48:41 +0530 Message-ID: <20231010172509.103884-10-shiva_kr@riseup.net> In-Reply-To: <20231010172509.103884-1-shiva_kr@riseup.net> References: <20231010172509.103884-1-shiva_kr@riseup.net> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.7 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva Kiran <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696959404417100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: K Shiva Kiran <shiva_kr@riseup.net> --- src/conf/nwfilter_conf.c | 5 +- src/conf/nwfilter_conf.h | 3 + src/test/test_driver.c | 240 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 246 insertions(+), 2 deletions(-) diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c index d03f78af4d..344bddcd68 100644 --- a/src/conf/nwfilter_conf.c +++ b/src/conf/nwfilter_conf.c @@ -2509,7 +2509,7 @@ virNWFilterIsAllowedChain(const char *chainname) } =20 =20 -static virNWFilterDef * +virNWFilterDef * virNWFilterDefParseXML(xmlXPathContextPtr ctxt) { g_autoptr(virNWFilterDef) ret =3D NULL; @@ -2660,6 +2660,9 @@ virNWFilterSaveConfig(const char *configDir, char uuidstr[VIR_UUID_STRING_BUFLEN]; g_autofree char *configFile =3D NULL; =20 + if (!configDir) + return 0; + if (!(xml =3D virNWFilterDefFormat(def))) return -1; =20 diff --git a/src/conf/nwfilter_conf.h b/src/conf/nwfilter_conf.h index 34de6eab3d..6e13eae262 100644 --- a/src/conf/nwfilter_conf.h +++ b/src/conf/nwfilter_conf.h @@ -552,6 +552,9 @@ virNWFilterDefParse(const char *xmlStr, const char *filename, unsigned int flags); =20 +virNWFilterDef * +virNWFilterDefParseXML(xmlXPathContextPtr ctxt); + typedef int (*virNWFilterTriggerRebuildCallback)(void *opaque); =20 int diff --git a/src/test/test_driver.c b/src/test/test_driver.c index e87d7cfd44..ffcaa07b3e 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -63,6 +63,8 @@ #include "virhostcpu.h" #include "virdomaincheckpointobjlist.h" #include "virdomainsnapshotobjlist.h" +#include "nwfilter_conf.h" +#include "virnwfilterobj.h" #include "virkeycode.h" #include "virutil.h" =20 @@ -114,6 +116,7 @@ struct _testDriver { /* immutable pointer, self-locking APIs */ virDomainObjList *domains; virNetworkObjList *networks; + virNWFilterObjList *nwfilters; virObjectEventState *eventState; }; typedef struct _testDriver testDriver; @@ -158,6 +161,7 @@ testDriverDispose(void *obj) virObjectUnref(driver->domains); virNodeDeviceObjListFree(driver->devs); virObjectUnref(driver->networks); + virObjectUnref(driver->nwfilters); virObjectUnref(driver->ifaces); virObjectUnref(driver->pools); virObjectUnref(driver->eventState); @@ -465,6 +469,7 @@ testDriverNew(void) !(ret->ifaces =3D virInterfaceObjListNew()) || !(ret->domains =3D virDomainObjListNew()) || !(ret->networks =3D virNetworkObjListNew()) || + !(ret->nwfilters =3D virNWFilterObjListNew()) || !(ret->devs =3D virNodeDeviceObjListNew()) || !(ret->pools =3D virStoragePoolObjListNew())) goto error; @@ -519,6 +524,10 @@ static const char *defaultConnXML =3D " </ip>" "</network>" "" +"<filter name=3D'test-filter' chain=3D'ipv4' priority=3D'1'>" +" <uuid>aafaaaaf-7aca-7007-bbca-dda97dd1adfc</uuid>" +"</filter>" +"" "<interface type=3D\"ethernet\" name=3D\"eth1\">" " <start mode=3D\"onboot\"/>" " <mac address=3D\"aa:bb:cc:dd:ee:ff\"/>" @@ -1113,6 +1122,40 @@ testParseNetworks(testDriver *privconn, } =20 =20 +static int +testParseNWFilters(testDriver *privconn, + const char *file, + xmlXPathContextPtr ctxt) +{ + VIR_XPATH_NODE_AUTORESTORE(ctxt) + int num; + size_t i; + virNWFilterObj *obj; + g_autofree xmlNodePtr *nodes =3D NULL; + + num =3D virXPathNodeSet("/node/filter", ctxt, &nodes); + if (num < 0) + return -1; + + for (i =3D 0; i < num; i++) { + g_autoptr(virNWFilterDef) def =3D NULL; + + if (!(ctxt->node =3D testParseXMLDocFromFile(nodes[i], file))) + return -1; + + if (!(def =3D virNWFilterDefParseXML(ctxt))) + return -1; + + if (!(obj =3D virNWFilterObjListAssignDef(privconn->nwfilters, def= ))) + return -1; + def =3D NULL; + + virNWFilterObjUnlock(obj); + } + return 0; +} + + static int testParseInterfaces(testDriver *privconn, const char *file, @@ -1320,6 +1363,8 @@ testOpenParse(testDriver *privconn, return -1; if (testParseNetworks(privconn, file, ctxt) < 0) return -1; + if (testParseNWFilters(privconn, file, ctxt) < 0) + return -1; if (testParseInterfaces(privconn, file, ctxt) < 0) return -1; if (testParseStorage(privconn, file, ctxt) < 0) @@ -10036,6 +10081,187 @@ testConnectGetDomainCapabilities(virConnectPtr co= nn G_GNUC_UNUSED, } =20 =20 +static virNWFilterObj * +testNWFilterObjFromNWFilter(testDriver *driver, + const unsigned char *uuid) +{ + virNWFilterObj *obj; + char uuidstr[VIR_UUID_STRING_BUFLEN]; + + if (!(obj =3D virNWFilterObjListFindByUUID(driver->nwfilters, uuid))) { + virUUIDFormat(uuid, uuidstr); + virReportError(VIR_ERR_NO_NWFILTER, + _("no nwfilter with matching uuid '%1$s'"), uuidstr= ); + } + return obj; +} + +static virNWFilterPtr +testNWFilterLookupByUUID(virConnectPtr conn, + const unsigned char *uuid) +{ + testDriver *driver =3D conn->privateData; + virNWFilterObj *obj =3D NULL; + virNWFilterDef *def; + virNWFilterPtr nwfilter =3D NULL; + + if (!(obj =3D testNWFilterObjFromNWFilter(driver, uuid))) + return NULL; + + def =3D virNWFilterObjGetDef(obj); + nwfilter =3D virGetNWFilter(conn, def->name, def->uuid); + + virNWFilterObjUnlock(obj); + return nwfilter; +} + + +static virNWFilterPtr +testNWFilterLookupByName(virConnectPtr conn, + const char *name) +{ + testDriver *driver =3D conn->privateData; + virNWFilterObj *obj =3D NULL; + virNWFilterDef *def; + virNWFilterPtr nwfilter =3D NULL; + + if (!(obj =3D virNWFilterObjListFindByName(driver->nwfilters, name))) { + virReportError(VIR_ERR_NO_NWFILTER, + _("no nwfilter with matching name '%1$s'"), + name); + return NULL; + } + def =3D virNWFilterObjGetDef(obj); + nwfilter =3D virGetNWFilter(conn, def->name, def->uuid); + + virNWFilterObjUnlock(obj); + return nwfilter; +} + +static int +testNWFilterConnectNumOfNWFilters(virConnectPtr conn) +{ + testDriver *driver =3D conn->privateData; + return virNWFilterObjListNumOfNWFilters(driver->nwfilters, + conn, NULL); +} + + +static int +testNWFilterConnectListNWFilters(virConnectPtr conn, + char **const names, + int maxnames) +{ + testDriver *driver =3D conn->privateData; + return virNWFilterObjListGetNames(driver->nwfilters, conn, + NULL, names, maxnames); +} + + +static int +testNWFilterConnectListAllNWFilters(virConnectPtr conn, + virNWFilterPtr **nwfilters, + unsigned int flags) +{ + testDriver *driver =3D conn->privateData; + virCheckFlags(0, -1); + return virNWFilterObjListExport(conn, driver->nwfilters, + nwfilters, NULL); +} + + +static virNWFilterPtr +testNWFilterDefineXMLFlags(virConnectPtr conn, + const char *xml, + unsigned int flags) +{ + testDriver *driver =3D conn->privateData; + virNWFilterDef *def; + virNWFilterObj *obj =3D NULL; + virNWFilterDef *objdef; + virNWFilterPtr nwfilter =3D NULL; + + virCheckFlags(VIR_NWFILTER_DEFINE_VALIDATE, NULL); + + if (!(def =3D virNWFilterDefParse(xml, NULL, flags))) + goto cleanup; + + + if (!(obj =3D virNWFilterObjListAssignDef(driver->nwfilters, def))) + goto cleanup; + + def =3D NULL; + objdef =3D virNWFilterObjGetDef(obj); + + nwfilter =3D virGetNWFilter(conn, objdef->name, objdef->uuid); + + cleanup: + virNWFilterDefFree(def); + if (obj) + virNWFilterObjUnlock(obj); + return nwfilter; +} + + +static virNWFilterPtr +testNWFilterDefineXML(virConnectPtr conn, + const char *xml) +{ + return testNWFilterDefineXMLFlags(conn, xml, 0); +} + + +static int +testNWFilterUndefine(virNWFilterPtr nwfilter) +{ + testDriver *driver =3D nwfilter->conn->privateData; + virNWFilterObj *obj; + int ret =3D -1; + + if (!(obj =3D testNWFilterObjFromNWFilter(driver, nwfilter->uuid))) + goto cleanup; + + if (virNWFilterObjTestUnassignDef(obj) < 0) { + virReportError(VIR_ERR_OPERATION_INVALID, + "%s", + _("nwfilter is in use")); + goto cleanup; + } + + virNWFilterObjListRemove(driver->nwfilters, obj); + obj =3D NULL; + ret =3D 0; + + cleanup: + if (obj) + virNWFilterObjUnlock(obj); + + return ret; +} + + +static char * +testNWFilterGetXMLDesc(virNWFilterPtr nwfilter, + unsigned int flags) +{ + testDriver *driver =3D nwfilter->conn->privateData; + virNWFilterObj *obj =3D NULL; + virNWFilterDef *def =3D NULL; + char *ret =3D NULL; + + virCheckFlags(0, NULL); + + if (!(obj =3D testNWFilterObjFromNWFilter(driver, nwfilter->uuid))) + return NULL; + + def =3D virNWFilterObjGetDef(obj); + + ret =3D virNWFilterDefFormat(def); + + virNWFilterObjUnlock(obj); + return ret; +} + /* * Test driver */ @@ -10310,6 +10536,18 @@ static virNodeDeviceDriver testNodeDeviceDriver = =3D { .nodeDeviceDestroy =3D testNodeDeviceDestroy, /* 0.7.3 */ }; =20 +static virNWFilterDriver testNWFilterDriver =3D { + .connectNumOfNWFilters =3D testNWFilterConnectNumOfNWFilters, /* 9.9.0= */ + .connectListNWFilters =3D testNWFilterConnectListNWFilters, /* 9.9.0 */ + .connectListAllNWFilters =3D testNWFilterConnectListAllNWFilters, /* 9= .9.0 */ + .nwfilterLookupByName =3D testNWFilterLookupByName, /* 9.9.0 */ + .nwfilterLookupByUUID =3D testNWFilterLookupByUUID, /* 9.9.0 */ + .nwfilterDefineXML =3D testNWFilterDefineXML, /* 9.9.0 */ + .nwfilterDefineXMLFlags =3D testNWFilterDefineXMLFlags, /* 9.9.0 */ + .nwfilterUndefine =3D testNWFilterUndefine, /* 9.9.0 */ + .nwfilterGetXMLDesc =3D testNWFilterGetXMLDesc, /* 9.9.0 */ +}; + static virConnectDriver testConnectDriver =3D { .localOnly =3D true, .uriSchemes =3D (const char *[]){ "test", NULL }, @@ -10317,7 +10555,7 @@ static virConnectDriver testConnectDriver =3D { .interfaceDriver =3D &testInterfaceDriver, .networkDriver =3D &testNetworkDriver, .nodeDeviceDriver =3D &testNodeDeviceDriver, - .nwfilterDriver =3D NULL, + .nwfilterDriver =3D &testNWFilterDriver, .secretDriver =3D NULL, .storageDriver =3D &testStorageDriver, }; --=20 2.42.0 From nobody Sun May 12 13:01:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.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 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1696959409; cv=none; d=zohomail.com; s=zohoarc; b=ccvEB6n/HHHiaD32X+dWWE0tmcrSN7eBxX4NV5kpJ7HUdv18gomGCpGaf+nhPJcgCliQvrADhBWWaUzDzVbXr29NpoW3snRLQQSnAbYFOGhAQZZRg79QX+FW/0YfIAJLrX3P/T6SWpTfR0cS/aE7ozLhZWzUZwMi1WW7P0cnCvM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696959409; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vT38JOtKxyIAw8CezA6EyFQoZ60cuZFy9yJIaUxns1E=; b=FV8BOvUAsWCQBrfMeFxWJyK8g1YFxRHjc9chOxWsiLS6t+etM0Eap5AU16PtEyueT8Wcj/ZzFyCRqLkgO4bfV7LDhGTuDHVsy7EomurVeQeFmCgEGrhdYr6C7AKXD34ndKV5MIrZEgQhD9w9+B9E72bfR5VYlfYrCTt7nCgmjh0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1696959408957512.9252165742987; Tue, 10 Oct 2023 10:36:48 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-549-ujpmWAzWN0GeWILl9KJYbg-1; Tue, 10 Oct 2023 13:36:34 -0400 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 127E8887E6E; Tue, 10 Oct 2023 17:36:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id F07FD492B07; Tue, 10 Oct 2023 17:36:23 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id ECC1719466DF; Tue, 10 Oct 2023 17:36:22 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 7A49F19465BB for <libvir-list@listman.corp.redhat.com>; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 4C3E9492B00; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast10.extmail.prod.ext.rdu2.redhat.com [10.11.55.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 44CD3492C3E for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: from us-smtp-inbound-delivery-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 201441C0759D for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-322-ImwhUqhoMLeIvyfcKG4QOA-1; Tue, 10 Oct 2023 13:36:18 -0400 Received: from mx0.riseup.net (mx0-pn.riseup.net [10.0.1.42]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4S4jWF1WpKzDqtG for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:49 +0000 (UTC) Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx0.riseup.net (Postfix) with ESMTPS id 4S4jWC0fR3z9tPx for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:47 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4S4jW96RZ9zFs1M; Tue, 10 Oct 2023 17:26:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696959407; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=vT38JOtKxyIAw8CezA6EyFQoZ60cuZFy9yJIaUxns1E=; b=YgpV3IPBXNg0FDBv/Sja3Hd8iWYTTxnEOWHDxaR0CZld1g4XLcE/8hxf29DeuUoOy6EUHQ 0m1ifeEACZ6vJOrtLXdh3yZui5lvlXlQLmJyrGdAYyZLf4XpD/0hbN2xowSlX8JDVc49YQ uTgDMnTLOr4Yrt1SH+VpAHrRehYSDl8= X-MC-Unique: ujpmWAzWN0GeWILl9KJYbg-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: ImwhUqhoMLeIvyfcKG4QOA-1 X-Riseup-User-ID: 08CA1ABAC8525E2FE1EF338665CF1D73FC94BBC90ECC2AF986324A56172A465C From: K Shiva Kiran <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [PATCH v2 10/11] test_driver: Implement test driver for metadata APIs Date: Tue, 10 Oct 2023 22:48:42 +0530 Message-ID: <20231010172509.103884-11-shiva_kr@riseup.net> In-Reply-To: <20231010172509.103884-1-shiva_kr@riseup.net> References: <20231010172509.103884-1-shiva_kr@riseup.net> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva Kiran <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696959410445100005 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: K Shiva Kiran <shiva_kr@riseup.net> --- src/test/test_driver.c | 49 +++++- tests/meson.build | 1 + tests/nwfiltermetadatatest.c | 297 +++++++++++++++++++++++++++++++++++ 3 files changed, 346 insertions(+), 1 deletion(-) create mode 100644 tests/nwfiltermetadatatest.c diff --git a/src/test/test_driver.c b/src/test/test_driver.c index ffcaa07b3e..14baa82e52 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -10080,7 +10080,6 @@ testConnectGetDomainCapabilities(virConnectPtr conn= G_GNUC_UNUSED, return virDomainCapsFormat(domCaps); } =20 - static virNWFilterObj * testNWFilterObjFromNWFilter(testDriver *driver, const unsigned char *uuid) @@ -10262,6 +10261,52 @@ testNWFilterGetXMLDesc(virNWFilterPtr nwfilter, return ret; } =20 +static int +testNWFilterSetMetadata(virNWFilterPtr nwfilter, + int type, + const char *metadata, + const char *key, + const char *uri, + unsigned int flags) +{ + testDriver *driver =3D nwfilter->conn->privateData; + virNWFilterObj *obj =3D NULL; + int ret =3D -1; + + virCheckFlags(0, -1); + + if (!(obj =3D testNWFilterObjFromNWFilter(driver, nwfilter->uuid))) + return -1; + + ret =3D virNWFilterObjSetMetadata(obj, type, metadata, + key, uri, NULL); + + virNWFilterObjUnlock(obj); + return ret; +} + +static char * +testNWFilterGetMetadata(virNWFilterPtr nwfilter, + int type, + const char *uri, + unsigned int flags) +{ + testDriver *driver =3D nwfilter->conn->privateData; + virNWFilterObj *obj =3D NULL; + char *ret =3D NULL; + + virCheckFlags(0, NULL); + + if (!(obj =3D testNWFilterObjFromNWFilter(driver, nwfilter->uuid))) + return NULL; + + ret =3D virNWFilterObjGetMetadata(obj, type, uri); + + virNWFilterObjUnlock(obj); + return ret; +} + + /* * Test driver */ @@ -10546,6 +10591,8 @@ static virNWFilterDriver testNWFilterDriver =3D { .nwfilterDefineXMLFlags =3D testNWFilterDefineXMLFlags, /* 9.9.0 */ .nwfilterUndefine =3D testNWFilterUndefine, /* 9.9.0 */ .nwfilterGetXMLDesc =3D testNWFilterGetXMLDesc, /* 9.9.0 */ + .nwfilterGetMetadata =3D testNWFilterGetMetadata, /* 9.9.0 */ + .nwfilterSetMetadata =3D testNWFilterSetMetadata, /* 9.9.0 */ }; =20 static virConnectDriver testConnectDriver =3D { diff --git a/tests/meson.build b/tests/meson.build index b235c5f4dd..d3055a9988 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -259,6 +259,7 @@ tests +=3D [ { 'name': 'interfacexml2xmltest' }, { 'name': 'metadatatest' }, { 'name': 'networkmetadatatest' }, + { 'name': 'nwfiltermetadatatest' }, { 'name': 'networkxml2xmlupdatetest' }, { 'name': 'nodedevxml2xmltest' }, { 'name': 'nwfilterxml2xmltest' }, diff --git a/tests/nwfiltermetadatatest.c b/tests/nwfiltermetadatatest.c new file mode 100644 index 0000000000..6f2754aa25 --- /dev/null +++ b/tests/nwfiltermetadatatest.c @@ -0,0 +1,297 @@ +/* + * Copyright (C) 2013 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; If not, see + * <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include "testutils.h" + +#include "virerror.h" +#include "virxml.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + +static const char metadata1[] =3D +"<derp xmlns:foobar=3D'http://foo.bar/'>\n" +" <bar>foobar</bar>\n" +" <foo fooish=3D'blurb'>foofoo</foo>\n" +" <foobar:baz>zomg</foobar:baz>\n" +"</derp>"; + + +static const char metadata1_ns[] =3D +"<herp:derp xmlns:foobar=3D'http://foo.bar/' xmlns:herp=3D'http://herp.der= p/'>\n" +" <herp:bar>foobar</herp:bar>\n" +" <herp:foo fooish=3D'blurb'>foofoo</herp:foo>\n" +" <foobar:baz>zomg</foobar:baz>\n" +"</herp:derp>"; + + +static const char metadata2[] =3D +"<foo>\n" +" <bar>baz</bar>\n" +"</foo>"; + + +static const char metadata2_ns[] =3D +"<blurb:foo xmlns:blurb=3D'http://herp.derp/'>\n" +" <blurb:bar>baz</blurb:bar>\n" +"</blurb:foo>"; + + +static char * +getMetadataFromXML(virNWFilterPtr nwfilter) +{ + g_autoptr(xmlDoc) doc =3D NULL; + g_autoptr(xmlXPathContext) ctxt =3D NULL; + xmlNodePtr node; + + g_autofree char *xml =3D NULL; + + if (!(xml =3D virNWFilterGetXMLDesc(nwfilter, 0))) + return NULL; + + if (!(doc =3D virXMLParseStringCtxt(xml, "(nwfilter_definition)", &ctx= t))) + return NULL; + + if (!(node =3D virXPathNode("//metadata/*", ctxt))) + return NULL; + + return virXMLNodeToString(node->doc, node); +} + + +static void +metadataXMLConvertApostrophe(char *str) +{ + do { + if (*str =3D=3D '\"') + *str =3D '\''; + } while ((*++str) !=3D '\0'); +} + + +static bool +verifyMetadata(virNWFilterPtr nwfilter, + const char *expectXML, + const char *expectAPI, + const char *uri) +{ + g_autofree char *metadataXML =3D NULL; + g_autofree char *metadataAPI =3D NULL; + + if (!expectAPI) { + if ((metadataAPI =3D virNWFilterGetMetadata(nwfilter, + VIR_NWFILTER_METADATA_EL= EMENT, + uri, 0))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "expected no metadata in API, but got:\n[%s]", + metadataAPI); + return false; + } + } else { + if (!(metadataAPI =3D virNWFilterGetMetadata(nwfilter, + VIR_NWFILTER_METADATA_E= LEMENT, + uri, 0))) + return false; + + metadataXMLConvertApostrophe(metadataAPI); + + if (STRNEQ(metadataAPI, expectAPI)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "XML metadata in API doesn't match expected met= adata: " + "expected:\n[%s]\ngot:\n[%s]", + expectAPI, metadataAPI); + return false; + } + + } + + if (!expectXML) { + if ((metadataXML =3D getMetadataFromXML(nwfilter))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "expected no metadata in XML, but got:\n[%s]", + metadataXML); + return false; + } + } else { + if (!(metadataXML =3D getMetadataFromXML(nwfilter))) + return false; + + metadataXMLConvertApostrophe(metadataXML); + + if (STRNEQ(metadataXML, expectXML)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "XML in dump doesn't match expected metadata: " + "expected:\n[%s]\ngot:\n[%s]", + expectXML, metadataXML); + return false; + } + } + + return true; +} + + +struct metadataTest { + virConnectPtr conn; + virNWFilterPtr nwfilter; + + const char *data; + const char *expect; + int type; + bool fail; +}; + + +static int +testAssignMetadata(const void *data) +{ + const struct metadataTest *test =3D data; + + if (virNWFilterSetMetadata(test->nwfilter, VIR_NWFILTER_METADATA_ELEME= NT, + metadata1, "herp", "http://herp.derp/", 0) = < 0) + return -1; + + if (!verifyMetadata(test->nwfilter, metadata1_ns, metadata1, "http://h= erp.derp/")) + return -1; + + return 0; +} + +static int +testRewriteMetadata(const void *data) +{ + const struct metadataTest *test =3D data; + + if (virNWFilterSetMetadata(test->nwfilter, VIR_NWFILTER_METADATA_ELEME= NT, + metadata2, "blurb", "http://herp.derp/", 0)= < 0) + return -1; + + if (!verifyMetadata(test->nwfilter, metadata2_ns, metadata2, "http://h= erp.derp/")) + return -1; + + return 0; +} + +static int +testEraseMetadata(const void *data) +{ + const struct metadataTest *test =3D data; + + if (virNWFilterSetMetadata(test->nwfilter, VIR_NWFILTER_METADATA_ELEME= NT, + NULL, NULL, "http://herp.derp/", 0) < 0) + return -1; + + if (!verifyMetadata(test->nwfilter, NULL, NULL, "http://herp.derp/")) + return -1; + + return 0; +} + +static int +testTextMetadata(const void *data) +{ + const struct metadataTest *test =3D data; + g_autofree char *actual =3D NULL; + + if (virNWFilterSetMetadata(test->nwfilter, test->type, test->data, NUL= L, NULL, 0) < 0) { + if (test->fail) + return 0; + return -1; + } + + actual =3D virNWFilterGetMetadata(test->nwfilter, test->type, NULL, 0); + + if (STRNEQ_NULLABLE(test->expect, actual)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "expected metadata doesn't match actual: " + "expected:'%s'\ngot: '%s'", + NULLSTR(test->data), NULLSTR(actual)); + return -1; + } + + return 0; +} + +#define TEST_TEXT_METADATA(INDEX, TYPE, DATA, EXPECT, FAIL) \ + do { \ + test.type =3D VIR_NWFILTER_METADATA_ ## TYPE; \ + test.data =3D DATA; \ + test.expect =3D EXPECT; \ + test.fail =3D FAIL; \ + \ + if (virTestRun("text metadata: " #TYPE " " INDEX " ", \ + testTextMetadata, &test) < 0) \ + ret =3D EXIT_FAILURE; \ + } while (0) + +#define TEST_TITLE(INDEX, DATA) \ + TEST_TEXT_METADATA(INDEX, TITLE, DATA, DATA, false) +#define TEST_TITLE_EXPECT(INDEX, DATA, EXPECT) \ + TEST_TEXT_METADATA(INDEX, TITLE, DATA, EXPECT, false) +#define TEST_TITLE_FAIL(INDEX, DATA) \ + TEST_TEXT_METADATA(INDEX, TITLE, DATA, DATA, true) +#define TEST_DESCR(INDEX, DATA) \ + TEST_TEXT_METADATA(INDEX, DESCRIPTION, DATA, DATA, false) +#define TEST_DESCR_EXPECT(INDEX, DATA, EXPECT) \ + TEST_TEXT_METADATA(INDEX, DESCRIPTION, DATA, EXPECT, false) + +static int +mymain(void) +{ + struct metadataTest test =3D { 0 }; + int ret =3D EXIT_SUCCESS; + + if (!(test.conn =3D virConnectOpen("test:///default"))) + return EXIT_FAILURE; + + if (!(test.nwfilter =3D virNWFilterLookupByName(test.conn, "test-filte= r"))) { + virConnectClose(test.conn); + return EXIT_FAILURE; + } + + virTestQuiesceLibvirtErrors(false); + + if (virTestRun("Assign metadata ", testAssignMetadata, &test) < 0) + ret =3D EXIT_FAILURE; + if (virTestRun("Rewrite Metadata ", testRewriteMetadata, &test) < 0) + ret =3D EXIT_FAILURE; + if (virTestRun("Erase metadata ", testEraseMetadata, &test) < 0) + ret =3D EXIT_FAILURE; + + TEST_TITLE("1", "qwert"); + TEST_TITLE("2", NULL); + TEST_TITLE("3", "blah"); + TEST_TITLE_FAIL("4", "qwe\nrt"); + TEST_TITLE_EXPECT("5", "", NULL); + TEST_TITLE_FAIL("6", "qwert\n"); + TEST_TITLE_FAIL("7", "\n"); + + TEST_DESCR("1", "qwert\nqwert"); + TEST_DESCR("2", NULL); + TEST_DESCR("3", "qwert"); + TEST_DESCR("4", "\n"); + TEST_DESCR_EXPECT("5", "", NULL); + + virNWFilterFree(test.nwfilter); + virConnectClose(test.conn); + + return ret; +} + +VIR_TEST_MAIN(mymain) --=20 2.42.0 From nobody Sun May 12 13:01:40 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.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 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=riseup.net ARC-Seal: i=1; a=rsa-sha256; t=1696959406; cv=none; d=zohomail.com; s=zohoarc; b=EstDqexSOrJszFm1g61KdlzWYhb1uws+EBtTm6VBlZnGlQ8hwbqfmScMpa0guAb2FnhlaFvZKRM8f0RxZ9J3/K2w4q5VTifpzOyoAbZMV5M+Ixuljro9ZmnYIloOSS8GI6B6MOfNyohLw1Car8cdBt559IRFUJiHb1Ymts8rXx4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696959406; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rFG/BrVa+mEfCZ5GSaNmRNaYSjDkwuD7ET3FUzhI9Ls=; b=ZEo2XerzvCE/u5LUrx/A6+0WVU1OaTVfvsb5UFLS4wzqFQflWclJRaI2vcN2m571UGu2VVwyauBZ9Uy9J6DfMU8wKxp8DfP1x6YU8Zz1eLnOFG5/5IkpJFTbzv8jpuPLZ/rQ/PVB9rzMMrpjCi2ZFORbSABiWQ/NObnliamMTJg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from=<shiva_kr@riseup.net> (p=none dis=none) Return-Path: <libvir-list-bounces@redhat.com> Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1696959406143734.6907672794733; Tue, 10 Oct 2023 10:36:46 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-685-fMQgXpPGPC6dTIm9geV7_A-1; Tue, 10 Oct 2023 13:36:32 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2F62D855324; Tue, 10 Oct 2023 17:36:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 18673158; Tue, 10 Oct 2023 17:36:24 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 093121946A43; Tue, 10 Oct 2023 17:36:23 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id BAEC719466F4 for <libvir-list@listman.corp.redhat.com>; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id AD21C1B99; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast10.extmail.prod.ext.rdu2.redhat.com [10.11.55.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A5B52158 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: from us-smtp-inbound-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 85ADB1C075A2 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:36:21 +0000 (UTC) Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-467-oMdplyQNPi6dGkJtaL-O3w-1; Tue, 10 Oct 2023 13:36:19 -0400 Received: from fews02-sea.riseup.net (fews02-sea-pn.riseup.net [10.0.1.112]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx1.riseup.net (Postfix) with ESMTPS id 4S4jWD4smYzDqk9 for <libvir-list@redhat.com>; Tue, 10 Oct 2023 17:26:48 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews02-sea.riseup.net (Postfix) with ESMTPSA id 4S4jWC3rplzFs1M; Tue, 10 Oct 2023 17:26:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1696959405; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=rFG/BrVa+mEfCZ5GSaNmRNaYSjDkwuD7ET3FUzhI9Ls=; b=gsjefX0wz7Gzp3thK7ECZ9r/LHa+eMoAZXQKJBbnO90Zd6lxbSrWL/igZGyFeD18ZFgpo1 J+fTgqVJq/vsmzxUMEj6MwKl1iCuZp2DXvASuubST1pircLd2lqHaJz/6SN5G6La0SH9j/ VU4zH77sZCDNPoN8WD3HG1hALI2Ot+M= X-MC-Unique: fMQgXpPGPC6dTIm9geV7_A-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: oMdplyQNPi6dGkJtaL-O3w-1 X-Riseup-User-ID: 92E934CD3023BF4C701B8A25DC64D3B122027EE24636FC91AAF6A5287499C061 From: K Shiva Kiran <shiva_kr@riseup.net> To: libvir-list@redhat.com Subject: [PATCH v2 11/11] NEWS: Introduce user-defined metadata fields for NWFilter object Date: Tue, 10 Oct 2023 22:48:43 +0530 Message-ID: <20231010172509.103884-12-shiva_kr@riseup.net> In-Reply-To: <20231010172509.103884-1-shiva_kr@riseup.net> References: <20231010172509.103884-1-shiva_kr@riseup.net> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools <libvir-list.redhat.com> List-Unsubscribe: <https://listman.redhat.com/mailman/options/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=unsubscribe> List-Archive: <http://listman.redhat.com/archives/libvir-list/> List-Post: <mailto:libvir-list@redhat.com> List-Help: <mailto:libvir-list-request@redhat.com?subject=help> List-Subscribe: <https://listman.redhat.com/mailman/listinfo/libvir-list>, <mailto:libvir-list-request@redhat.com?subject=subscribe> Cc: K Shiva Kiran <shiva_kr@riseup.net> Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" <libvir-list-bounces@redhat.com> X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: riseup.net Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1696959406458100004 Content-Type: text/plain; charset="utf-8"; x-default="true" Signed-off-by: K Shiva Kiran <shiva_kr@riseup.net> --- NEWS.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/NEWS.rst b/NEWS.rst index d04090d43d..94e8c3f575 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -17,6 +17,24 @@ v9.9.0 (unreleased) =20 * **New features** =20 + * nwfilter: Support for user-defined metadata + + The network filter object adds three user-defined metadata fields: + 1) ``<title>``: Stores a short description (title) and can't contain= newlines. + 2) ``<description>``: Can store any documentation the user wants. + 3) ``<metadata>``: Can store custom metadata in form of XML nodes. + + Two new APIs have been added to manage the above fields: + 1) ``virNWFilterGetMetadata()`` + 2) ``virNWFilterSetMetadata()`` + + virsh adds two new commands: + 1) ``nwfilter-desc``: To view or modify the title or description. + 2) ``nwfilter-metadata``: To view or modify ``<metadata>``. + + ``nwfilter-list`` adds a new option ``--title`` that prints the conten= t of ``<title>`` + in an extra column within the default ``--table`` output. + * **Improvements** =20 * **Bug fixes** --=20 2.42.0