From nobody Sun May 5 03:45:23 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=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1560856209; cv=none; d=zoho.com; s=zohoarc; b=CA/2jTkBgLcgVJbFXUL/8dfnDUYI8mVaapCBpqsrm+8MQD6sIbpWMwMDnLft5BaFMVS74JVxbL7rb9SXXuj+YfisDuWlNaV1yKMnIL8eqIoPs/YzVaWpn9CceyPSG+EgDJGC0gHiJAiNMxwaUZIo0/aAEzWQUuwoHl/7ZBVQLgY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1560856209; h=Content-Type:Content-Transfer-Encoding:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To:ARC-Authentication-Results; bh=ZaOBNRYUFXqROO4XDXJIE14YtTrWM/RV9XT5fsHKbLM=; b=lBti8HYu0lLv0w6Gf6PUCpany6tvqFcOxTTLzYoG4aUQWG84tmWgeAOHozt5iROT70JQKdOBcLYtCCLQa+KecfchI363BbVHEWk7XyG8XX+lH9VVRais4fvia2GEDSeXvFrBNvNT6d8gjVDj44aM5tvM5PocW5kj3prMGqJuvcs= ARC-Authentication-Results: i=1; mx.zoho.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 header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 15608562098211009.7734149439647; Tue, 18 Jun 2019 04:10:09 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F3E5C6147C; Tue, 18 Jun 2019 11:09:37 +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 7485360FD5; Tue, 18 Jun 2019 11:09:33 +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 A08DF4EBC4; Tue, 18 Jun 2019 11:09:27 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x5IB9QDu021255 for ; Tue, 18 Jun 2019 07:09:26 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5C55960922; Tue, 18 Jun 2019 11:09:26 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-112-51.ams2.redhat.com [10.36.112.51]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5E777183F7; Tue, 18 Jun 2019 11:09:22 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Tue, 18 Jun 2019 12:09:21 +0100 Message-Id: <20190618110921.9532-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [python PATCH] Add support for virNetworkPort object & 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 18 Jun 2019 11:10:00 +0000 (UTC) Define the various rules in the generator to wire up methods into the virNetwork class and create the new virNetworkPort class. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: J=C3=A1n Tomko Reviewed-by: Pavel Hrdina --- generator.py | 25 +++++++++- libvirt-override-api.xml | 13 ++++++ libvirt-override.c | 99 ++++++++++++++++++++++++++++++++++++++++ typewrappers.c | 13 ++++++ typewrappers.h | 10 ++++ 5 files changed, 158 insertions(+), 2 deletions(-) diff --git a/generator.py b/generator.py index ffa3ce5..ab5144d 100755 --- a/generator.py +++ b/generator.py @@ -328,6 +328,10 @@ py_types =3D { 'virNetwork *': ('O', "virNetwork", "virNetworkPtr", "virNetworkPtr"), 'const virNetwork *': ('O', "virNetwork", "virNetworkPtr", "virNetwor= kPtr"), =20 + 'virNetworkPortPtr': ('O', "virNetworkPort", "virNetworkPortPtr", "vi= rNetworkPortPtr"), + 'virNetworkPort *': ('O', "virNetworkPort", "virNetworkPortPtr", "vir= NetworkPortPtr"), + 'const virNetworkPort *': ('O', "virNetworkPort", "virNetworkPortPtr"= , "virNetworkPortPtr"), + 'virInterfacePtr': ('O', "virInterface", "virInterfacePtr", "virInter= facePtr"), 'virInterface *': ('O', "virInterface", "virInterfacePtr", "virInterf= acePtr"), 'const virInterface *': ('O', "virInterface", "virInterfacePtr", "vir= InterfacePtr"), @@ -496,6 +500,8 @@ skip_impl =3D ( 'virConnectBaselineHypervisorCPU', 'virDomainGetLaunchSecurityInfo', 'virNodeGetSEVInfo', + 'virNetworkPortGetParameters', + 'virNetworkPortSetParameters', ) =20 lxc_skip_impl =3D ( @@ -541,6 +547,7 @@ skip_function =3D ( 'virConnectListAllStoragePools', # overridden in virConnect.py 'virStoragePoolListAllVolumes', # overridden in virStoragePool.py 'virConnectListAllNetworks', # overridden in virConnect.py + 'virNetworkListAllPorts', # overridden in virConnect.py 'virConnectListAllInterfaces', # overridden in virConnect.py 'virConnectListAllNodeDevices', # overridden in virConnect.py 'virConnectListAllNWFilters', # overridden in virConnect.py @@ -575,6 +582,7 @@ skip_function =3D ( "virDomainRef", "virInterfaceRef", "virNetworkRef", + "virNetworkPortRef", "virNodeDeviceRef", "virSecretRef", "virNWFilterRef", @@ -590,6 +598,7 @@ skip_function =3D ( "virDomainGetConnect", "virInterfaceGetConnect", "virNetworkGetConnect", + "virNetworkPortGetNetwork", "virSecretGetConnect", "virNWFilterGetConnect", "virStoragePoolGetConnect", @@ -1005,6 +1014,8 @@ classes_type =3D { "virDomain *": ("._o", "virDomain(self, _obj=3D%s)", "virDomain"), "virNetworkPtr": ("._o", "virNetwork(self, _obj=3D%s)", "virNetwork"), "virNetwork *": ("._o", "virNetwork(self, _obj=3D%s)", "virNetwork"), + "virNetworkPortPtr": ("._o", "virNetworkPort(self, _obj=3D%s)", "virNe= tworkPort"), + "virNetworkPort *": ("._o", "virNetworkPort(self, _obj=3D%s)", "virNet= workPort"), "virInterfacePtr": ("._o", "virInterface(self, _obj=3D%s)", "virInterf= ace"), "virInterface *": ("._o", "virInterface(self, _obj=3D%s)", "virInterfa= ce"), "virStoragePoolPtr": ("._o", "virStoragePool(self, _obj=3D%s)", "virSt= oragePool"), @@ -1027,8 +1038,8 @@ classes_type =3D { "virDomainSnapshot *": ("._o", "virDomainSnapshot(self, _obj=3D%s)", "= virDomainSnapshot"), } =20 -primary_classes =3D ["virDomain", "virNetwork", "virInterface", - "virStoragePool", "virStorageVol", +primary_classes =3D ["virDomain", "virNetwork", "virNetworkPort", + "virInterface", "virStoragePool", "virStorageVol", "virConnect", "virNodeDevice", "virSecret", "virNWFilter", "virNWFilterBinding", "virStream", "virDomainSnapshot"] @@ -1036,6 +1047,7 @@ primary_classes =3D ["virDomain", "virNetwork", "virI= nterface", classes_destructors =3D { "virDomain": "virDomainFree", "virNetwork": "virNetworkFree", + "virNetworkPort": "virNetworkPortFree", "virInterface": "virInterfaceFree", "virStoragePool": "virStoragePoolFree", "virStorageVol": "virStorageVolFree", @@ -1111,6 +1123,12 @@ def nameFixup(name, classe, type, file): elif name[0:16] =3D=3D "virNetworkLookup": func =3D name[3:] func =3D func[0:1].lower() + func[1:] + elif name[0:23] =3D=3D "virNetworkPortCreateXML": + func =3D name[10:] + func =3D func[0:1].lower() + func[1:] + elif name[0:20] =3D=3D "virNetworkPortLookup": + func =3D name[10:] + func =3D func[0:1].lower() + func[1:] elif name[0:18] =3D=3D "virInterfaceDefine": func =3D name[3:] func =3D func[0:1].lower() + func[1:] @@ -1199,6 +1217,9 @@ def nameFixup(name, classe, type, file): func =3D name[13:] func =3D func[0:1].lower() + func[1:] func =3D func.replace("dHCP", "DHCP") + elif name[0:14] =3D=3D "virNetworkPort": + func =3D name[14:] + func =3D func[0:1].lower() + func[1:] elif name[0:10] =3D=3D "virNetwork": func =3D name[10:] func =3D func[0:1].lower() + func[1:] diff --git a/libvirt-override-api.xml b/libvirt-override-api.xml index 53b15c5..6e29c1e 100644 --- a/libvirt-override-api.xml +++ b/libvirt-override-api.xml @@ -764,5 +764,18 @@ + + Change the port tunables + + + + + + + Get the port parameters + + + + diff --git a/libvirt-override.c b/libvirt-override.c index c5e2908..a940730 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -9945,6 +9945,101 @@ libvirt_virNodeGetSEVInfo(PyObject *self ATTRIBUTE_= UNUSED, } #endif /* LIBVIR_CHECK_VERSION(4, 5, 0) */ =20 +#if LIBVIR_CHECK_VERSION(5, 5, 0) +static PyObject * +libvirt_virNetworkPortSetParameters(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ + virNetworkPortPtr port; + PyObject *pyobj_port, *info; + PyObject *ret =3D NULL; + int i_retval; + int nparams =3D 0; + Py_ssize_t size =3D 0; + unsigned int flags; + virTypedParameterPtr params =3D NULL, new_params =3D NULL; + + if (!PyArg_ParseTuple(args, + (char *)"OOI:virNetworkPortSetParameters", + &pyobj_port, &info, &flags)) + return NULL; + port =3D (virNetworkPortPtr) PyvirNetworkPort_Get(pyobj_port); + + if ((size =3D PyDict_Size(info)) < 0) + return NULL; + + if (size =3D=3D 0) { + PyErr_Format(PyExc_LookupError, + "Need non-empty dictionary to set attributes"); + return NULL; + } + + LIBVIRT_BEGIN_ALLOW_THREADS; + i_retval =3D virNetworkPortGetParameters(port, ¶ms, &nparams, flag= s); + LIBVIRT_END_ALLOW_THREADS; + + if (i_retval < 0) + return VIR_PY_INT_FAIL; + + if (nparams =3D=3D 0) { + PyErr_Format(PyExc_LookupError, + "Port has no settable attributes"); + return NULL; + } + + new_params =3D setPyVirTypedParameter(info, params, nparams); + if (!new_params) + goto cleanup; + + LIBVIRT_BEGIN_ALLOW_THREADS; + i_retval =3D virNetworkPortSetParameters(port, new_params, size, flags= ); + LIBVIRT_END_ALLOW_THREADS; + + if (i_retval < 0) { + ret =3D VIR_PY_INT_FAIL; + goto cleanup; + } + + ret =3D VIR_PY_INT_SUCCESS; + + cleanup: + virTypedParamsFree(params, nparams); + virTypedParamsFree(new_params, size); + return ret; +} + +static PyObject * +libvirt_virNetworkPortGetParameters(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ + PyObject *pyobj_port; + virNetworkPortPtr port; + virTypedParameterPtr params =3D NULL; + int nparams =3D 0; + PyObject *dict =3D NULL; + unsigned int flags; + int rc; + + if (!PyArg_ParseTuple(args, (char *) "OI:virNetworkPortGetParameters", + &pyobj_port, &flags)) + return NULL; + port =3D (virNetworkPortPtr) PyvirNetworkPort_Get(pyobj_port); + + LIBVIRT_BEGIN_ALLOW_THREADS; + rc =3D virNetworkPortGetParameters(port, ¶ms, &nparams, flags); + LIBVIRT_END_ALLOW_THREADS; + + if (rc < 0) + return VIR_PY_NONE; + + if (!(dict =3D getPyVirTypedParameter(params, nparams))) + goto cleanup; + + cleanup: + virTypedParamsFree(params, nparams); + return dict; +} +#endif /* LIBVIR_CHECK_VERSION(5, 5, 0) */ =20 /************************************************************************ * * @@ -10192,6 +10287,10 @@ static PyMethodDef libvirtMethods[] =3D { {(char *) "virDomainGetLaunchSecurityInfo", libvirt_virDomainGetLaunch= SecurityInfo, METH_VARARGS, NULL}, {(char *) "virNodeGetSEVInfo", libvirt_virNodeGetSEVInfo, METH_VARARGS= , NULL}, #endif /* LIBVIR_CHECK_VERSION(4, 5, 0) */ +#if LIBVIR_CHECK_VERSION(4, 5, 0) + {(char *) "virNetworkPortSetParameters", libvirt_virNetworkPortSetPara= meters, METH_VARARGS, NULL}, + {(char *) "virNetworkPortGetParameters", libvirt_virNetworkPortGetPara= meters, METH_VARARGS, NULL}, +#endif /* LIBVIR_CHECK_VERSION(5, 5, 0) */ {NULL, NULL, 0, NULL} }; =20 diff --git a/typewrappers.c b/typewrappers.c index 9ba14b4..5710744 100644 --- a/typewrappers.c +++ b/typewrappers.c @@ -451,6 +451,19 @@ libvirt_virNetworkPtrWrap(virNetworkPtr node) return ret; } =20 +PyObject * +libvirt_virNetworkPortPtrWrap(virNetworkPortPtr node) +{ + PyObject *ret; + + if (node =3D=3D NULL) { + return VIR_PY_NONE; + } + + ret =3D libvirt_buildPyObject(node, "virNetworkPortPtr", NULL); + return ret; +} + PyObject * libvirt_virInterfacePtrWrap(virInterfacePtr node) { diff --git a/typewrappers.h b/typewrappers.h index 4423774..e4983b2 100644 --- a/typewrappers.h +++ b/typewrappers.h @@ -58,6 +58,15 @@ typedef struct { } PyvirNetwork_Object; =20 =20 +#define PyvirNetworkPort_Get(v) (((v) =3D=3D Py_None) ? NULL : \ + (((PyvirNetworkPort_Object *)(v))->obj)) + +typedef struct { + PyObject_HEAD + virNetworkPortPtr obj; +} PyvirNetworkPort_Object; + + #define PyvirInterface_Get(v) (((v) =3D=3D Py_None) ? NULL : \ (((PyvirInterface_Object *)(v))->obj)) =20 @@ -192,6 +201,7 @@ int libvirt_charPtrSizeUnwrap(PyObject *obj, char **str= , Py_ssize_t *size); PyObject * libvirt_virConnectPtrWrap(virConnectPtr node); PyObject * libvirt_virDomainPtrWrap(virDomainPtr node); PyObject * libvirt_virNetworkPtrWrap(virNetworkPtr node); +PyObject * libvirt_virNetworkPortPtrWrap(virNetworkPortPtr node); PyObject * libvirt_virInterfacePtrWrap(virInterfacePtr node); PyObject * libvirt_virStoragePoolPtrWrap(virStoragePoolPtr node); PyObject * libvirt_virStorageVolPtrWrap(virStorageVolPtr node); --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list