From nobody Sun May 19 00:17:18 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=1560872680; cv=none; d=zoho.com; s=zohoarc; b=eS6Y7fSmzVfiJA0QHrzuvKs2ZtVgtw52L+ToCM0ngx++2Ny3YdtDgj4mZ21n4u4fxCZSAQAmuUkdifRpmldQo0ariqdaCBLwf9XYtYbrZ+APS3Klq8CO0Tj1h6ypXtKG4wTe6c+WbQLFmrK5uzT57MHjtnJNzZBZrQWJ3EMMdkM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1560872680; 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=HJiC3lLQ0JN8ZzwMX1QYOManZ1e7LQx30apWYEx35Os=; b=bf75vPYcendhlgxpCaH6iAJp4Yg48HQVTHpvNH9tSKdHjoSGkHqKHXqbdTA+p1XZp/MPIW+pdcdtEnkpEVbrGum3vLgEoxy0TyZjZw+MtrrSgH2eAzq0XiXdA2qn+5+e6Gv8dMDQFJZ1Pw2/7rzfz+gdDl2STO1tF6/VnewVBxs= 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 1560872680098713.6984247941765; Tue, 18 Jun 2019 08:44:40 -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 4648CA457A; Tue, 18 Jun 2019 15:44:02 +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 AB9B25F58B; Tue, 18 Jun 2019 15:43:55 +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 A46261806B19; Tue, 18 Jun 2019 15:43:43 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x5IFheKZ016374 for ; Tue, 18 Jun 2019 11:43:40 -0400 Received: by smtp.corp.redhat.com (Postfix) id EB1417D510; Tue, 18 Jun 2019 15:43:40 +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 671BC7D57B; Tue, 18 Jun 2019 15:43:36 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Tue, 18 Jun 2019 16:43:35 +0100 Message-Id: <20190618154335.31280-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [go PATCH] Add support for virNetworkPort object and 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.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.38]); Tue, 18 Jun 2019 15:44:28 +0000 (UTC) Signed-off-by: Daniel P. Berrang=C3=A9 --- network.go | 80 ++++++++++++++ network_port.go | 233 ++++++++++++++++++++++++++++++++++++++++ network_port_compat.h | 67 ++++++++++++ network_port_wrapper.go | 197 +++++++++++++++++++++++++++++++++ network_port_wrapper.h | 79 ++++++++++++++ network_wrapper.go | 73 +++++++++++++ network_wrapper.h | 23 ++++ 7 files changed, 752 insertions(+) create mode 100644 network_port.go create mode 100644 network_port_compat.h create mode 100644 network_port_wrapper.go create mode 100644 network_port_wrapper.h diff --git a/network.go b/network.go index 99954aa..a0bc361 100644 --- a/network.go +++ b/network.go @@ -34,6 +34,7 @@ package libvirt import "C" =20 import ( + "fmt" "reflect" "time" "unsafe" @@ -333,3 +334,82 @@ func (n *Network) GetDHCPLeases() ([]NetworkDHCPLease,= error) { C.free(unsafe.Pointer(cLeases)) return leases, nil } + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkPortLookupByUUIDString +func (n *Network) LookupNetworkPortByUUIDString(uuid string) (*NetworkPort= , error) { + if C.LIBVIR_VERSION_NUMBER < 5005000 { + return nil, makeNotImplementedError("virNetworkPortLookupByUUIDString") + } + + cUuid :=3D C.CString(uuid) + defer C.free(unsafe.Pointer(cUuid)) + var err C.virError + ptr :=3D C.virNetworkPortLookupByUUIDStringWrapper(n.ptr, cUuid, &err) + if ptr =3D=3D nil { + return nil, makeError(&err) + } + return &NetworkPort{ptr: ptr}, nil +} + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkPortLookupByUUID +func (n *Network) LookupNetworkPortByUUID(uuid []byte) (*NetworkPort, erro= r) { + if C.LIBVIR_VERSION_NUMBER < 5005000 { + return nil, makeNotImplementedError("virNetworkPortLookupByUUID") + } + + if len(uuid) !=3D C.VIR_UUID_BUFLEN { + return nil, fmt.Errorf("UUID must be exactly %d bytes in size", + int(C.VIR_UUID_BUFLEN)) + } + cUuid :=3D make([]C.uchar, C.VIR_UUID_BUFLEN) + for i :=3D 0; i < C.VIR_UUID_BUFLEN; i++ { + cUuid[i] =3D C.uchar(uuid[i]) + } + var err C.virError + ptr :=3D C.virNetworkPortLookupByUUIDWrapper(n.ptr, &cUuid[0], &err) + if ptr =3D=3D nil { + return nil, makeError(&err) + } + return &NetworkPort{ptr: ptr}, nil +} + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkPortCreateXML +func (n *Network) PortCreateXML(xmlConfig string, flags uint) (*NetworkPor= t, error) { + if C.LIBVIR_VERSION_NUMBER < 5005000 { + return nil, makeNotImplementedError("virNetworkPortCreateXML") + } + cXml :=3D C.CString(string(xmlConfig)) + defer C.free(unsafe.Pointer(cXml)) + var err C.virError + ptr :=3D C.virNetworkPortCreateXMLWrapper(n.ptr, cXml, C.uint(flags), &er= r) + if ptr =3D=3D nil { + return nil, makeError(&err) + } + return &NetworkPort{ptr: ptr}, nil +} + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkListAllPorts +func (n *Network) ListAllPorts(flags uint) ([]NetworkPort, error) { + if C.LIBVIR_VERSION_NUMBER < 5005000 { + return []NetworkPort{}, makeNotImplementedError("virNetworkListAllPorts") + } + + var cList *C.virNetworkPortPtr + var err C.virError + numPorts :=3D C.virNetworkListAllPortsWrapper(n.ptr, (**C.virNetworkPortP= tr)(&cList), C.uint(flags), &err) + if numPorts =3D=3D -1 { + return []NetworkPort{}, makeError(&err) + } + hdr :=3D reflect.SliceHeader{ + Data: uintptr(unsafe.Pointer(cList)), + Len: int(numPorts), + Cap: int(numPorts), + } + var ports []NetworkPort + slice :=3D *(*[]C.virNetworkPortPtr)(unsafe.Pointer(&hdr)) + for _, ptr :=3D range slice { + ports =3D append(ports, NetworkPort{ptr}) + } + C.free(unsafe.Pointer(cList)) + return ports, nil +} diff --git a/network_port.go b/network_port.go new file mode 100644 index 0000000..e701c2d --- /dev/null +++ b/network_port.go @@ -0,0 +1,233 @@ +/* + * This file is part of the libvirt-go project + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL= THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + * + * Copyright (C) 2019 Red Hat, Inc. + * + */ + +package libvirt + +/* +#cgo pkg-config: libvirt +#include +#include "network_port_wrapper.h" +*/ +import "C" + +import ( + "unsafe" +) + +type NetworkPortCreateFlags int + +const ( + NETWORK_PORT_CREATE_RECLAIM =3D NetworkPortCreateFlags(C.VIR_NETWORK_PORT= _CREATE_RECLAIM) +) + +type NetworkPort struct { + ptr C.virNetworkPortPtr +} + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkPortFree +func (n *NetworkPort) Free() error { + if C.LIBVIR_VERSION_NUMBER < 5005000 { + return makeNotImplementedError("virNetworkPortFree") + } + + var err C.virError + ret :=3D C.virNetworkPortFreeWrapper(n.ptr, &err) + if ret =3D=3D -1 { + return makeError(&err) + } + return nil +} + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkPortRef +func (c *NetworkPort) Ref() error { + if C.LIBVIR_VERSION_NUMBER < 5005000 { + return makeNotImplementedError("virNetworkPortRef") + } + + var err C.virError + ret :=3D C.virNetworkPortRefWrapper(c.ptr, &err) + if ret =3D=3D -1 { + return makeError(&err) + } + return nil +} + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkPortGetUUID +func (n *NetworkPort) GetUUID() ([]byte, error) { + if C.LIBVIR_VERSION_NUMBER < 5005000 { + return []byte{}, makeNotImplementedError("virNetworkPortGetUUID") + } + + var cUuid [C.VIR_UUID_BUFLEN](byte) + cuidPtr :=3D unsafe.Pointer(&cUuid) + var err C.virError + result :=3D C.virNetworkPortGetUUIDWrapper(n.ptr, (*C.uchar)(cuidPtr), &e= rr) + if result !=3D 0 { + return []byte{}, makeError(&err) + } + return C.GoBytes(cuidPtr, C.VIR_UUID_BUFLEN), nil +} + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkPortGetUUIDString +func (n *NetworkPort) GetUUIDString() (string, error) { + if C.LIBVIR_VERSION_NUMBER < 5005000 { + return "", makeNotImplementedError("virNetworkPortGetUUIDString") + } + + var cUuid [C.VIR_UUID_STRING_BUFLEN](C.char) + cuidPtr :=3D unsafe.Pointer(&cUuid) + var err C.virError + result :=3D C.virNetworkPortGetUUIDStringWrapper(n.ptr, (*C.char)(cuidPtr= ), &err) + if result !=3D 0 { + return "", makeError(&err) + } + return C.GoString((*C.char)(cuidPtr)), nil +} + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkPortDelete +func (n *NetworkPort) Delete(flags uint) error { + if C.LIBVIR_VERSION_NUMBER < 5005000 { + return makeNotImplementedError("virNetworkPortDelete") + } + + var err C.virError + result :=3D C.virNetworkPortDeleteWrapper(n.ptr, C.uint(flags), &err) + if result =3D=3D -1 { + return makeError(&err) + } + return nil +} + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkPortGetXMLDesc +func (d *NetworkPort) GetXMLDesc(flags uint) (string, error) { + var err C.virError + result :=3D C.virNetworkPortGetXMLDescWrapper(d.ptr, C.uint(flags), &err) + if result =3D=3D nil { + return "", makeError(&err) + } + xml :=3D C.GoString(result) + C.free(unsafe.Pointer(result)) + return xml, nil +} + +type NetworkPortParameters struct { + BandwidthInAverageSet bool + BandwidthInAverage uint + BandwidthInPeakSet bool + BandwidthInPeak uint + BandwidthInBurstSet bool + BandwidthInBurst uint + BandwidthInFloorSet bool + BandwidthInFloor uint + BandwidthOutAverageSet bool + BandwidthOutAverage uint + BandwidthOutPeakSet bool + BandwidthOutPeak uint + BandwidthOutBurstSet bool + BandwidthOutBurst uint +} + +func getNetworkPortParametersFieldInfo(params *NetworkPortParameters) map[= string]typedParamsFieldInfo { + return map[string]typedParamsFieldInfo{ + C.VIR_NETWORK_PORT_BANDWIDTH_IN_AVERAGE: typedParamsFieldInfo{ + set: ¶ms.BandwidthInAverageSet, + ui: ¶ms.BandwidthInAverage, + }, + C.VIR_NETWORK_PORT_BANDWIDTH_IN_PEAK: typedParamsFieldInfo{ + set: ¶ms.BandwidthInPeakSet, + ui: ¶ms.BandwidthInPeak, + }, + C.VIR_NETWORK_PORT_BANDWIDTH_IN_BURST: typedParamsFieldInfo{ + set: ¶ms.BandwidthInBurstSet, + ui: ¶ms.BandwidthInBurst, + }, + C.VIR_NETWORK_PORT_BANDWIDTH_IN_FLOOR: typedParamsFieldInfo{ + set: ¶ms.BandwidthInFloorSet, + ui: ¶ms.BandwidthInFloor, + }, + C.VIR_NETWORK_PORT_BANDWIDTH_OUT_AVERAGE: typedParamsFieldInfo{ + set: ¶ms.BandwidthOutAverageSet, + ui: ¶ms.BandwidthOutAverage, + }, + C.VIR_NETWORK_PORT_BANDWIDTH_OUT_PEAK: typedParamsFieldInfo{ + set: ¶ms.BandwidthOutPeakSet, + ui: ¶ms.BandwidthOutPeak, + }, + C.VIR_NETWORK_PORT_BANDWIDTH_OUT_BURST: typedParamsFieldInfo{ + set: ¶ms.BandwidthOutBurstSet, + ui: ¶ms.BandwidthOutBurst, + }, + } +} + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkPortGetParameters +func (d *NetworkPort) GetParameters(flags uint) (*NetworkPortParameters, e= rror) { + if C.LIBVIR_VERSION_NUMBER < 5005000 { + return nil, makeNotImplementedError("virNetworkPortGetParameters") + } + + params :=3D &NetworkPortParameters{} + info :=3D getNetworkPortParametersFieldInfo(params) + + var cparams C.virTypedParameterPtr + var cnparams C.int + var err C.virError + ret :=3D C.virNetworkPortGetParametersWrapper(d.ptr, &cparams, &cnparams,= C.uint(flags), &err) + if ret =3D=3D -1 { + return nil, makeError(&err) + } + + defer C.virTypedParamsFree(cparams, cnparams) + + _, gerr :=3D typedParamsUnpack(cparams, cnparams, info) + if gerr !=3D nil { + return nil, gerr + } + + return params, nil +} + +// See also https://libvirt.org/html/libvirt-libvirt-network.html#virNetwo= rkPortSetParameters +func (d *NetworkPort) SetParameters(params *NetworkPortParameters, flags u= int) error { + if C.LIBVIR_VERSION_NUMBER < 5005000 { + return makeNotImplementedError("virNetworkPortSetParameters") + } + + info :=3D getNetworkPortParametersFieldInfo(params) + + cparams, cnparams, gerr :=3D typedParamsPackNew(info) + if gerr !=3D nil { + return gerr + } + defer C.virTypedParamsFree(cparams, cnparams) + + var err C.virError + ret :=3D C.virNetworkPortSetParametersWrapper(d.ptr, cparams, cnparams, C= .uint(flags), &err) + if ret =3D=3D -1 { + return makeError(&err) + } + + return nil +} diff --git a/network_port_compat.h b/network_port_compat.h new file mode 100644 index 0000000..77f541b --- /dev/null +++ b/network_port_compat.h @@ -0,0 +1,67 @@ +/* + * This file is part of the libvirt-go project + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL= THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + * + * Copyright (C) 2019 Red Hat, Inc. + * + */ + +#ifndef LIBVIRT_GO_NETWORK_PORT_COMPAT_H__ +#define LIBVIRT_GO_NETWORK_PORT_COMPAT_H__ + +/* 5.5.0 */ + +#if LIBVIR_VERSION_NUMBER < 5005000 +typedef struct _virNetworkPort *virNetworkPortPtr; +#endif + +#ifndef VIR_NETWORK_PORT_CREATE_RECLAIM +#define VIR_NETWORK_PORT_CREATE_RECLAIM (1 << 0) +#endif + +#ifndef VIR_NETWORK_PORT_BANDWIDTH_IN_AVERAGE +#define VIR_NETWORK_PORT_BANDWIDTH_IN_AVERAGE "inbound.average" +#endif + +#ifndef VIR_NETWORK_PORT_BANDWIDTH_IN_PEAK +#define VIR_NETWORK_PORT_BANDWIDTH_IN_PEAK "inbound.peak" +#endif + +#ifndef VIR_NETWORK_PORT_BANDWIDTH_IN_BURST +#define VIR_NETWORK_PORT_BANDWIDTH_IN_BURST "inbound.burst" +#endif + +#ifndef VIR_NETWORK_PORT_BANDWIDTH_IN_FLOOR +#define VIR_NETWORK_PORT_BANDWIDTH_IN_FLOOR "inbound.floor" +#endif + +#ifndef VIR_NETWORK_PORT_BANDWIDTH_OUT_AVERAGE +#define VIR_NETWORK_PORT_BANDWIDTH_OUT_AVERAGE "outbound.average" +#endif + +#ifndef VIR_NETWORK_PORT_BANDWIDTH_OUT_PEAK +#define VIR_NETWORK_PORT_BANDWIDTH_OUT_PEAK "outbound.peak" +#endif + +#ifndef VIR_NETWORK_PORT_BANDWIDTH_OUT_BURST +#define VIR_NETWORK_PORT_BANDWIDTH_OUT_BURST "outbound.burst" +#endif + +#endif /* LIBVIRT_GO_NETWORK_PORT_COMPAT_H__ */ diff --git a/network_port_wrapper.go b/network_port_wrapper.go new file mode 100644 index 0000000..2b69167 --- /dev/null +++ b/network_port_wrapper.go @@ -0,0 +1,197 @@ +/* + * This file is part of the libvirt-go project + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL= THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + * + * Copyright (C) 2019 Red Hat, Inc. + * + */ + +package libvirt + +/* +#cgo pkg-config: libvirt +#include +#include "network_port_wrapper.h" + +virNetworkPtr +virNetworkPortGetNetworkWrapper(virNetworkPortPtr port, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + virNetworkPtr ret; + ret =3D virNetworkPortGetNetwork(port); + if (!ret) { + virCopyLastError(err); + } + return ret; +#endif +} + + +char * +virNetworkPortGetXMLDescWrapper(virNetworkPortPtr port, + unsigned int flags, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + char *ret; + ret =3D virNetworkPortGetXMLDesc(port, flags); + if (!ret) { + virCopyLastError(err); + } + return ret; +#endif +} + + +int +virNetworkPortGetUUIDWrapper(virNetworkPortPtr port, + unsigned char *uuid, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + int ret; + ret =3D virNetworkPortGetUUID(port, uuid); + if (ret < 0) { + virCopyLastError(err); + } + return ret; +#endif +} + + +int +virNetworkPortGetUUIDStringWrapper(virNetworkPortPtr port, + char *buf, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + int ret; + ret =3D virNetworkPortGetUUIDString(port, buf); + if (ret < 0) { + virCopyLastError(err); + } + return ret; +#endif +} + + +int +virNetworkPortSetParametersWrapper(virNetworkPortPtr port, + virTypedParameterPtr params, + int nparams, + unsigned int flags, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + int ret; + ret =3D virNetworkPortSetParameters(port, params, nparams, flags); + if (ret < 0) { + virCopyLastError(err); + } + return ret; +#endif +} + + +int +virNetworkPortGetParametersWrapper(virNetworkPortPtr port, + virTypedParameterPtr *params, + int *nparams, + unsigned int flags, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + int ret; + ret =3D virNetworkPortGetParameters(port, params, nparams, flags); + if (ret < 0) { + virCopyLastError(err); + } + return ret; +#endif +} + + +int +virNetworkPortDeleteWrapper(virNetworkPortPtr port, + unsigned int flags, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + int ret; + ret =3D virNetworkPortDelete(port, flags); + if (ret < 0) { + virCopyLastError(err); + } + return ret; +#endif +} + + +int +virNetworkPortFreeWrapper(virNetworkPortPtr port, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + int ret; + ret =3D virNetworkPortFree(port); + if (ret < 0) { + virCopyLastError(err); + } + return ret; +#endif +} + + +int +virNetworkPortRefWrapper(virNetworkPortPtr port, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + int ret; + ret =3D virNetworkPortRef(port); + if (ret < 0) { + virCopyLastError(err); + } + return ret; +#endif +} + + +*/ +import "C" diff --git a/network_port_wrapper.h b/network_port_wrapper.h new file mode 100644 index 0000000..054d459 --- /dev/null +++ b/network_port_wrapper.h @@ -0,0 +1,79 @@ +/* + * This file is part of the libvirt-go project + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL= THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + * + * Copyright (C) 2019 Red Hat, Inc. + * + */ + +#ifndef LIBVIRT_GO_NETWORK_PORT_WRAPPER_H__ +#define LIBVIRT_GO_NETWORK_PORT_WRAPPER_H__ + +#include +#include +#include "network_port_compat.h" + + +virNetworkPtr +virNetworkPortGetNetworkWrapper(virNetworkPortPtr port, + virErrorPtr err); + +char * +virNetworkPortGetXMLDescWrapper(virNetworkPortPtr port, + unsigned int flags, + virErrorPtr err); + +int +virNetworkPortGetUUIDWrapper(virNetworkPortPtr port, + unsigned char *uuid, + virErrorPtr err); +int +virNetworkPortGetUUIDStringWrapper(virNetworkPortPtr port, + char *buf, + virErrorPtr err); + +int +virNetworkPortSetParametersWrapper(virNetworkPortPtr port, + virTypedParameterPtr params, + int nparams, + unsigned int flags, + virErrorPtr err); +int +virNetworkPortGetParametersWrapper(virNetworkPortPtr port, + virTypedParameterPtr *params, + int *nparams, + unsigned int flags, + virErrorPtr err); + +int +virNetworkPortDeleteWrapper(virNetworkPortPtr port, + unsigned int flags, + virErrorPtr err); + +int +virNetworkPortFreeWrapper(virNetworkPortPtr port, + virErrorPtr err); + +int +virNetworkPortRefWrapper(virNetworkPortPtr port, + virErrorPtr err); + + +#endif /* LIBVIRT_GO_NETWORK_PORT_WRAPPER_H__ */ diff --git a/network_wrapper.go b/network_wrapper.go index 2fc443f..6105612 100644 --- a/network_wrapper.go +++ b/network_wrapper.go @@ -263,5 +263,78 @@ virNetworkUpdateWrapper(virNetworkPtr network, } =20 =20 +virNetworkPortPtr +virNetworkPortLookupByUUIDWrapper(virNetworkPtr net, + const unsigned char *uuid, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + virNetworkPortPtr ret; + ret =3D virNetworkPortLookupByUUID(net, uuid); + if (!ret) { + virCopyLastError(err); + } + return ret; +#endif +} + +virNetworkPortPtr +virNetworkPortLookupByUUIDStringWrapper(virNetworkPtr net, + const char *uuidstr, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + virNetworkPortPtr ret; + ret =3D virNetworkPortLookupByUUIDString(net, uuidstr); + if (!ret) { + virCopyLastError(err); + } + return ret; +#endif +} + + +virNetworkPortPtr +virNetworkPortCreateXMLWrapper(virNetworkPtr net, + const char *xmldesc, + unsigned int flags, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + virNetworkPortPtr ret; + ret =3D virNetworkPortCreateXML(net, xmldesc, flags); + if (!ret) { + virCopyLastError(err); + } + return ret; +#endif +} + + +int +virNetworkListAllPortsWrapper(virNetworkPtr network, + virNetworkPortPtr **ports, + unsigned int flags, + virErrorPtr err) +{ +#if LIBVIR_VERSION_NUMBER < 5005000 + assert(0); // Caller should have checked version +#else + int ret; + ret =3D virNetworkListAllPorts(network, ports, flags); + if (ret < 0) { + virCopyLastError(err); + } + return ret; +#endif +} + + */ import "C" diff --git a/network_wrapper.h b/network_wrapper.h index 405bf89..d76167b 100644 --- a/network_wrapper.h +++ b/network_wrapper.h @@ -30,6 +30,7 @@ #include #include #include "network_compat.h" +#include "network_port_compat.h" =20 int virNetworkCreateWrapper(virNetworkPtr network, @@ -115,5 +116,27 @@ virNetworkUpdateWrapper(virNetworkPtr network, unsigned int flags, virErrorPtr err); =20 +virNetworkPortPtr +virNetworkPortLookupByUUIDWrapper(virNetworkPtr net, + const unsigned char *uuid, + virErrorPtr err); + +virNetworkPortPtr +virNetworkPortLookupByUUIDStringWrapper(virNetworkPtr net, + const char *uuidstr, + virErrorPtr err); + +virNetworkPortPtr +virNetworkPortCreateXMLWrapper(virNetworkPtr net, + const char *xmldesc, + unsigned int flags, + virErrorPtr err); + +int +virNetworkListAllPortsWrapper(virNetworkPtr network, + virNetworkPortPtr **ports, + unsigned int flags, + virErrorPtr err); + =20 #endif /* LIBVIRT_GO_NETWORK_WRAPPER_H__ */ --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list