From nobody Fri Apr 19 23:58:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1539845766290426.223200327172; Wed, 17 Oct 2018 23:56:06 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9683480F88; Thu, 18 Oct 2018 06:56:04 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5F28B100164E; Thu, 18 Oct 2018 06:56:04 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id E913F4CA94; Thu, 18 Oct 2018 06:56:03 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w9I6oI0p008999 for ; Thu, 18 Oct 2018 02:50:18 -0400 Received: by smtp.corp.redhat.com (Postfix) id 658175FCBC; Thu, 18 Oct 2018 06:50:18 +0000 (UTC) Received: from mx1.redhat.com (ext-mx20.extmail.prod.ext.phx2.redhat.com [10.5.110.49]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 43AF560C66; Thu, 18 Oct 2018 06:50:03 +0000 (UTC) Received: from relay.sw.ru (relay.sw.ru [185.231.240.75]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EC34230B8FB6; Thu, 18 Oct 2018 06:49:59 +0000 (UTC) Received: from [10.94.3.220] (helo=dim-vz7.qa.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1gD285-0007CF-9R; Thu, 18 Oct 2018 09:49:57 +0300 From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Thu, 18 Oct 2018 09:49:31 +0300 Message-Id: <1539845374-898024-2-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1539845374-898024-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1539845374-898024-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Sender passed SPF test, ACL 238 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Thu, 18 Oct 2018 06:50:01 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Thu, 18 Oct 2018 06:50:01 +0000 (UTC) for IP:'185.231.240.75' DOMAIN:'relay.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 185.231.240.75 relay.sw.ru 185.231.240.75 relay.sw.ru X-Scanned-By: MIMEDefang 2.84 on 10.5.110.49 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/4] nwfilter: add nwfilter hash X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Thu, 18 Oct 2018 06:56:05 +0000 (UTC) X-ZohoMail: RDMRC_1 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" For filter without references to other filters hash is just sha-256 of filt= er's xml. For filters with references hash is sha-256 of string consisting of filter's self hash and hashes of directly referenced filters. If filter is not complete that is some of filters it's referencing directly= or indirectly are missing the hash is set to NULL as well as if there was OOM = on hash caculation. So having NULL hash is regular situation. Signed-off-by: Nikolay Shirokovskiy --- src/conf/virnwfilterobj.c | 145 +++++++++++++++++++++++++++++= ++++ src/conf/virnwfilterobj.h | 9 ++ src/libvirt_private.syms | 3 + src/nwfilter/nwfilter_driver.c | 3 + src/nwfilter/nwfilter_gentech_driver.c | 2 + 5 files changed, 162 insertions(+) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index 0136a0d..4cc81df 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -28,6 +28,7 @@ #include "virlog.h" #include "virnwfilterobj.h" #include "virstring.h" +#include "vircrypto.h" =20 #define VIR_FROM_THIS VIR_FROM_NWFILTER =20 @@ -40,6 +41,8 @@ struct _virNWFilterObj { =20 virNWFilterDefPtr def; virNWFilterDefPtr newDef; + + char *hash; }; =20 struct _virNWFilterObjList { @@ -82,6 +85,13 @@ virNWFilterObjGetNewDef(virNWFilterObjPtr obj) } =20 =20 +char* +virNWFilterObjGetHash(virNWFilterObjPtr obj) +{ + return obj->hash; +} + + bool virNWFilterObjWantRemoved(virNWFilterObjPtr obj) { @@ -307,6 +317,139 @@ virNWFilterDefEqual(const virNWFilterDef *def1, } =20 =20 +static void +virNWFilterObjInvalidateHash(virNWFilterObjListPtr nwfilters, + virNWFilterObjPtr obj) +{ + virNWFilterDefPtr def =3D obj->def; + size_t i; + + if (!obj->hash) + return; + + if (obj->newDef) { + VIR_FREE(obj->hash); + return; + } + + for (i =3D 0; i < def->nentries; i++) { + virNWFilterObjPtr child; + char *filterref; + + if (def->filterEntries[i]->rule || + !def->filterEntries[i]->include) + continue; + + filterref =3D def->filterEntries[i]->include->filterref; + + if (!(child =3D virNWFilterObjListFindByName(nwfilters, filterref)= )) { + VIR_FREE(obj->hash); + return; + } + + virNWFilterObjInvalidateHash(nwfilters, child); + + if (!child->hash) { + VIR_FREE(obj->hash); + virNWFilterObjUnlock(child); + return; + } + + virNWFilterObjUnlock(child); + } +} + + +void +virNWFilterObjListInvalidateHash(virNWFilterObjListPtr nwfilters) +{ + size_t i; + virNWFilterObjPtr obj; + + for (i =3D 0; i < nwfilters->count; i++) { + obj =3D nwfilters->objs[i]; + virNWFilterObjLock(obj); + virNWFilterObjInvalidateHash(nwfilters, obj); + virNWFilterObjUnlock(obj); + } +} + + +static void +virNWFilterObjUpdateHash(virNWFilterObjListPtr nwfilters, + virNWFilterObjPtr obj) +{ + virNWFilterDefPtr def =3D obj->newDef ? obj->newDef : obj->def; + size_t i; + char *hash; + char *xml; + virBuffer buf =3D VIR_BUFFER_INITIALIZER; + + if (obj->hash) + return; + + if (!(xml =3D virNWFilterDefFormat(def))) + return; + + if (virCryptoHashString(VIR_CRYPTO_HASH_SHA256, xml, &hash)) + goto cleanup; + + virBufferAsprintf(&buf, "%s\n", hash); + VIR_FREE(hash); + + for (i =3D 0; i < def->nentries; i++) { + char *filterref; + virNWFilterObjPtr child; + + if (def->filterEntries[i]->rule || + !def->filterEntries[i]->include) + continue; + + filterref =3D def->filterEntries[i]->include->filterref; + + if (!(child =3D virNWFilterObjListFindByName(nwfilters, filterref)= )) + goto cleanup; + + virNWFilterObjUpdateHash(nwfilters, child); + + if (!child->hash) { + virNWFilterObjUnlock(child); + goto cleanup; + } + + virBufferAsprintf(&buf, "%s\n", child->hash); + + virNWFilterObjUnlock(child); + } + + if (virBufferCheckError(&buf) < 0) + goto cleanup; + + hash =3D virBufferContentAndReset(&buf); + ignore_value(virCryptoHashString(VIR_CRYPTO_HASH_SHA256, hash, &obj->h= ash)); + VIR_FREE(hash); + + cleanup: + virBufferFreeAndReset(&buf); + VIR_FREE(xml); +} + + +void +virNWFilterObjListUpdateHash(virNWFilterObjListPtr nwfilters) +{ + size_t i; + virNWFilterObjPtr obj; + + for (i =3D 0; i < nwfilters->count; i++) { + obj =3D nwfilters->objs[i]; + virNWFilterObjLock(obj); + virNWFilterObjUpdateHash(nwfilters, obj); + virNWFilterObjUnlock(obj); + } +} + + virNWFilterObjPtr virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfilters, virNWFilterDefPtr def) @@ -555,6 +698,8 @@ virNWFilterObjListLoadAllConfigs(virNWFilterObjListPtr = nwfilters, virNWFilterObjUnlock(obj); } =20 + virNWFilterObjListUpdateHash(nwfilters); + VIR_DIR_CLOSE(dir); return ret; } diff --git a/src/conf/virnwfilterobj.h b/src/conf/virnwfilterobj.h index 4a54dd5..1c41a3e 100644 --- a/src/conf/virnwfilterobj.h +++ b/src/conf/virnwfilterobj.h @@ -50,6 +50,9 @@ virNWFilterObjGetDef(virNWFilterObjPtr obj); virNWFilterDefPtr virNWFilterObjGetNewDef(virNWFilterObjPtr obj); =20 +char* +virNWFilterObjGetHash(virNWFilterObjPtr obj); + bool virNWFilterObjWantRemoved(virNWFilterObjPtr obj); =20 @@ -114,4 +117,10 @@ virNWFilterObjLock(virNWFilterObjPtr obj); void virNWFilterObjUnlock(virNWFilterObjPtr obj); =20 +void +virNWFilterObjListInvalidateHash(virNWFilterObjListPtr nwfilters); + +void +virNWFilterObjListUpdateHash(virNWFilterObjListPtr nwfilters); + #endif /* VIRNWFILTEROBJ_H */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 335210c..a7cfe80 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1077,6 +1077,7 @@ virNWFilterBindingObjListRemove; =20 # conf/virnwfilterobj.h virNWFilterObjGetDef; +virNWFilterObjGetHash; virNWFilterObjGetNewDef; virNWFilterObjListAssignDef; virNWFilterObjListExport; @@ -1085,10 +1086,12 @@ virNWFilterObjListFindByUUID; virNWFilterObjListFindInstantiateFilter; virNWFilterObjListFree; virNWFilterObjListGetNames; +virNWFilterObjListInvalidateHash; virNWFilterObjListLoadAllConfigs; virNWFilterObjListNew; virNWFilterObjListNumOfNWFilters; virNWFilterObjListRemove; +virNWFilterObjListUpdateHash; virNWFilterObjLock; virNWFilterObjTestUnassignDef; virNWFilterObjUnlock; diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 1ab906f..5591c0b 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -570,6 +570,8 @@ nwfilterDefineXML(virConnectPtr conn, def =3D NULL; objdef =3D virNWFilterObjGetDef(obj); =20 + virNWFilterObjListUpdateHash(driver->nwfilters); + if (virNWFilterSaveConfig(driver->configDir, objdef) < 0) { virNWFilterObjListRemove(driver->nwfilters, obj); goto cleanup; @@ -616,6 +618,7 @@ nwfilterUndefine(virNWFilterPtr nwfilter) goto cleanup; =20 virNWFilterObjListRemove(driver->nwfilters, obj); + virNWFilterObjListInvalidateHash(driver->nwfilters); obj =3D NULL; ret =3D 0; =20 diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index e5dea91..d64621b 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -1066,6 +1066,8 @@ virNWFilterBuildAll(virNWFilterDriverStatePtr driver, virNWFilterBuildIter, &data); } else { + virNWFilterObjListInvalidateHash(driver->nwfilters); + virNWFilterObjListUpdateHash(driver->nwfilters); data.step =3D STEP_SWITCH; virNWFilterBindingObjListForEach(driver->bindings, virNWFilterBuildIter, --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri Apr 19 23:58:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1539845754718710.5244281968239; Wed, 17 Oct 2018 23:55:54 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CCC833082B04; Thu, 18 Oct 2018 06:55:52 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 937422E030; Thu, 18 Oct 2018 06:55:52 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 43287180B5B7; Thu, 18 Oct 2018 06:55:52 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w9I6oGHk008990 for ; Thu, 18 Oct 2018 02:50:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 8435A5C6DC; Thu, 18 Oct 2018 06:50:16 +0000 (UTC) Received: from mx1.redhat.com (ext-mx13.extmail.prod.ext.phx2.redhat.com [10.5.110.42]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8D5B85C6BE; Thu, 18 Oct 2018 06:50:02 +0000 (UTC) Received: from relay.sw.ru (relay.sw.ru [185.231.240.75]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F183830C9EE5; Thu, 18 Oct 2018 06:49:59 +0000 (UTC) Received: from [10.94.3.220] (helo=dim-vz7.qa.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1gD285-0007CF-GE; Thu, 18 Oct 2018 09:49:57 +0300 From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Thu, 18 Oct 2018 09:49:32 +0300 Message-Id: <1539845374-898024-3-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1539845374-898024-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1539845374-898024-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Sender passed SPF test, ACL 238 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Thu, 18 Oct 2018 06:50:01 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Thu, 18 Oct 2018 06:50:01 +0000 (UTC) for IP:'185.231.240.75' DOMAIN:'relay.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 185.231.240.75 relay.sw.ru 185.231.240.75 relay.sw.ru X-Scanned-By: MIMEDefang 2.84 on 10.5.110.42 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/4] nwfilter: don't reinstantiate filters if they are not changed X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Thu, 18 Oct 2018 06:55:53 +0000 (UTC) X-ZohoMail: RDMRC_1 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Skip binding's filter reinstantiation if it is not changed since it was instantiated last time. The purpose it to fasten libvirtd restart at least = if filters won't changed, see RFC [1]. Thus we need to keep instantiated filt= er hash for binding in binding's status. This patch skips filters reinstantiation on firewalld reloads too but this = will be fixed in next patch. [1] https://www.redhat.com/archives/libvir-list/2018-October/msg00657.html Signed-off-by: Nikolay Shirokovskiy --- src/conf/virnwfilterbindingobj.c | 20 +++++++++++++ src/conf/virnwfilterbindingobj.h | 7 +++++ src/libvirt_private.syms | 2 ++ src/nwfilter/nwfilter_driver.c | 2 ++ src/nwfilter/nwfilter_gentech_driver.c | 52 ++++++++++++++++++++++++++++++= +--- src/nwfilter/nwfilter_gentech_driver.h | 3 ++ 6 files changed, 82 insertions(+), 4 deletions(-) diff --git a/src/conf/virnwfilterbindingobj.c b/src/conf/virnwfilterbinding= obj.c index d145fe32..355981e 100644 --- a/src/conf/virnwfilterbindingobj.c +++ b/src/conf/virnwfilterbindingobj.c @@ -36,6 +36,7 @@ struct _virNWFilterBindingObj { =20 bool removing; virNWFilterBindingDefPtr def; + char *filterhash; }; =20 =20 @@ -103,6 +104,22 @@ virNWFilterBindingObjSetRemoving(virNWFilterBindingObj= Ptr obj, } =20 =20 +void +virNWFilterBindingObjSetFilterhash(virNWFilterBindingObjPtr obj, + char *filterhash) +{ + VIR_FREE(obj->filterhash); + obj->filterhash =3D filterhash; +} + + +char* +virNWFilterBindingObjGetFilterhash(virNWFilterBindingObjPtr obj) +{ + return obj->filterhash; +} + + /** * virNWFilterBindingObjEndAPI: * @obj: binding object @@ -207,6 +224,8 @@ virNWFilterBindingObjParseXML(xmlDocPtr doc, if (!(ret =3D virNWFilterBindingObjNew())) return NULL; =20 + ret->filterhash =3D virXPathString("string(./filterhash)", ctxt); + if (!(node =3D virXPathNode("./filterbinding", ctxt))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("filter binding status missing content")); @@ -284,6 +303,7 @@ virNWFilterBindingObjFormat(const virNWFilterBindingObj= *obj) virBufferAddLit(&buf, "\n"); =20 virBufferAdjustIndent(&buf, 2); + virBufferAsprintf(&buf, "%s\n", obj->filterha= sh); =20 if (virNWFilterBindingDefFormatBuf(&buf, obj->def) < 0) { virBufferFreeAndReset(&buf); diff --git a/src/conf/virnwfilterbindingobj.h b/src/conf/virnwfilterbinding= obj.h index 21ae85b..fbcee03 100644 --- a/src/conf/virnwfilterbindingobj.h +++ b/src/conf/virnwfilterbindingobj.h @@ -46,6 +46,13 @@ virNWFilterBindingObjSetRemoving(virNWFilterBindingObjPt= r obj, bool removing); =20 void +virNWFilterBindingObjSetFilterhash(virNWFilterBindingObjPtr obj, + char *filterhash); + +char* +virNWFilterBindingObjGetFilterhash(virNWFilterBindingObjPtr obj); + +void virNWFilterBindingObjEndAPI(virNWFilterBindingObjPtr *obj); =20 char * diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a7cfe80..cc3aaba 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1057,11 +1057,13 @@ virNWFilterBindingObjDelete; virNWFilterBindingObjEndAPI; virNWFilterBindingObjFormat; virNWFilterBindingObjGetDef; +virNWFilterBindingObjGetFilterhash; virNWFilterBindingObjGetRemoving; virNWFilterBindingObjNew; virNWFilterBindingObjParseFile; virNWFilterBindingObjSave; virNWFilterBindingObjSetDef; +virNWFilterBindingObjSetFilterhash; virNWFilterBindingObjSetRemoving; =20 =20 diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 5591c0b..5d25d65 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -778,6 +778,8 @@ nwfilterBindingCreateXML(virConnectPtr conn, ret =3D NULL; goto cleanup; } + + virNWFilterBindingUpdateHash(driver->nwfilters, obj); virNWFilterBindingObjSave(obj, driver->bindingDir); =20 cleanup: diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index d64621b..46b1144 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -982,10 +982,12 @@ enum { =20 static int virNWFilterBuildOne(virNWFilterDriverStatePtr driver, - virNWFilterBindingDefPtr binding, + virNWFilterBindingObjPtr bindingobj, virHashTablePtr skipInterfaces, int step) { + virNWFilterBindingDefPtr binding =3D virNWFilterBindingObjGetDef(bindi= ngobj); + virNWFilterObjPtr filter; bool skipIface; int ret =3D 0; VIR_DEBUG("Building filter for portdev=3D%s step=3D%d", binding->portd= evname, step); @@ -1009,13 +1011,39 @@ virNWFilterBuildOne(virNWFilterDriverStatePtr drive= r, break; =20 case STEP_SWITCH: - if (!virHashLookup(skipInterfaces, binding->portdevname)) + if (!virHashLookup(skipInterfaces, binding->portdevname)) { ret =3D virNWFilterTearOldFilter(binding); + + virNWFilterBindingUpdateHash(driver->nwfilters, bindingobj); + virNWFilterBindingObjSave(bindingobj, driver->bindingDir); + } break; =20 case STEP_APPLY_CURRENT: + if ((filter =3D virNWFilterObjListFindByName(driver->nwfilters, + binding->filter))) { + char *filterhash =3D virNWFilterObjGetHash(filter); + char *bindinghash =3D virNWFilterBindingObjGetFilterhash(bindi= ngobj); + + if (filterhash && bindinghash && STREQ(filterhash, bindinghash= )) { + VIR_DEBUG("skip binding reinstantiating owner=3D%s portdev= name=3D%s" + " filter=3D%s", + binding->ownername, binding->portdevname, + binding->filter); + + virNWFilterObjUnlock(filter); + break; + } + + virNWFilterObjUnlock(filter); + } + ret =3D virNWFilterInstantiateFilter(driver, binding); + if (ret =3D=3D 0) { + virNWFilterBindingUpdateHash(driver->nwfilters, bindingobj); + virNWFilterBindingObjSave(bindingobj, driver->bindingDir); + } break; } =20 @@ -1033,9 +1061,8 @@ static int virNWFilterBuildIter(virNWFilterBindingObjPtr binding, void *opaque) { struct virNWFilterBuildData *data =3D opaque; - virNWFilterBindingDefPtr def =3D virNWFilterBindingObjGetDef(binding); =20 - return virNWFilterBuildOne(data->driver, def, + return virNWFilterBuildOne(data->driver, binding, data->skipInterfaces, data->step); } =20 @@ -1084,3 +1111,20 @@ virNWFilterBuildAll(virNWFilterDriverStatePtr driver, } return ret; } + + +void +virNWFilterBindingUpdateHash(virNWFilterObjListPtr nwfilters, + virNWFilterBindingObjPtr binding) +{ + virNWFilterObjPtr filter; + virNWFilterBindingDefPtr def =3D virNWFilterBindingObjGetDef(binding); + char *filterhash =3D NULL; + + if ((filter =3D virNWFilterObjListFindByName(nwfilters, def->filter)))= { + ignore_value(VIR_STRDUP_QUIET(filterhash, virNWFilterObjGetHash(fi= lter))); + virNWFilterObjUnlock(filter); + } + + virNWFilterBindingObjSetFilterhash(binding, filterhash); +} diff --git a/src/nwfilter/nwfilter_gentech_driver.h b/src/nwfilter/nwfilter= _gentech_driver.h index 2cd19c9..3c96c34 100644 --- a/src/nwfilter/nwfilter_gentech_driver.h +++ b/src/nwfilter/nwfilter_gentech_driver.h @@ -57,4 +57,7 @@ virHashTablePtr virNWFilterCreateVarHashmap(const char *m= acaddr, int virNWFilterBuildAll(virNWFilterDriverStatePtr driver, bool newFilters); =20 +void virNWFilterBindingUpdateHash(virNWFilterObjListPtr nwfilters, + virNWFilterBindingObjPtr binding); + #endif --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri Apr 19 23:58:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1539845865422875.9965439627541; Wed, 17 Oct 2018 23:57:45 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5C7BC30833AF; Thu, 18 Oct 2018 06:57:43 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 180AF2E057; Thu, 18 Oct 2018 06:57:43 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id B766A4BB74; Thu, 18 Oct 2018 06:57:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w9I6o55j008959 for ; Thu, 18 Oct 2018 02:50:06 -0400 Received: by smtp.corp.redhat.com (Postfix) id C01E65D756; Thu, 18 Oct 2018 06:50:05 +0000 (UTC) Received: from mx1.redhat.com (ext-mx14.extmail.prod.ext.phx2.redhat.com [10.5.110.43]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 59ED75B6AD; Thu, 18 Oct 2018 06:50:02 +0000 (UTC) Received: from relay.sw.ru (relay.sw.ru [185.231.240.75]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EBC29308FB94; Thu, 18 Oct 2018 06:49:59 +0000 (UTC) Received: from [10.94.3.220] (helo=dim-vz7.qa.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1gD285-0007CF-M0; Thu, 18 Oct 2018 09:49:57 +0300 From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Thu, 18 Oct 2018 09:49:33 +0300 Message-Id: <1539845374-898024-4-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1539845374-898024-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1539845374-898024-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Sender passed SPF test, ACL 238 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Thu, 18 Oct 2018 06:50:01 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Thu, 18 Oct 2018 06:50:01 +0000 (UTC) for IP:'185.231.240.75' DOMAIN:'relay.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 185.231.240.75 relay.sw.ru 185.231.240.75 relay.sw.ru X-Scanned-By: MIMEDefang 2.84 on 10.5.110.43 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 3/4] nwfilter: force filters reinstantiation on firewalld reload X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Thu, 18 Oct 2018 06:57:44 +0000 (UTC) X-ZohoMail: RDMRC_1 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" We need reinstantiation because reload will flush rules installed by libvirtd. Signed-off-by: Nikolay Shirokovskiy --- src/nwfilter/nwfilter_driver.c | 6 +++--- src/nwfilter/nwfilter_gentech_driver.c | 13 +++++++++---- src/nwfilter/nwfilter_gentech_driver.h | 3 ++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 5d25d65..db04868 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -168,7 +168,7 @@ virNWFilterTriggerRebuildImpl(void *opaque) { virNWFilterDriverStatePtr nwdriver =3D opaque; =20 - return virNWFilterBuildAll(nwdriver, true); + return virNWFilterBuildAll(nwdriver, true, false); } =20 =20 @@ -264,7 +264,7 @@ nwfilterStateInitialize(bool privileged, if (virNWFilterBindingObjListLoadAllConfigs(driver->bindings, driver->= bindingDir) < 0) goto error; =20 - if (virNWFilterBuildAll(driver, false) < 0) + if (virNWFilterBuildAll(driver, false, false) < 0) goto error; =20 nwfilterDriverUnlock(); @@ -319,7 +319,7 @@ nwfilterStateReload(void) =20 virNWFilterUnlockFilterUpdates(); =20 - virNWFilterBuildAll(driver, false); + virNWFilterBuildAll(driver, false, true); =20 nwfilterDriverUnlock(); =20 diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 46b1144..a5b3e1a 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -984,7 +984,8 @@ static int virNWFilterBuildOne(virNWFilterDriverStatePtr driver, virNWFilterBindingObjPtr bindingobj, virHashTablePtr skipInterfaces, - int step) + int step, + bool force) { virNWFilterBindingDefPtr binding =3D virNWFilterBindingObjGetDef(bindi= ngobj); virNWFilterObjPtr filter; @@ -1020,7 +1021,8 @@ virNWFilterBuildOne(virNWFilterDriverStatePtr driver, break; =20 case STEP_APPLY_CURRENT: - if ((filter =3D virNWFilterObjListFindByName(driver->nwfilters, + if (!force && + (filter =3D virNWFilterObjListFindByName(driver->nwfilters, binding->filter))) { char *filterhash =3D virNWFilterObjGetHash(filter); char *bindinghash =3D virNWFilterBindingObjGetFilterhash(bindi= ngobj); @@ -1055,6 +1057,7 @@ struct virNWFilterBuildData { virNWFilterDriverStatePtr driver; virHashTablePtr skipInterfaces; int step; + bool force; }; =20 static int @@ -1063,15 +1066,17 @@ virNWFilterBuildIter(virNWFilterBindingObjPtr bindi= ng, void *opaque) struct virNWFilterBuildData *data =3D opaque; =20 return virNWFilterBuildOne(data->driver, binding, - data->skipInterfaces, data->step); + data->skipInterfaces, data->step, data->for= ce); } =20 int virNWFilterBuildAll(virNWFilterDriverStatePtr driver, - bool newFilters) + bool newFilters, + bool force) { struct virNWFilterBuildData data =3D { .driver =3D driver, + .force =3D force, }; int ret =3D 0; =20 diff --git a/src/nwfilter/nwfilter_gentech_driver.h b/src/nwfilter/nwfilter= _gentech_driver.h index 3c96c34..bdf3daa 100644 --- a/src/nwfilter/nwfilter_gentech_driver.h +++ b/src/nwfilter/nwfilter_gentech_driver.h @@ -55,7 +55,8 @@ virHashTablePtr virNWFilterCreateVarHashmap(const char *m= acaddr, const virNWFilterVarValue *val= ue); =20 int virNWFilterBuildAll(virNWFilterDriverStatePtr driver, - bool newFilters); + bool newFilters, + bool force); =20 void virNWFilterBindingUpdateHash(virNWFilterObjListPtr nwfilters, virNWFilterBindingObjPtr binding); --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Fri Apr 19 23:58:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1539845738257901.6132820805549; Wed, 17 Oct 2018 23:55:38 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 62237285B0; Thu, 18 Oct 2018 06:55:35 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 7B4175DEF9; Thu, 18 Oct 2018 06:55:34 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 2B41F180B5B7; Thu, 18 Oct 2018 06:55:32 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w9I6o8jc008975 for ; Thu, 18 Oct 2018 02:50:08 -0400 Received: by smtp.corp.redhat.com (Postfix) id 514D034165; Thu, 18 Oct 2018 06:50:08 +0000 (UTC) Received: from mx1.redhat.com (ext-mx18.extmail.prod.ext.phx2.redhat.com [10.5.110.47]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 79875429BC; Thu, 18 Oct 2018 06:50:02 +0000 (UTC) Received: from relay.sw.ru (relay.sw.ru [185.231.240.75]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EE25B3003D5C; Thu, 18 Oct 2018 06:49:59 +0000 (UTC) Received: from [10.94.3.220] (helo=dim-vz7.qa.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1gD285-0007CF-RB; Thu, 18 Oct 2018 09:49:57 +0300 From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Thu, 18 Oct 2018 09:49:34 +0300 Message-Id: <1539845374-898024-5-git-send-email-nshirokovskiy@virtuozzo.com> In-Reply-To: <1539845374-898024-1-git-send-email-nshirokovskiy@virtuozzo.com> References: <1539845374-898024-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Sender passed SPF test, ACL 238 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Thu, 18 Oct 2018 06:50:01 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Thu, 18 Oct 2018 06:50:01 +0000 (UTC) for IP:'185.231.240.75' DOMAIN:'relay.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: -0.001 (SPF_PASS) 185.231.240.75 relay.sw.ru 185.231.240.75 relay.sw.ru X-Scanned-By: MIMEDefang 2.84 on 10.5.110.47 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/4] nwfilter: force filters reinstantiation on binary update X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Thu, 18 Oct 2018 06:55:36 +0000 (UTC) X-ZohoMail: RDMRC_1 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This helps us bring correct firewall rules if previous binary install them incorrectly. Signed-off-by: Nikolay Shirokovskiy --- src/conf/virnwfilterbindingobj.c | 20 ++++++++++++++++++++ src/conf/virnwfilterbindingobj.h | 3 +++ src/libvirt_private.syms | 1 + src/nwfilter/nwfilter_gentech_driver.c | 4 +++- 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/conf/virnwfilterbindingobj.c b/src/conf/virnwfilterbinding= obj.c index 355981e..09b757a 100644 --- a/src/conf/virnwfilterbindingobj.c +++ b/src/conf/virnwfilterbindingobj.c @@ -37,6 +37,7 @@ struct _virNWFilterBindingObj { bool removing; virNWFilterBindingDefPtr def; char *filterhash; + time_t libvirtCtime; }; =20 =20 @@ -110,6 +111,7 @@ virNWFilterBindingObjSetFilterhash(virNWFilterBindingOb= jPtr obj, { VIR_FREE(obj->filterhash); obj->filterhash =3D filterhash; + obj->libvirtCtime =3D virGetSelfLastChanged(); } =20 =20 @@ -120,6 +122,12 @@ virNWFilterBindingObjGetFilterhash(virNWFilterBindingO= bjPtr obj) } =20 =20 +time_t +virNWFilterBindingObjGetLibvirtCtime(virNWFilterBindingObjPtr obj) +{ + return obj->libvirtCtime; +} + /** * virNWFilterBindingObjEndAPI: * @obj: binding object @@ -220,12 +228,22 @@ virNWFilterBindingObjParseXML(xmlDocPtr doc, { virNWFilterBindingObjPtr ret; xmlNodePtr node; + long long int ctime; =20 if (!(ret =3D virNWFilterBindingObjNew())) return NULL; =20 ret->filterhash =3D virXPathString("string(./filterhash)", ctxt); =20 + if (virXPathBoolean("boolean(./libvirtctime)", ctxt) > 0) { + if (virXPathLongLong("string(./libvirtctime)", ctxt, &ctime) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("invalid libvirtctime format")); + goto cleanup; + } + ret->libvirtCtime =3D (time_t)ctime; + } + if (!(node =3D virXPathNode("./filterbinding", ctxt))) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("filter binding status missing content")); @@ -304,6 +322,8 @@ virNWFilterBindingObjFormat(const virNWFilterBindingObj= *obj) =20 virBufferAdjustIndent(&buf, 2); virBufferAsprintf(&buf, "%s\n", obj->filterha= sh); + virBufferAsprintf(&buf, "%llu\n", + (long long) obj->libvirtCtime); =20 if (virNWFilterBindingDefFormatBuf(&buf, obj->def) < 0) { virBufferFreeAndReset(&buf); diff --git a/src/conf/virnwfilterbindingobj.h b/src/conf/virnwfilterbinding= obj.h index fbcee03..ab949f8 100644 --- a/src/conf/virnwfilterbindingobj.h +++ b/src/conf/virnwfilterbindingobj.h @@ -52,6 +52,9 @@ virNWFilterBindingObjSetFilterhash(virNWFilterBindingObjP= tr obj, char* virNWFilterBindingObjGetFilterhash(virNWFilterBindingObjPtr obj); =20 +time_t +virNWFilterBindingObjGetLibvirtCtime(virNWFilterBindingObjPtr obj); + void virNWFilterBindingObjEndAPI(virNWFilterBindingObjPtr *obj); =20 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index cc3aaba..368ee01 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1058,6 +1058,7 @@ virNWFilterBindingObjEndAPI; virNWFilterBindingObjFormat; virNWFilterBindingObjGetDef; virNWFilterBindingObjGetFilterhash; +virNWFilterBindingObjGetLibvirtCtime; virNWFilterBindingObjGetRemoving; virNWFilterBindingObjNew; virNWFilterBindingObjParseFile; diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index a5b3e1a..94c2c5b 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -1026,8 +1026,10 @@ virNWFilterBuildOne(virNWFilterDriverStatePtr driver, binding->filter))) { char *filterhash =3D virNWFilterObjGetHash(filter); char *bindinghash =3D virNWFilterBindingObjGetFilterhash(bindi= ngobj); + time_t libvirtCtime =3D virNWFilterBindingObjGetLibvirtCtime(b= indingobj); =20 - if (filterhash && bindinghash && STREQ(filterhash, bindinghash= )) { + if (libvirtCtime =3D=3D virGetSelfLastChanged() && + filterhash && bindinghash && STREQ(filterhash, bindinghash= )) { VIR_DEBUG("skip binding reinstantiating owner=3D%s portdev= name=3D%s" " filter=3D%s", binding->ownername, binding->portdevname, --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list