From nobody Sat Feb 7 17:15:03 2026 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=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1530008341436342.0527000279892; Tue, 26 Jun 2018 03:19:01 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CD0CF7F6C0; Tue, 26 Jun 2018 10:18:58 +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 715F34387; Tue, 26 Jun 2018 10:18:57 +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 92DD94A460; Tue, 26 Jun 2018 10:18:54 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w5QAIqbo011034 for ; Tue, 26 Jun 2018 06:18:52 -0400 Received: by smtp.corp.redhat.com (Postfix) id 6BE452026988; Tue, 26 Jun 2018 10:18:52 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7CC912026D6A; Tue, 26 Jun 2018 10:18:51 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Tue, 26 Jun 2018 11:18:50 +0100 Message-Id: <20180626101850.9918-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [python PATCH] Add support for nwfilter binding objects / apis 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: , Content-Type: text/plain; charset="utf-8" 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 26 Jun 2018 10:19:00 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Signed-off-by: Daniel P. Berrang=C3=A9 --- generator.py | 33 ++++++++++++++++++++-- libvirt-override-api.xml | 6 ++++ libvirt-override-virConnect.py | 12 ++++++++ libvirt-override.c | 51 ++++++++++++++++++++++++++++++++++ typewrappers.c | 13 +++++++++ typewrappers.h | 10 +++++++ 6 files changed, 122 insertions(+), 3 deletions(-) diff --git a/generator.py b/generator.py index 353adab..ae0e45c 100755 --- a/generator.py +++ b/generator.py @@ -356,6 +356,10 @@ py_types =3D { 'virNWFilter *': ('O', "virNWFilter", "virNWFilterPtr", "virNWFilterP= tr"), 'const virNWFilter *': ('O', "virNWFilter", "virNWFilterPtr", "virNWF= ilterPtr"), =20 + 'virNWFilterBindingPtr': ('O', "virNWFilterBinding", "virNWFilterBind= ingPtr", "virNWFilterBindingPtr"), + 'virNWFilterBinding *': ('O', "virNWFilterBinding", "virNWFilterBindi= ngPtr", "virNWFilterBindingPtr"), + 'const virNWFilterBinding *': ('O', "virNWFilterBinding", "virNWFilte= rBindingPtr", "virNWFilterBindingPtr"), + 'virStreamPtr': ('O', "virStream", "virStreamPtr", "virStreamPtr"), 'virStream *': ('O', "virStream", "virStreamPtr", "virStreamPtr"), 'const virStream *': ('O', "virStream", "virStreamPtr", "virStreamPtr= "), @@ -539,6 +543,7 @@ skip_function =3D ( 'virConnectListAllInterfaces', # overridden in virConnect.py 'virConnectListAllNodeDevices', # overridden in virConnect.py 'virConnectListAllNWFilters', # overridden in virConnect.py + 'virConnectListAllNWFilterBindings', # overridden in virConnect.py 'virConnectListAllSecrets', # overridden in virConnect.py 'virConnectGetAllDomainStats', # overridden in virConnect.py 'virDomainListGetStats', # overriden in virConnect.py @@ -572,6 +577,7 @@ skip_function =3D ( "virNodeDeviceRef", "virSecretRef", "virNWFilterRef", + "virNWFilterBindingRef", "virStoragePoolRef", "virStorageVolRef", "virStreamRef", @@ -1010,6 +1016,8 @@ classes_type =3D { "virSecret *": ("._o", "virSecret(self, _obj=3D%s)", "virSecret"), "virNWFilterPtr": ("._o", "virNWFilter(self, _obj=3D%s)", "virNWFilter= "), "virNWFilter *": ("._o", "virNWFilter(self, _obj=3D%s)", "virNWFilter"= ), + "virNWFilterBindingPtr": ("._o", "virNWFilterBinding(self, _obj=3D%s)"= , "virNWFilterBinding"), + "virNWFilterBinding *": ("._o", "virNWFilterBinding(self, _obj=3D%s)",= "virNWFilterBinding"), "virStreamPtr": ("._o", "virStream(self, _obj=3D%s)", "virStream"), "virStream *": ("._o", "virStream(self, _obj=3D%s)", "virStream"), "virConnectPtr": ("._o", "virConnect(_obj=3D%s)", "virConnect"), @@ -1021,7 +1029,8 @@ classes_type =3D { primary_classes =3D ["virDomain", "virNetwork", "virInterface", "virStoragePool", "virStorageVol", "virConnect", "virNodeDevice", "virSecret", - "virNWFilter", "virStream", "virDomainSnapshot"] + "virNWFilter", "virNWFilterBinding", + "virStream", "virDomainSnapshot"] =20 classes_destructors =3D { "virDomain": "virDomainFree", @@ -1032,6 +1041,7 @@ classes_destructors =3D { "virNodeDevice" : "virNodeDeviceFree", "virSecret": "virSecretFree", "virNWFilter": "virNWFilterFree", + "virNWFilterBinding": "virNWFilterBindingFree", "virDomainSnapshot": "virDomainSnapshotFree", # We hand-craft __del__ for this one #"virStream": "virStreamFree", @@ -1058,6 +1068,8 @@ functions_noexcept =3D { 'virSecretGetUsageType': True, 'virSecretGetUsageID': True, 'virNWFilterGetName': True, + 'virNWFilterBindingGetFilterName': True, + 'virNWFilterBindingGetPortDev': True, } =20 function_classes =3D {} @@ -1113,6 +1125,15 @@ def nameFixup(name, classe, type, file): elif name[0:15] =3D=3D "virSecretLookup": func =3D name[3:] func =3D func[0:1].lower() + func[1:] + elif name[0:27] =3D=3D "virNWFilterBindingCreateXML": + func =3D name[3:] + func =3D func[0:1].lower() + func[1:] + elif name[0:24] =3D=3D "virNWFilterBindingDefine": + func =3D name[3:] + func =3D func[0:3].lower() + func[3:] + elif name[0:24] =3D=3D "virNWFilterBindingLookup": + func =3D name[3:] + func =3D func[0:3].lower() + func[3:] elif name[0:17] =3D=3D "virNWFilterDefine": func =3D name[3:] func =3D func[0:3].lower() + func[3:] @@ -1189,6 +1210,12 @@ def nameFixup(name, classe, type, file): elif name[0:9] =3D=3D 'virSecret': func =3D name[9:] func =3D func[0:1].lower() + func[1:] + elif name[0:21] =3D=3D 'virNWFilterBindingGet': + func =3D name[21:] + func =3D func[0:1].lower() + func[1:] + elif name[0:18] =3D=3D 'virNWFilterBinding': + func =3D name[18:] + func =3D func[0:1].lower() + func[1:] elif name[0:14] =3D=3D 'virNWFilterGet': func =3D name[14:] func =3D func[0:1].lower() + func[1:] @@ -1468,7 +1495,7 @@ def buildWrappers(module): classes.write("class %s(object):\n" % (classname)) if classname in [ "virDomain", "virNetwork", "virInterface", "= virStoragePool", "virStorageVol", "virNodeDevice", "virSecret= ","virStream", - "virNWFilter" ]: + "virNWFilter", "virNWFilterBinding" ]: classes.write(" def __init__(self, conn, _obj=3DNone):\= n") elif classname in [ 'virDomainSnapshot' ]: classes.write(" def __init__(self, dom, _obj=3DNone):\n= ") @@ -1476,7 +1503,7 @@ def buildWrappers(module): classes.write(" def __init__(self, _obj=3DNone):\n") if classname in [ "virDomain", "virNetwork", "virInterface", "virNodeDevice", "virSecret", "virStream", - "virNWFilter" ]: + "virNWFilter", "virNWFilterBinding" ]: classes.write(" self._conn =3D conn\n") elif classname in [ "virStorageVol", "virStoragePool" ]: classes.write(" self._conn =3D conn\n" + \ diff --git a/libvirt-override-api.xml b/libvirt-override-api.xml index ecbdac2..4e8d6c0 100644 --- a/libvirt-override-api.xml +++ b/libvirt-override-api.xml @@ -485,6 +485,12 @@ + + returns list of all network fitler bindings + + + + Try to lookup a network filter on the given hypervisor based o= n its UUID. diff --git a/libvirt-override-virConnect.py b/libvirt-override-virConnect.py index a24eae7..7fe08e0 100644 --- a/libvirt-override-virConnect.py +++ b/libvirt-override-virConnect.py @@ -531,6 +531,18 @@ =20 return retlist =20 + def listAllNWFilterBindings(self, flags=3D0): + """Returns a list of network filter binding objects""" + ret =3D libvirtmod.virConnectListAllNWFilterBindings(self._o, flag= s) + if ret is None: + raise libvirtError("virConnectListAllNWFilterBindings() failed= ", conn=3Dself) + + retlist =3D list() + for filter_ptr in ret: + retlist.append(virNWFilterBinding(self, _obj=3Dfilter_ptr)) + + return retlist + def listAllSecrets(self, flags=3D0): """Returns a list of secret objects""" ret =3D libvirtmod.virConnectListAllSecrets(self._o, flags) diff --git a/libvirt-override.c b/libvirt-override.c index 012de3f..e74c7dd 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -4446,6 +4446,54 @@ libvirt_virConnectListAllNWFilters(PyObject *self AT= TRIBUTE_UNUSED, } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */ =20 +#if LIBVIR_CHECK_VERSION(4, 5, 0) +static PyObject * +libvirt_virConnectListAllNWFilterBindings(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ + PyObject *pyobj_conn; + PyObject *py_retval =3D NULL; + virConnectPtr conn; + virNWFilterBindingPtr *bindings =3D NULL; + int c_retval =3D 0; + ssize_t i; + unsigned int flags; + + if (!PyArg_ParseTuple(args, (char *)"OI:virConnectListAllNWFilterBindi= ngs", + &pyobj_conn, &flags)) + return NULL; + conn =3D (virConnectPtr) PyvirConnect_Get(pyobj_conn); + + LIBVIRT_BEGIN_ALLOW_THREADS; + c_retval =3D virConnectListAllNWFilterBindings(conn, &bindings, flags); + LIBVIRT_END_ALLOW_THREADS; + + if (c_retval < 0) + return VIR_PY_NONE; + + if (!(py_retval =3D PyList_New(c_retval))) + goto cleanup; + + for (i =3D 0; i < c_retval; i++) { + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virNWFilterBindingPtrWrap(bindings[i]= ), error); + /* python steals the pointer */ + bindings[i] =3D NULL; + } + + cleanup: + for (i =3D 0; i < c_retval; i++) + if (bindings[i]) + virNWFilterBindingFree(bindings[i]); + VIR_FREE(bindings); + return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; +} +#endif /* LIBVIR_CHECK_VERSION(4, 5, 0) */ + static PyObject * libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) @@ -9971,6 +10019,9 @@ static PyMethodDef libvirtMethods[] =3D { #if LIBVIR_CHECK_VERSION(0, 10, 2) {(char *) "virConnectListAllNWFilters", libvirt_virConnectListAllNWFil= ters, METH_VARARGS, NULL}, #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */ +#if LIBVIR_CHECK_VERSION(4, 5, 0) + {(char *) "virConnectListAllNWFilterBindings", libvirt_virConnectListA= llNWFilterBindings, METH_VARARGS, NULL}, +#endif /* LIBVIR_CHECK_VERSION(4, 5, 0) */ {(char *) "virConnectListInterfaces", libvirt_virConnectListInterfaces= , METH_VARARGS, NULL}, {(char *) "virConnectListDefinedInterfaces", libvirt_virConnectListDef= inedInterfaces, METH_VARARGS, NULL}, #if LIBVIR_CHECK_VERSION(0, 10, 2) diff --git a/typewrappers.c b/typewrappers.c index 99a8fb8..9ba14b4 100644 --- a/typewrappers.c +++ b/typewrappers.c @@ -542,6 +542,19 @@ libvirt_virNWFilterPtrWrap(virNWFilterPtr node) return ret; } =20 +PyObject * +libvirt_virNWFilterBindingPtrWrap(virNWFilterBindingPtr node) +{ + PyObject *ret; + + if (node =3D=3D NULL) { + return VIR_PY_NONE; + } + + ret =3D libvirt_buildPyObject(node, "virNWFilterBindingPtr", NULL); + return ret; +} + PyObject * libvirt_virStreamPtrWrap(virStreamPtr node) { diff --git a/typewrappers.h b/typewrappers.h index ed1e4a3..1570c6a 100644 --- a/typewrappers.h +++ b/typewrappers.h @@ -106,6 +106,15 @@ typedef struct { } PyvirNWFilter_Object; =20 =20 +#define PyvirNWFilterBinding_Get(v) (((v) =3D=3D Py_None) ? NULL : \ + (((PyvirNWFilterBinding_Object *)(v))->obj)) + +typedef struct { + PyObject_HEAD + virNWFilterBindingPtr obj; +} PyvirNWFilterBinding_Object; + + #define PyvirStream_Get(v) (((v) =3D=3D Py_None) ? NULL : \ (((PyvirStream_Object *)(v))->obj)) =20 @@ -189,6 +198,7 @@ PyObject * libvirt_virVoidPtrWrap(void* node); PyObject * libvirt_virNodeDevicePtrWrap(virNodeDevicePtr node); PyObject * libvirt_virSecretPtrWrap(virSecretPtr node); PyObject * libvirt_virNWFilterPtrWrap(virNWFilterPtr node); +PyObject * libvirt_virNWFilterBindingPtrWrap(virNWFilterBindingPtr node); PyObject * libvirt_virStreamPtrWrap(virStreamPtr node); PyObject * libvirt_virDomainSnapshotPtrWrap(virDomainSnapshotPtr node); =20 --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list