> On 18 Jun 2019, at 17:43, Daniel P. Berrangé <[email protected]> wrote:
> 
> Signed-off-by: Daniel P. Berrangé <[email protected]>
> ---
> 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"
> 
> 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#virNetworkPortLookupByUUIDString
> +func (n *Network) LookupNetworkPortByUUIDString(uuid string) (*NetworkPort, 
> error) {
> +     if C.LIBVIR_VERSION_NUMBER < 5005000 {
> +             return nil, 
> makeNotImplementedError("virNetworkPortLookupByUUIDString")
> +     }
> +
> +     cUuid := C.CString(uuid)
> +     defer C.free(unsafe.Pointer(cUuid))
> +     var err C.virError
> +     ptr := C.virNetworkPortLookupByUUIDStringWrapper(n.ptr, cUuid, &err)
> +     if ptr == nil {
> +             return nil, makeError(&err)
> +     }
> +     return &NetworkPort{ptr: ptr}, nil
> +}
> +
> +// See also 
> https://libvirt.org/html/libvirt-libvirt-network.html#virNetworkPortLookupByUUID
> +func (n *Network) LookupNetworkPortByUUID(uuid []byte) (*NetworkPort, error) 
> {
> +     if C.LIBVIR_VERSION_NUMBER < 5005000 {
> +             return nil, 
> makeNotImplementedError("virNetworkPortLookupByUUID")
> +     }
> +
> +     if len(uuid) != C.VIR_UUID_BUFLEN {
> +             return nil, fmt.Errorf("UUID must be exactly %d bytes in size",
> +                     int(C.VIR_UUID_BUFLEN))
> +     }
> +     cUuid := make([]C.uchar, C.VIR_UUID_BUFLEN)
> +     for i := 0; i < C.VIR_UUID_BUFLEN; i++ {
> +             cUuid[i] = C.uchar(uuid[i])
> +     }
> +     var err C.virError
> +     ptr := C.virNetworkPortLookupByUUIDWrapper(n.ptr, &cUuid[0], &err)
> +     if ptr == nil {
> +             return nil, makeError(&err)
> +     }
> +     return &NetworkPort{ptr: ptr}, nil
> +}
> +
> +// See also 
> https://libvirt.org/html/libvirt-libvirt-network.html#virNetworkPortCreateXML
> +func (n *Network) PortCreateXML(xmlConfig string, flags uint) (*NetworkPort, 
> error) {
> +     if C.LIBVIR_VERSION_NUMBER < 5005000 {
> +             return nil, makeNotImplementedError("virNetworkPortCreateXML")
> +     }
> +     cXml := C.CString(string(xmlConfig))
> +     defer C.free(unsafe.Pointer(cXml))
> +     var err C.virError
> +     ptr := C.virNetworkPortCreateXMLWrapper(n.ptr, cXml, C.uint(flags), 
> &err)
> +     if ptr == nil {
> +             return nil, makeError(&err)
> +     }
> +     return &NetworkPort{ptr: ptr}, nil
> +}
> +
> +// See also 
> https://libvirt.org/html/libvirt-libvirt-network.html#virNetworkListAllPorts
> +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 := C.virNetworkListAllPortsWrapper(n.ptr, 
> (**C.virNetworkPortPtr)(&cList), C.uint(flags), &err)
> +     if numPorts == -1 {
> +             return []NetworkPort{}, makeError(&err)
> +     }
> +     hdr := reflect.SliceHeader{
> +             Data: uintptr(unsafe.Pointer(cList)),
> +             Len:  int(numPorts),
> +             Cap:  int(numPorts),
> +     }
> +     var ports []NetworkPort
> +     slice := *(*[]C.virNetworkPortPtr)(unsafe.Pointer(&hdr))
> +     for _, ptr := range slice {
> +             ports = 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"), to 
> deal
> + * in the Software without restriction, including without limitation the 
> rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * 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 <stdlib.h>
> +#include "network_port_wrapper.h"
> +*/
> +import "C"
> +
> +import (
> +     "unsafe"
> +)
> +
> +type NetworkPortCreateFlags int
> +
> +const (
> +     NETWORK_PORT_CREATE_RECLAIM = 
> NetworkPortCreateFlags(C.VIR_NETWORK_PORT_CREATE_RECLAIM)
> +)
> +
> +type NetworkPort struct {
> +     ptr C.virNetworkPortPtr
> +}
> +
> +// See also 
> https://libvirt.org/html/libvirt-libvirt-network.html#virNetworkPortFree
> +func (n *NetworkPort) Free() error {
> +     if C.LIBVIR_VERSION_NUMBER < 5005000 {
> +             return makeNotImplementedError("virNetworkPortFree")
> +     }
> +
> +     var err C.virError
> +     ret := C.virNetworkPortFreeWrapper(n.ptr, &err)
> +     if ret == -1 {
> +             return makeError(&err)
> +     }
> +     return nil
> +}
> +
> +// See also 
> https://libvirt.org/html/libvirt-libvirt-network.html#virNetworkPortRef
> +func (c *NetworkPort) Ref() error {
> +     if C.LIBVIR_VERSION_NUMBER < 5005000 {
> +             return makeNotImplementedError("virNetworkPortRef")
> +     }
> +
> +     var err C.virError
> +     ret := C.virNetworkPortRefWrapper(c.ptr, &err)
> +     if ret == -1 {
> +             return makeError(&err)
> +     }
> +     return nil
> +}
> +
> +// See also 
> https://libvirt.org/html/libvirt-libvirt-network.html#virNetworkPortGetUUID
> +func (n *NetworkPort) GetUUID() ([]byte, error) {
> +     if C.LIBVIR_VERSION_NUMBER < 5005000 {
> +             return []byte{}, 
> makeNotImplementedError("virNetworkPortGetUUID")
> +     }
> +
> +     var cUuid [C.VIR_UUID_BUFLEN](byte)
> +     cuidPtr := unsafe.Pointer(&cUuid)
> +     var err C.virError
> +     result := C.virNetworkPortGetUUIDWrapper(n.ptr, (*C.uchar)(cuidPtr), 
> &err)
> +     if result != 0 {
> +             return []byte{}, makeError(&err)
> +     }
> +     return C.GoBytes(cuidPtr, C.VIR_UUID_BUFLEN), nil
> +}
> +
> +// See also 
> https://libvirt.org/html/libvirt-libvirt-network.html#virNetworkPortGetUUIDString
> +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 := unsafe.Pointer(&cUuid)
> +     var err C.virError
> +     result := C.virNetworkPortGetUUIDStringWrapper(n.ptr, 
> (*C.char)(cuidPtr), &err)
> +     if result != 0 {
> +             return "", makeError(&err)
> +     }
> +     return C.GoString((*C.char)(cuidPtr)), nil
> +}
> +
> +// See also 
> https://libvirt.org/html/libvirt-libvirt-network.html#virNetworkPortDelete
> +func (n *NetworkPort) Delete(flags uint) error {
> +     if C.LIBVIR_VERSION_NUMBER < 5005000 {
> +             return makeNotImplementedError("virNetworkPortDelete")
> +     }
> +
> +     var err C.virError
> +     result := C.virNetworkPortDeleteWrapper(n.ptr, C.uint(flags), &err)
> +     if result == -1 {
> +             return makeError(&err)
> +     }
> +     return nil
> +}
> +
> +// See also 
> https://libvirt.org/html/libvirt-libvirt-network.html#virNetworkPortGetXMLDesc
> +func (d *NetworkPort) GetXMLDesc(flags uint) (string, error) {
> +     var err C.virError
> +     result := C.virNetworkPortGetXMLDescWrapper(d.ptr, C.uint(flags), &err)
> +     if result == nil {
> +             return "", makeError(&err)
> +     }
> +     xml := 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: &params.BandwidthInAverageSet,
> +                     ui:  &params.BandwidthInAverage,
> +             },
> +             C.VIR_NETWORK_PORT_BANDWIDTH_IN_PEAK: typedParamsFieldInfo{
> +                     set: &params.BandwidthInPeakSet,
> +                     ui:  &params.BandwidthInPeak,
> +             },
> +             C.VIR_NETWORK_PORT_BANDWIDTH_IN_BURST: typedParamsFieldInfo{
> +                     set: &params.BandwidthInBurstSet,
> +                     ui:  &params.BandwidthInBurst,
> +             },
> +             C.VIR_NETWORK_PORT_BANDWIDTH_IN_FLOOR: typedParamsFieldInfo{
> +                     set: &params.BandwidthInFloorSet,
> +                     ui:  &params.BandwidthInFloor,
> +             },
> +             C.VIR_NETWORK_PORT_BANDWIDTH_OUT_AVERAGE: typedParamsFieldInfo{
> +                     set: &params.BandwidthOutAverageSet,
> +                     ui:  &params.BandwidthOutAverage,
> +             },
> +             C.VIR_NETWORK_PORT_BANDWIDTH_OUT_PEAK: typedParamsFieldInfo{
> +                     set: &params.BandwidthOutPeakSet,
> +                     ui:  &params.BandwidthOutPeak,
> +             },
> +             C.VIR_NETWORK_PORT_BANDWIDTH_OUT_BURST: typedParamsFieldInfo{
> +                     set: &params.BandwidthOutBurstSet,
> +                     ui:  &params.BandwidthOutBurst,
> +             },
> +     }
> +}
> +
> +// See also 
> https://libvirt.org/html/libvirt-libvirt-network.html#virNetworkPortGetParameters
> +func (d *NetworkPort) GetParameters(flags uint) (*NetworkPortParameters, 
> error) {
> +     if C.LIBVIR_VERSION_NUMBER < 5005000 {
> +             return nil, 
> makeNotImplementedError("virNetworkPortGetParameters")
> +     }
> +
> +     params := &NetworkPortParameters{}
> +     info := getNetworkPortParametersFieldInfo(params)
> +
> +     var cparams C.virTypedParameterPtr
> +     var cnparams C.int
> +     var err C.virError
> +     ret := C.virNetworkPortGetParametersWrapper(d.ptr, &cparams, &cnparams, 
> C.uint(flags), &err)
> +     if ret == -1 {
> +             return nil, makeError(&err)
> +     }
> +
> +     defer C.virTypedParamsFree(cparams, cnparams)
> +
> +     _, gerr := typedParamsUnpack(cparams, cnparams, info)
> +     if gerr != nil {
> +             return nil, gerr
> +     }
> +
> +     return params, nil
> +}
> +
> +// See also 
> https://libvirt.org/html/libvirt-libvirt-network.html#virNetworkPortSetParameters
> +func (d *NetworkPort) SetParameters(params *NetworkPortParameters, flags 
> uint) error {
> +     if C.LIBVIR_VERSION_NUMBER < 5005000 {
> +             return makeNotImplementedError("virNetworkPortSetParameters")
> +     }
> +
> +     info := getNetworkPortParametersFieldInfo(params)
> +
> +     cparams, cnparams, gerr := typedParamsPackNew(info)
> +     if gerr != nil {
> +             return gerr
> +     }
> +     defer C.virTypedParamsFree(cparams, cnparams)
> +
> +     var err C.virError
> +     ret := C.virNetworkPortSetParametersWrapper(d.ptr, cparams, cnparams, 
> C.uint(flags), &err)
> +     if ret == -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"), to 
> deal
> + * in the Software without restriction, including without limitation the 
> rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * 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"), to 
> deal
> + * in the Software without restriction, including without limitation the 
> rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * 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 <assert.h>
> +#include "network_port_wrapper.h"
> +
> +virNetworkPtr
> +virNetworkPortGetNetworkWrapper(virNetworkPortPtr port,
> +                             virErrorPtr err)
> +{
> +#if LIBVIR_VERSION_NUMBER < 5005000
> +    assert(0); // Caller should have checked version

What about

assert(!”C function not available in this version - Caller should have checked 
version”);

?

> +#else
> +    virNetworkPtr ret;
> +    ret = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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"), to 
> deal
> + * in the Software without restriction, including without limitation the 
> rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * 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 <libvirt/libvirt.h>
> +#include <libvirt/virterror.h>
> +#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,
> }
> 
> 
> +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 = 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 = 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 = 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 = 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 <libvirt/libvirt.h>
> #include <libvirt/virterror.h>
> #include "network_compat.h"
> +#include "network_port_compat.h"
> 
> int
> virNetworkCreateWrapper(virNetworkPtr network,
> @@ -115,5 +116,27 @@ virNetworkUpdateWrapper(virNetworkPtr network,
>                         unsigned int flags,
>                         virErrorPtr err);
> 
> +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);
> +
> 
> #endif /* LIBVIRT_GO_NETWORK_WRAPPER_H__ */
> -- 
> 2.21.0
> 
> --
> libvir-list mailing list
> [email protected]
> https://www.redhat.com/mailman/listinfo/libvir-list


--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to