Introduce a src/libvirt-network.c file to hold all the
methods related to the virNetwork type.
---
docs/apibuild.py | 1 +
po/POTFILES.in | 1 +
src/Makefile.am | 2 +
src/libvirt-network.c | 1251 +++++++++++++++++++++++++++++++++++++++++++++++++
src/libvirt.c | 1221 -----------------------------------------------
5 files changed, 1255 insertions(+), 1221 deletions(-)
create mode 100644 src/libvirt-network.c
diff --git a/docs/apibuild.py b/docs/apibuild.py
index b5bd936..9e394c9 100755
--- a/docs/apibuild.py
+++ b/docs/apibuild.py
@@ -25,6 +25,7 @@ included_files = {
"virterror.h": "header with error specific API definitions",
"libvirt.c": "Main interfaces for the libvirt library",
"libvirt-domain-snapshot.c": "Domain snapshot interfaces for the libvirt
library",
+ "libvirt-network.c": "Network interfaces for the libvirt library",
"virerror.c": "implements error handling and reporting code for
libvirt",
"virevent.c": "event loop for monitoring file handles",
"virtypedparam.c": "virTypedParameters APIs",
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 6f88a15..0ddc834 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -59,6 +59,7 @@ src/internal.h
src/libvirt.c
src/libvirt-domain-snapshot.c
src/libvirt-lxc.c
+src/libvirt-network.c
src/libvirt-qemu.c
src/locking/lock_daemon.c
src/locking/lock_daemon_config.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 1b0a97d..c70fc49 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -190,6 +190,7 @@ DRIVER_SOURCES = \
$(NODE_INFO_SOURCES) \
libvirt.c libvirt_internal.h \
libvirt-domain-snapshot.c \
+ libvirt-network.c \
locking/lock_manager.c locking/lock_manager.h \
locking/lock_driver.h \
locking/lock_driver_nop.h locking/lock_driver_nop.c \
@@ -2188,6 +2189,7 @@ libvirt_setuid_rpc_client_la_SOURCES = \
datatypes.c \
libvirt.c \
libvirt-domain-snapshot.c \
+ libvirt-network.c \
libvirt-lxc.c \
$(NULL)
diff --git a/src/libvirt-network.c b/src/libvirt-network.c
new file mode 100644
index 0000000..36aec61
--- /dev/null
+++ b/src/libvirt-network.c
@@ -0,0 +1,1251 @@
+/*
+ * libvirt-network.c: entry points for virNetworkPtr APIs
+ *
+ * Copyright (C) 2006-2014 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <
http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "datatypes.h"
+#include "viralloc.h"
+#include "virlog.h"
+
+VIR_LOG_INIT("libvirt.network");
+
+#define VIR_FROM_THIS VIR_FROM_NONE
+
+/**
+ * virNetworkGetConnect:
+ * @net: pointer to a network
+ *
+ * Provides the connection pointer associated with a network. The
+ * reference counter on the connection is not increased by this
+ * call.
+ *
+ * WARNING: When writing libvirt bindings in other languages, do
+ * not use this function. Instead, store the connection and
+ * the network object together.
+ *
+ * Returns the virConnectPtr or NULL in case of failure.
+ */
+virConnectPtr
+virNetworkGetConnect(virNetworkPtr net)
+{
+ VIR_DEBUG("net=%p", net);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(net, NULL);
+
+ return net->conn;
+}
+
+
+/**
+ * virConnectListAllNetworks:
+ * @conn: Pointer to the hypervisor connection.
+ * @nets: Pointer to a variable to store the array containing the network
+ * objects or NULL if the list is not required (just returns number
+ * of networks).
+ * @flags: bitwise-OR of virConnectListAllNetworksFlags.
+ *
+ * Collect the list of networks, and allocate an array to store those
+ * objects. This API solves the race inherent between virConnectListNetworks
+ * and virConnectListDefinedNetworks.
+ *
+ * Normally, all networks are returned; however, @flags can be used to
+ * filter the results for a smaller list of targeted networks. The valid
+ * flags are divided into groups, where each group contains bits that
+ * describe mutually exclusive attributes of a network, and where all bits
+ * within a group describe all possible networks.
+ *
+ * The first group of @flags is VIR_CONNECT_LIST_NETWORKS_ACTIVE (up) and
+ * VIR_CONNECT_LIST_NETWORKS_INACTIVE (down) to filter the networks by state.
+ *
+ * The second group of @flags is VIR_CONNECT_LIST_NETWORKS_PERSISTENT (defined)
+ * and VIR_CONNECT_LIST_NETWORKS_TRANSIENT (running but not defined), to filter
+ * the networks by whether they have persistent config or not.
+ *
+ * The third group of @flags is VIR_CONNECT_LIST_NETWORKS_AUTOSTART
+ * and VIR_CONNECT_LIST_NETWORKS_NO_AUTOSTART, to filter the networks by
+ * whether they are marked as autostart or not.
+ *
+ * Returns the number of networks found or -1 and sets @nets to NULL in case
+ * of error. On success, the array stored into @nets is guaranteed to have an
+ * extra allocated element set to NULL but not included in the return count,
+ * to make iteration easier. The caller is responsible for calling
+ * virNetworkFree() on each array element, then calling free() on @nets.
+ */
+int
+virConnectListAllNetworks(virConnectPtr conn,
+ virNetworkPtr **nets,
+ unsigned int flags)
+{
+ VIR_DEBUG("conn=%p, nets=%p, flags=%x", conn, nets, flags);
+
+ virResetLastError();
+
+ if (nets)
+ *nets = NULL;
+
+ virCheckConnectReturn(conn, -1);
+
+ if (conn->networkDriver &&
+ conn->networkDriver->connectListAllNetworks) {
+ int ret;
+ ret = conn->networkDriver->connectListAllNetworks(conn, nets, flags);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return -1;
+}
+
+
+/**
+ * virConnectNumOfNetworks:
+ * @conn: pointer to the hypervisor connection
+ *
+ * Provides the number of active networks.
+ *
+ * Returns the number of network found or -1 in case of error
+ */
+int
+virConnectNumOfNetworks(virConnectPtr conn)
+{
+ VIR_DEBUG("conn=%p", conn);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, -1);
+
+ if (conn->networkDriver &&
conn->networkDriver->connectNumOfNetworks) {
+ int ret;
+ ret = conn->networkDriver->connectNumOfNetworks(conn);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return -1;
+}
+
+
+/**
+ * virConnectListNetworks:
+ * @conn: pointer to the hypervisor connection
+ * @names: array to collect the list of names of active networks
+ * @maxnames: size of @names
+ *
+ * Collect the list of active networks, and store their names in @names
+ *
+ * For more control over the results, see virConnectListAllNetworks().
+ *
+ * Returns the number of networks found or -1 in case of error. Note that
+ * this command is inherently racy; a network can be started between a call
+ * to virConnectNumOfNetworks() and this call; you are only guaranteed that
+ * all currently active networks were listed if the return is less than
+ * @maxnames. The client must call free() on each returned name.
+ */
+int
+virConnectListNetworks(virConnectPtr conn, char **const names, int maxnames)
+{
+ VIR_DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, -1);
+ virCheckNonNullArgGoto(names, error);
+ virCheckNonNegativeArgGoto(maxnames, error);
+
+ if (conn->networkDriver && conn->networkDriver->connectListNetworks)
{
+ int ret;
+ ret = conn->networkDriver->connectListNetworks(conn, names, maxnames);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return -1;
+}
+
+
+/**
+ * virConnectNumOfDefinedNetworks:
+ * @conn: pointer to the hypervisor connection
+ *
+ * Provides the number of inactive networks.
+ *
+ * Returns the number of networks found or -1 in case of error
+ */
+int
+virConnectNumOfDefinedNetworks(virConnectPtr conn)
+{
+ VIR_DEBUG("conn=%p", conn);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, -1);
+
+ if (conn->networkDriver &&
conn->networkDriver->connectNumOfDefinedNetworks) {
+ int ret;
+ ret = conn->networkDriver->connectNumOfDefinedNetworks(conn);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return -1;
+}
+
+
+/**
+ * virConnectListDefinedNetworks:
+ * @conn: pointer to the hypervisor connection
+ * @names: pointer to an array to store the names
+ * @maxnames: size of the array
+ *
+ * list the inactive networks, stores the pointers to the names in @names
+ *
+ * For more control over the results, see virConnectListAllNetworks().
+ *
+ * Returns the number of names provided in the array or -1 in case of error.
+ * Note that this command is inherently racy; a network can be defined between
+ * a call to virConnectNumOfDefinedNetworks() and this call; you are only
+ * guaranteed that all currently defined networks were listed if the return
+ * is less than @maxnames. The client must call free() on each returned name.
+ */
+int
+virConnectListDefinedNetworks(virConnectPtr conn, char **const names,
+ int maxnames)
+{
+ VIR_DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, -1);
+ virCheckNonNullArgGoto(names, error);
+ virCheckNonNegativeArgGoto(maxnames, error);
+
+ if (conn->networkDriver &&
conn->networkDriver->connectListDefinedNetworks) {
+ int ret;
+ ret = conn->networkDriver->connectListDefinedNetworks(conn, names,
maxnames);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkLookupByName:
+ * @conn: pointer to the hypervisor connection
+ * @name: name for the network
+ *
+ * Try to lookup a network on the given hypervisor based on its name.
+ *
+ * virNetworkFree should be used to free the resources after the
+ * network object is no longer needed.
+ *
+ * Returns a new network object or NULL in case of failure. If the
+ * network cannot be found, then VIR_ERR_NO_NETWORK error is raised.
+ */
+virNetworkPtr
+virNetworkLookupByName(virConnectPtr conn, const char *name)
+{
+ VIR_DEBUG("conn=%p, name=%s", conn, name);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, NULL);
+ virCheckNonNullArgGoto(name, error);
+
+ if (conn->networkDriver && conn->networkDriver->networkLookupByName)
{
+ virNetworkPtr ret;
+ ret = conn->networkDriver->networkLookupByName(conn, name);
+ if (!ret)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return NULL;
+}
+
+
+/**
+ * virNetworkLookupByUUID:
+ * @conn: pointer to the hypervisor connection
+ * @uuid: the raw UUID for the network
+ *
+ * Try to lookup a network on the given hypervisor based on its UUID.
+ *
+ * virNetworkFree should be used to free the resources after the
+ * network object is no longer needed.
+ *
+ * Returns a new network object or NULL in case of failure. If the
+ * network cannot be found, then VIR_ERR_NO_NETWORK error is raised.
+ */
+virNetworkPtr
+virNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
+{
+ VIR_UUID_DEBUG(conn, uuid);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, NULL);
+ virCheckNonNullArgGoto(uuid, error);
+
+ if (conn->networkDriver && conn->networkDriver->networkLookupByUUID)
{
+ virNetworkPtr ret;
+ ret = conn->networkDriver->networkLookupByUUID(conn, uuid);
+ if (!ret)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return NULL;
+}
+
+
+/**
+ * virNetworkLookupByUUIDString:
+ * @conn: pointer to the hypervisor connection
+ * @uuidstr: the string UUID for the network
+ *
+ * Try to lookup a network on the given hypervisor based on its UUID.
+ *
+ * Returns a new network object or NULL in case of failure. If the
+ * network cannot be found, then VIR_ERR_NO_NETWORK error is raised.
+ */
+virNetworkPtr
+virNetworkLookupByUUIDString(virConnectPtr conn, const char *uuidstr)
+{
+ unsigned char uuid[VIR_UUID_BUFLEN];
+ VIR_DEBUG("conn=%p, uuidstr=%s", conn, NULLSTR(uuidstr));
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, NULL);
+ virCheckNonNullArgGoto(uuidstr, error);
+
+ if (virUUIDParse(uuidstr, uuid) < 0) {
+ virReportInvalidArg(uuidstr,
+ _("uuidstr in %s must be a valid UUID"),
+ __FUNCTION__);
+ goto error;
+ }
+
+ return virNetworkLookupByUUID(conn, &uuid[0]);
+
+ error:
+ virDispatchError(conn);
+ return NULL;
+}
+
+
+/**
+ * virNetworkCreateXML:
+ * @conn: pointer to the hypervisor connection
+ * @xmlDesc: an XML description of the network
+ *
+ * Create and start a new virtual network, based on an XML description
+ * similar to the one returned by virNetworkGetXMLDesc()
+ *
+ * virNetworkFree should be used to free the resources after the
+ * network object is no longer needed.
+ *
+ * Returns a new network object or NULL in case of failure
+ */
+virNetworkPtr
+virNetworkCreateXML(virConnectPtr conn, const char *xmlDesc)
+{
+ VIR_DEBUG("conn=%p, xmlDesc=%s", conn, xmlDesc);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, NULL);
+ virCheckNonNullArgGoto(xmlDesc, error);
+ virCheckReadOnlyGoto(conn->flags, error);
+
+ if (conn->networkDriver && conn->networkDriver->networkCreateXML) {
+ virNetworkPtr ret;
+ ret = conn->networkDriver->networkCreateXML(conn, xmlDesc);
+ if (!ret)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return NULL;
+}
+
+
+/**
+ * virNetworkDefineXML:
+ * @conn: pointer to the hypervisor connection
+ * @xml: the XML description for the network, preferably in UTF-8
+ *
+ * Define a network, but does not create it
+ *
+ * virNetworkFree should be used to free the resources after the
+ * network object is no longer needed.
+ *
+ * Returns NULL in case of error, a pointer to the network otherwise
+ */
+virNetworkPtr
+virNetworkDefineXML(virConnectPtr conn, const char *xml)
+{
+ VIR_DEBUG("conn=%p, xml=%s", conn, xml);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, NULL);
+ virCheckReadOnlyGoto(conn->flags, error);
+ virCheckNonNullArgGoto(xml, error);
+
+ if (conn->networkDriver && conn->networkDriver->networkDefineXML) {
+ virNetworkPtr ret;
+ ret = conn->networkDriver->networkDefineXML(conn, xml);
+ if (!ret)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(conn);
+ return NULL;
+}
+
+
+/**
+ * virNetworkUndefine:
+ * @network: pointer to a defined network
+ *
+ * Undefine a network but does not stop it if it is running
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+int
+virNetworkUndefine(virNetworkPtr network)
+{
+ virConnectPtr conn;
+ VIR_DEBUG("network=%p", network);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, -1);
+ conn = network->conn;
+
+ virCheckReadOnlyGoto(conn->flags, error);
+
+ if (conn->networkDriver && conn->networkDriver->networkUndefine) {
+ int ret;
+ ret = conn->networkDriver->networkUndefine(network);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(network->conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkUpdate:
+ * @network: pointer to a defined network
+ * @section: which section of the network to update
+ * (see virNetworkUpdateSection for descriptions)
+ * @command: what action to perform (add/delete/modify)
+ * (see virNetworkUpdateCommand for descriptions)
+ * @parentIndex: which parent element, if there are multiple parents
+ * of the same type (e.g. which <ip> element when modifying
+ * a <dhcp>/<host> element), or "-1" for "don't
care" or
+ * "automatically find appropriate one".
+ * @xml: the XML description for the network, preferably in UTF-8
+ * @flags: bitwise OR of virNetworkUpdateFlags.
+ *
+ * Update the definition of an existing network, either its live
+ * running state, its persistent configuration, or both.
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+int
+virNetworkUpdate(virNetworkPtr network,
+ unsigned int command, /* virNetworkUpdateCommand */
+ unsigned int section, /* virNetworkUpdateSection */
+ int parentIndex,
+ const char *xml,
+ unsigned int flags)
+{
+ virConnectPtr conn;
+ VIR_DEBUG("network=%p, section=%d, parentIndex=%d, xml=%s, flags=0x%x",
+ network, section, parentIndex, xml, flags);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, -1);
+ conn = network->conn;
+
+ virCheckReadOnlyGoto(conn->flags, error);
+ virCheckNonNullArgGoto(xml, error);
+
+ if (conn->networkDriver && conn->networkDriver->networkUpdate) {
+ int ret;
+ ret = conn->networkDriver->networkUpdate(network, section, command,
+ parentIndex, xml, flags);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(network->conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkCreate:
+ * @network: pointer to a defined network
+ *
+ * Create and start a defined network. If the call succeed the network
+ * moves from the defined to the running networks pools.
+ *
+ * Returns 0 in case of success, -1 in case of error
+ */
+int
+virNetworkCreate(virNetworkPtr network)
+{
+ virConnectPtr conn;
+ VIR_DEBUG("network=%p", network);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, -1);
+ conn = network->conn;
+
+ virCheckReadOnlyGoto(conn->flags, error);
+
+ if (conn->networkDriver && conn->networkDriver->networkCreate) {
+ int ret;
+ ret = conn->networkDriver->networkCreate(network);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(network->conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkDestroy:
+ * @network: a network object
+ *
+ * Destroy the network object. The running instance is shutdown if not down
+ * already and all resources used by it are given back to the hypervisor. This
+ * does not free the associated virNetworkPtr object.
+ * This function may require privileged access
+ *
+ * Returns 0 in case of success and -1 in case of failure.
+ */
+int
+virNetworkDestroy(virNetworkPtr network)
+{
+ virConnectPtr conn;
+ VIR_DEBUG("network=%p", network);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, -1);
+ conn = network->conn;
+
+ virCheckReadOnlyGoto(conn->flags, error);
+
+ if (conn->networkDriver && conn->networkDriver->networkDestroy) {
+ int ret;
+ ret = conn->networkDriver->networkDestroy(network);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(network->conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkFree:
+ * @network: a network object
+ *
+ * Free the network object. The running instance is kept alive.
+ * The data structure is freed and should not be used thereafter.
+ *
+ * Returns 0 in case of success and -1 in case of failure.
+ */
+int
+virNetworkFree(virNetworkPtr network)
+{
+ VIR_DEBUG("network=%p", network);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, -1);
+
+ virObjectUnref(network);
+ return 0;
+}
+
+
+/**
+ * virNetworkRef:
+ * @network: the network to hold a reference on
+ *
+ * Increment the reference count on the network. For each
+ * additional call to this method, there shall be a corresponding
+ * call to virNetworkFree to release the reference count, once
+ * the caller no longer needs the reference to this object.
+ *
+ * This method is typically useful for applications where multiple
+ * threads are using a connection, and it is required that the
+ * connection remain open until all threads have finished using
+ * it. ie, each new thread using a network would increment
+ * the reference count.
+ *
+ * Returns 0 in case of success, -1 in case of failure.
+ */
+int
+virNetworkRef(virNetworkPtr network)
+{
+ VIR_DEBUG("network=%p refs=%d", network,
+ network ? network->object.u.s.refs : 0);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, -1);
+
+ virObjectRef(network);
+ return 0;
+}
+
+
+/**
+ * virNetworkGetName:
+ * @network: a network object
+ *
+ * Get the public name for that network
+ *
+ * Returns a pointer to the name or NULL, the string need not be deallocated
+ * its lifetime will be the same as the network object.
+ */
+const char *
+virNetworkGetName(virNetworkPtr network)
+{
+ VIR_DEBUG("network=%p", network);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, NULL);
+
+ return network->name;
+}
+
+
+/**
+ * virNetworkGetUUID:
+ * @network: a network object
+ * @uuid: pointer to a VIR_UUID_BUFLEN bytes array
+ *
+ * Get the UUID for a network
+ *
+ * Returns -1 in case of error, 0 in case of success
+ */
+int
+virNetworkGetUUID(virNetworkPtr network, unsigned char *uuid)
+{
+ VIR_DEBUG("network=%p, uuid=%p", network, uuid);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, -1);
+ virCheckNonNullArgGoto(uuid, error);
+
+ memcpy(uuid, &network->uuid[0], VIR_UUID_BUFLEN);
+
+ return 0;
+
+ error:
+ virDispatchError(network->conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkGetUUIDString:
+ * @network: a network object
+ * @buf: pointer to a VIR_UUID_STRING_BUFLEN bytes array
+ *
+ * Get the UUID for a network as string. For more information about
+ * UUID see RFC4122.
+ *
+ * Returns -1 in case of error, 0 in case of success
+ */
+int
+virNetworkGetUUIDString(virNetworkPtr network, char *buf)
+{
+ VIR_DEBUG("network=%p, buf=%p", network, buf);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, -1);
+ virCheckNonNullArgGoto(buf, error);
+
+ virUUIDFormat(network->uuid, buf);
+ return 0;
+
+ error:
+ virDispatchError(network->conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkGetXMLDesc:
+ * @network: a network object
+ * @flags: bitwise-OR of virNetworkXMLFlags
+ *
+ * Provide an XML description of the network. The description may be reused
+ * later to relaunch the network with virNetworkCreateXML().
+ *
+ * Normally, if a network included a physical function, the output includes
+ * all virtual functions tied to that physical interface. If @flags includes
+ * VIR_NETWORK_XML_INACTIVE, then the expansion of virtual interfaces is
+ * not performed.
+ *
+ * Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
+ * the caller must free() the returned value.
+ */
+char *
+virNetworkGetXMLDesc(virNetworkPtr network, unsigned int flags)
+{
+ virConnectPtr conn;
+ VIR_DEBUG("network=%p, flags=%x", network, flags);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, NULL);
+ conn = network->conn;
+
+ if (conn->networkDriver && conn->networkDriver->networkGetXMLDesc)
{
+ char *ret;
+ ret = conn->networkDriver->networkGetXMLDesc(network, flags);
+ if (!ret)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(network->conn);
+ return NULL;
+}
+
+
+/**
+ * virNetworkGetBridgeName:
+ * @network: a network object
+ *
+ * Provides a bridge interface name to which a domain may connect
+ * a network interface in order to join the network.
+ *
+ * Returns a 0 terminated interface name, or NULL in case of error.
+ * the caller must free() the returned value.
+ */
+char *
+virNetworkGetBridgeName(virNetworkPtr network)
+{
+ virConnectPtr conn;
+ VIR_DEBUG("network=%p", network);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, NULL);
+ conn = network->conn;
+
+ if (conn->networkDriver &&
conn->networkDriver->networkGetBridgeName) {
+ char *ret;
+ ret = conn->networkDriver->networkGetBridgeName(network);
+ if (!ret)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(network->conn);
+ return NULL;
+}
+
+
+/**
+ * virNetworkGetAutostart:
+ * @network: a network object
+ * @autostart: the value returned
+ *
+ * Provides a boolean value indicating whether the network
+ * configured to be automatically started when the host
+ * machine boots.
+ *
+ * Returns -1 in case of error, 0 in case of success
+ */
+int
+virNetworkGetAutostart(virNetworkPtr network,
+ int *autostart)
+{
+ virConnectPtr conn;
+ VIR_DEBUG("network=%p, autostart=%p", network, autostart);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, -1);
+ virCheckNonNullArgGoto(autostart, error);
+
+ conn = network->conn;
+
+ if (conn->networkDriver && conn->networkDriver->networkGetAutostart)
{
+ int ret;
+ ret = conn->networkDriver->networkGetAutostart(network, autostart);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(network->conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkSetAutostart:
+ * @network: a network object
+ * @autostart: whether the network should be automatically started 0 or 1
+ *
+ * Configure the network to be automatically started
+ * when the host machine boots.
+ *
+ * Returns -1 in case of error, 0 in case of success
+ */
+int
+virNetworkSetAutostart(virNetworkPtr network,
+ int autostart)
+{
+ virConnectPtr conn;
+ VIR_DEBUG("network=%p, autostart=%d", network, autostart);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(network, -1);
+ conn = network->conn;
+
+ virCheckReadOnlyGoto(conn->flags, error);
+
+ if (conn->networkDriver && conn->networkDriver->networkSetAutostart)
{
+ int ret;
+ ret = conn->networkDriver->networkSetAutostart(network, autostart);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(network->conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkIsActive:
+ * @net: pointer to the network object
+ *
+ * Determine if the network is currently running
+ *
+ * Returns 1 if running, 0 if inactive, -1 on error
+ */
+int
+virNetworkIsActive(virNetworkPtr net)
+{
+ VIR_DEBUG("net=%p", net);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(net, -1);
+
+ if (net->conn->networkDriver->networkIsActive) {
+ int ret;
+ ret = net->conn->networkDriver->networkIsActive(net);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+ error:
+ virDispatchError(net->conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkIsPersistent:
+ * @net: pointer to the network object
+ *
+ * Determine if the network has a persistent configuration
+ * which means it will still exist after shutting down
+ *
+ * Returns 1 if persistent, 0 if transient, -1 on error
+ */
+int
+virNetworkIsPersistent(virNetworkPtr net)
+{
+ VIR_DEBUG("net=%p", net);
+
+ virResetLastError();
+
+ virCheckNetworkReturn(net, -1);
+
+ if (net->conn->networkDriver->networkIsPersistent) {
+ int ret;
+ ret = net->conn->networkDriver->networkIsPersistent(net);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+ error:
+ virDispatchError(net->conn);
+ return -1;
+}
+
+
+/**
+ * virConnectNetworkEventRegisterAny:
+ * @conn: pointer to the connection
+ * @net: pointer to the network
+ * @eventID: the event type to receive
+ * @cb: callback to the function handling network events
+ * @opaque: opaque data to pass on to the callback
+ * @freecb: optional function to deallocate opaque when not used anymore
+ *
+ * Adds a callback to receive notifications of arbitrary network events
+ * occurring on a network. This function requires that an event loop
+ * has been previously registered with virEventRegisterImpl() or
+ * virEventRegisterDefaultImpl().
+ *
+ * If @net is NULL, then events will be monitored for any network. If @net
+ * is non-NULL, then only the specific network will be monitored.
+ *
+ * Most types of event have a callback providing a custom set of parameters
+ * for the event. When registering an event, it is thus necessary to use
+ * the VIR_NETWORK_EVENT_CALLBACK() macro to cast the supplied function pointer
+ * to match the signature of this method.
+ *
+ * The virNetworkPtr object handle passed into the callback upon delivery
+ * of an event is only valid for the duration of execution of the callback.
+ * If the callback wishes to keep the network object after the callback
+ * returns, it shall take a reference to it, by calling virNetworkRef().
+ * The reference can be released once the object is no longer required
+ * by calling virNetworkFree().
+ *
+ * The return value from this method is a positive integer identifier
+ * for the callback. To unregister a callback, this callback ID should
+ * be passed to the virConnectNetworkEventDeregisterAny() method.
+ *
+ * Returns a callback identifier on success, -1 on failure.
+ */
+int
+virConnectNetworkEventRegisterAny(virConnectPtr conn,
+ virNetworkPtr net,
+ int eventID,
+ virConnectNetworkEventGenericCallback cb,
+ void *opaque,
+ virFreeCallback freecb)
+{
+ VIR_DEBUG("conn=%p, eventID=%d, cb=%p, opaque=%p, freecb=%p",
+ conn, eventID, cb, opaque, freecb);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, -1);
+ if (net) {
+ virCheckNetworkGoto(net, error);
+ if (net->conn != conn) {
+ virReportInvalidArg(net,
+ _("network '%s' in %s must match
connection"),
+ net->name, __FUNCTION__);
+ goto error;
+ }
+ }
+ virCheckNonNullArgGoto(cb, error);
+ virCheckNonNegativeArgGoto(eventID, error);
+
+ if (eventID >= VIR_NETWORK_EVENT_ID_LAST) {
+ virReportInvalidArg(eventID,
+ _("eventID in %s must be less than %d"),
+ __FUNCTION__, VIR_NETWORK_EVENT_ID_LAST);
+ goto error;
+ }
+
+ if (conn->networkDriver &&
conn->networkDriver->connectNetworkEventRegisterAny) {
+ int ret;
+ ret = conn->networkDriver->connectNetworkEventRegisterAny(conn, net,
+ eventID,
+ cb, opaque,
+ freecb);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+ error:
+ virDispatchError(conn);
+ return -1;
+}
+
+
+/**
+ * virConnectNetworkEventDeregisterAny:
+ * @conn: pointer to the connection
+ * @callbackID: the callback identifier
+ *
+ * Removes an event callback. The callbackID parameter should be the
+ * value obtained from a previous virConnectNetworkEventRegisterAny() method.
+ *
+ * Returns 0 on success, -1 on failure
+ */
+int
+virConnectNetworkEventDeregisterAny(virConnectPtr conn,
+ int callbackID)
+{
+ VIR_DEBUG("conn=%p, callbackID=%d", conn, callbackID);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, -1);
+ virCheckNonNegativeArgGoto(callbackID, error);
+
+ if (conn->networkDriver &&
+ conn->networkDriver->connectNetworkEventDeregisterAny) {
+ int ret;
+ ret = conn->networkDriver->connectNetworkEventDeregisterAny(conn,
+ callbackID);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+ error:
+ virDispatchError(conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkGetDHCPLeases:
+ * @network: Pointer to network object
+ * @mac: Optional ASCII formatted MAC address of an interface
+ * @leases: Pointer to a variable to store the array containing details on
+ * obtained leases, or NULL if the list is not required (just returns
+ * number of leases).
+ * @flags: Extra flags, not used yet, so callers should always pass 0
+ *
+ * For DHCPv4, the information returned:
+ * - Network Interface Name
+ * - Expiry Time
+ * - MAC address
+ * - IAID (NULL)
+ * - IPv4 address (with type and prefix)
+ * - Hostname (can be NULL)
+ * - Client ID (can be NULL)
+ *
+ * For DHCPv6, the information returned:
+ * - Network Interface Name
+ * - Expiry Time
+ * - MAC address
+ * - IAID (can be NULL, only in rare cases)
+ * - IPv6 address (with type and prefix)
+ * - Hostname (can be NULL)
+ * - Client DUID
+ *
+ * Note: @mac, @iaid, @ipaddr, @clientid are in ASCII form, not raw bytes.
+ * Note: @expirytime can 0, in case the lease is for infinite time.
+ *
+ * The API fetches leases info of guests in the specified network. If the
+ * optional parameter @mac is specified, the returned list will contain only
+ * lease info about a specific guest interface with @mac. There can be
+ * multiple leases for a single @mac because this API supports DHCPv6 too.
+ *
+ * Returns the number of leases found or -1 and sets @leases to NULL in
+ * case of error. On success, the array stored into @leases is guaranteed to
+ * have an extra allocated element set to NULL but not included in the return
+ * count, to make iteration easier. The caller is responsible for calling
+ * virNetworkDHCPLeaseFree() on each array element, then calling free() on @leases.
+ *
+ * See also virNetworkGetDHCPLeasesForMAC() as a convenience for filtering
+ * the list to a single MAC address.
+ *
+ * Example of usage:
+ *
+ * virNetworkDHCPLeasePtr *leases = NULL;
+ * virNetworkPtr network = ... obtain a network pointer here ...;
+ * size_t i;
+ * int nleases;
+ * unsigned int flags = 0;
+ *
+ * nleases = virNetworkGetDHCPLeases(network, NULL, &leases, flags);
+ * if (nleases < 0)
+ * error();
+ *
+ * ... do something with returned values, for example:
+ *
+ * for (i = 0; i < nleases; i++) {
+ * virNetworkDHCPLeasePtr lease = leases[i];
+ *
+ * printf("Time(epoch): %lu, MAC address: %s, "
+ * "IP address: %s, Hostname: %s, ClientID: %s\n",
+ * lease->expirytime, lease->mac, lease->ipaddr,
+ * lease->hostname, lease->clientid);
+ *
+ * virNetworkDHCPLeaseFree(leases[i]);
+ * }
+ *
+ * free(leases);
+ *
+ */
+int
+virNetworkGetDHCPLeases(virNetworkPtr network,
+ const char *mac,
+ virNetworkDHCPLeasePtr **leases,
+ unsigned int flags)
+{
+ virConnectPtr conn;
+ VIR_DEBUG("network=%p, mac='%s' leases=%p, flags=%x",
+ network, NULLSTR(mac), leases, flags);
+
+ virResetLastError();
+
+ if (leases)
+ *leases = NULL;
+
+ virCheckNetworkReturn(network, -1);
+
+ conn = network->conn;
+
+ if (conn->networkDriver &&
conn->networkDriver->networkGetDHCPLeases) {
+ int ret;
+ ret = conn->networkDriver->networkGetDHCPLeases(network, mac, leases,
flags);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+
+ error:
+ virDispatchError(network->conn);
+ return -1;
+}
+
+
+/**
+ * virNetworkDHCPLeaseFree:
+ * @lease: pointer to a leases object
+ *
+ * Frees all the memory occupied by @lease.
+ */
+void
+virNetworkDHCPLeaseFree(virNetworkDHCPLeasePtr lease)
+{
+ if (!lease)
+ return;
+ VIR_FREE(lease->iface);
+ VIR_FREE(lease->mac);
+ VIR_FREE(lease->iaid);
+ VIR_FREE(lease->ipaddr);
+ VIR_FREE(lease->hostname);
+ VIR_FREE(lease->clientid);
+ VIR_FREE(lease);
+}
diff --git a/src/libvirt.c b/src/libvirt.c
index f02f0d9..328dff4 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -10684,912 +10684,6 @@ virNodeGetCellsFreeMemory(virConnectPtr conn, unsigned long long
*freeMems,
/**
- * virNetworkGetConnect:
- * @net: pointer to a network
- *
- * Provides the connection pointer associated with a network. The
- * reference counter on the connection is not increased by this
- * call.
- *
- * WARNING: When writing libvirt bindings in other languages, do
- * not use this function. Instead, store the connection and
- * the network object together.
- *
- * Returns the virConnectPtr or NULL in case of failure.
- */
-virConnectPtr
-virNetworkGetConnect(virNetworkPtr net)
-{
- VIR_DEBUG("net=%p", net);
-
- virResetLastError();
-
- virCheckNetworkReturn(net, NULL);
-
- return net->conn;
-}
-
-
-/**
- * virConnectListAllNetworks:
- * @conn: Pointer to the hypervisor connection.
- * @nets: Pointer to a variable to store the array containing the network
- * objects or NULL if the list is not required (just returns number
- * of networks).
- * @flags: bitwise-OR of virConnectListAllNetworksFlags.
- *
- * Collect the list of networks, and allocate an array to store those
- * objects. This API solves the race inherent between virConnectListNetworks
- * and virConnectListDefinedNetworks.
- *
- * Normally, all networks are returned; however, @flags can be used to
- * filter the results for a smaller list of targeted networks. The valid
- * flags are divided into groups, where each group contains bits that
- * describe mutually exclusive attributes of a network, and where all bits
- * within a group describe all possible networks.
- *
- * The first group of @flags is VIR_CONNECT_LIST_NETWORKS_ACTIVE (up) and
- * VIR_CONNECT_LIST_NETWORKS_INACTIVE (down) to filter the networks by state.
- *
- * The second group of @flags is VIR_CONNECT_LIST_NETWORKS_PERSISTENT (defined)
- * and VIR_CONNECT_LIST_NETWORKS_TRANSIENT (running but not defined), to filter
- * the networks by whether they have persistent config or not.
- *
- * The third group of @flags is VIR_CONNECT_LIST_NETWORKS_AUTOSTART
- * and VIR_CONNECT_LIST_NETWORKS_NO_AUTOSTART, to filter the networks by
- * whether they are marked as autostart or not.
- *
- * Returns the number of networks found or -1 and sets @nets to NULL in case
- * of error. On success, the array stored into @nets is guaranteed to have an
- * extra allocated element set to NULL but not included in the return count,
- * to make iteration easier. The caller is responsible for calling
- * virNetworkFree() on each array element, then calling free() on @nets.
- */
-int
-virConnectListAllNetworks(virConnectPtr conn,
- virNetworkPtr **nets,
- unsigned int flags)
-{
- VIR_DEBUG("conn=%p, nets=%p, flags=%x", conn, nets, flags);
-
- virResetLastError();
-
- if (nets)
- *nets = NULL;
-
- virCheckConnectReturn(conn, -1);
-
- if (conn->networkDriver &&
- conn->networkDriver->connectListAllNetworks) {
- int ret;
- ret = conn->networkDriver->connectListAllNetworks(conn, nets, flags);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(conn);
- return -1;
-}
-
-
-/**
- * virConnectNumOfNetworks:
- * @conn: pointer to the hypervisor connection
- *
- * Provides the number of active networks.
- *
- * Returns the number of network found or -1 in case of error
- */
-int
-virConnectNumOfNetworks(virConnectPtr conn)
-{
- VIR_DEBUG("conn=%p", conn);
-
- virResetLastError();
-
- virCheckConnectReturn(conn, -1);
-
- if (conn->networkDriver &&
conn->networkDriver->connectNumOfNetworks) {
- int ret;
- ret = conn->networkDriver->connectNumOfNetworks(conn);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(conn);
- return -1;
-}
-
-
-/**
- * virConnectListNetworks:
- * @conn: pointer to the hypervisor connection
- * @names: array to collect the list of names of active networks
- * @maxnames: size of @names
- *
- * Collect the list of active networks, and store their names in @names
- *
- * For more control over the results, see virConnectListAllNetworks().
- *
- * Returns the number of networks found or -1 in case of error. Note that
- * this command is inherently racy; a network can be started between a call
- * to virConnectNumOfNetworks() and this call; you are only guaranteed that
- * all currently active networks were listed if the return is less than
- * @maxnames. The client must call free() on each returned name.
- */
-int
-virConnectListNetworks(virConnectPtr conn, char **const names, int maxnames)
-{
- VIR_DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
-
- virResetLastError();
-
- virCheckConnectReturn(conn, -1);
- virCheckNonNullArgGoto(names, error);
- virCheckNonNegativeArgGoto(maxnames, error);
-
- if (conn->networkDriver && conn->networkDriver->connectListNetworks)
{
- int ret;
- ret = conn->networkDriver->connectListNetworks(conn, names, maxnames);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(conn);
- return -1;
-}
-
-
-/**
- * virConnectNumOfDefinedNetworks:
- * @conn: pointer to the hypervisor connection
- *
- * Provides the number of inactive networks.
- *
- * Returns the number of networks found or -1 in case of error
- */
-int
-virConnectNumOfDefinedNetworks(virConnectPtr conn)
-{
- VIR_DEBUG("conn=%p", conn);
-
- virResetLastError();
-
- virCheckConnectReturn(conn, -1);
-
- if (conn->networkDriver &&
conn->networkDriver->connectNumOfDefinedNetworks) {
- int ret;
- ret = conn->networkDriver->connectNumOfDefinedNetworks(conn);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(conn);
- return -1;
-}
-
-
-/**
- * virConnectListDefinedNetworks:
- * @conn: pointer to the hypervisor connection
- * @names: pointer to an array to store the names
- * @maxnames: size of the array
- *
- * list the inactive networks, stores the pointers to the names in @names
- *
- * For more control over the results, see virConnectListAllNetworks().
- *
- * Returns the number of names provided in the array or -1 in case of error.
- * Note that this command is inherently racy; a network can be defined between
- * a call to virConnectNumOfDefinedNetworks() and this call; you are only
- * guaranteed that all currently defined networks were listed if the return
- * is less than @maxnames. The client must call free() on each returned name.
- */
-int
-virConnectListDefinedNetworks(virConnectPtr conn, char **const names,
- int maxnames)
-{
- VIR_DEBUG("conn=%p, names=%p, maxnames=%d", conn, names, maxnames);
-
- virResetLastError();
-
- virCheckConnectReturn(conn, -1);
- virCheckNonNullArgGoto(names, error);
- virCheckNonNegativeArgGoto(maxnames, error);
-
- if (conn->networkDriver &&
conn->networkDriver->connectListDefinedNetworks) {
- int ret;
- ret = conn->networkDriver->connectListDefinedNetworks(conn, names,
maxnames);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(conn);
- return -1;
-}
-
-
-/**
- * virNetworkLookupByName:
- * @conn: pointer to the hypervisor connection
- * @name: name for the network
- *
- * Try to lookup a network on the given hypervisor based on its name.
- *
- * virNetworkFree should be used to free the resources after the
- * network object is no longer needed.
- *
- * Returns a new network object or NULL in case of failure. If the
- * network cannot be found, then VIR_ERR_NO_NETWORK error is raised.
- */
-virNetworkPtr
-virNetworkLookupByName(virConnectPtr conn, const char *name)
-{
- VIR_DEBUG("conn=%p, name=%s", conn, name);
-
- virResetLastError();
-
- virCheckConnectReturn(conn, NULL);
- virCheckNonNullArgGoto(name, error);
-
- if (conn->networkDriver && conn->networkDriver->networkLookupByName)
{
- virNetworkPtr ret;
- ret = conn->networkDriver->networkLookupByName(conn, name);
- if (!ret)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(conn);
- return NULL;
-}
-
-
-/**
- * virNetworkLookupByUUID:
- * @conn: pointer to the hypervisor connection
- * @uuid: the raw UUID for the network
- *
- * Try to lookup a network on the given hypervisor based on its UUID.
- *
- * virNetworkFree should be used to free the resources after the
- * network object is no longer needed.
- *
- * Returns a new network object or NULL in case of failure. If the
- * network cannot be found, then VIR_ERR_NO_NETWORK error is raised.
- */
-virNetworkPtr
-virNetworkLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
-{
- VIR_UUID_DEBUG(conn, uuid);
-
- virResetLastError();
-
- virCheckConnectReturn(conn, NULL);
- virCheckNonNullArgGoto(uuid, error);
-
- if (conn->networkDriver && conn->networkDriver->networkLookupByUUID)
{
- virNetworkPtr ret;
- ret = conn->networkDriver->networkLookupByUUID(conn, uuid);
- if (!ret)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(conn);
- return NULL;
-}
-
-
-/**
- * virNetworkLookupByUUIDString:
- * @conn: pointer to the hypervisor connection
- * @uuidstr: the string UUID for the network
- *
- * Try to lookup a network on the given hypervisor based on its UUID.
- *
- * Returns a new network object or NULL in case of failure. If the
- * network cannot be found, then VIR_ERR_NO_NETWORK error is raised.
- */
-virNetworkPtr
-virNetworkLookupByUUIDString(virConnectPtr conn, const char *uuidstr)
-{
- unsigned char uuid[VIR_UUID_BUFLEN];
- VIR_DEBUG("conn=%p, uuidstr=%s", conn, NULLSTR(uuidstr));
-
- virResetLastError();
-
- virCheckConnectReturn(conn, NULL);
- virCheckNonNullArgGoto(uuidstr, error);
-
- if (virUUIDParse(uuidstr, uuid) < 0) {
- virReportInvalidArg(uuidstr,
- _("uuidstr in %s must be a valid UUID"),
- __FUNCTION__);
- goto error;
- }
-
- return virNetworkLookupByUUID(conn, &uuid[0]);
-
- error:
- virDispatchError(conn);
- return NULL;
-}
-
-
-/**
- * virNetworkCreateXML:
- * @conn: pointer to the hypervisor connection
- * @xmlDesc: an XML description of the network
- *
- * Create and start a new virtual network, based on an XML description
- * similar to the one returned by virNetworkGetXMLDesc()
- *
- * virNetworkFree should be used to free the resources after the
- * network object is no longer needed.
- *
- * Returns a new network object or NULL in case of failure
- */
-virNetworkPtr
-virNetworkCreateXML(virConnectPtr conn, const char *xmlDesc)
-{
- VIR_DEBUG("conn=%p, xmlDesc=%s", conn, xmlDesc);
-
- virResetLastError();
-
- virCheckConnectReturn(conn, NULL);
- virCheckNonNullArgGoto(xmlDesc, error);
- virCheckReadOnlyGoto(conn->flags, error);
-
- if (conn->networkDriver && conn->networkDriver->networkCreateXML) {
- virNetworkPtr ret;
- ret = conn->networkDriver->networkCreateXML(conn, xmlDesc);
- if (!ret)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(conn);
- return NULL;
-}
-
-
-/**
- * virNetworkDefineXML:
- * @conn: pointer to the hypervisor connection
- * @xml: the XML description for the network, preferably in UTF-8
- *
- * Define a network, but does not create it
- *
- * virNetworkFree should be used to free the resources after the
- * network object is no longer needed.
- *
- * Returns NULL in case of error, a pointer to the network otherwise
- */
-virNetworkPtr
-virNetworkDefineXML(virConnectPtr conn, const char *xml)
-{
- VIR_DEBUG("conn=%p, xml=%s", conn, xml);
-
- virResetLastError();
-
- virCheckConnectReturn(conn, NULL);
- virCheckReadOnlyGoto(conn->flags, error);
- virCheckNonNullArgGoto(xml, error);
-
- if (conn->networkDriver && conn->networkDriver->networkDefineXML) {
- virNetworkPtr ret;
- ret = conn->networkDriver->networkDefineXML(conn, xml);
- if (!ret)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(conn);
- return NULL;
-}
-
-
-/**
- * virNetworkUndefine:
- * @network: pointer to a defined network
- *
- * Undefine a network but does not stop it if it is running
- *
- * Returns 0 in case of success, -1 in case of error
- */
-int
-virNetworkUndefine(virNetworkPtr network)
-{
- virConnectPtr conn;
- VIR_DEBUG("network=%p", network);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, -1);
- conn = network->conn;
-
- virCheckReadOnlyGoto(conn->flags, error);
-
- if (conn->networkDriver && conn->networkDriver->networkUndefine) {
- int ret;
- ret = conn->networkDriver->networkUndefine(network);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(network->conn);
- return -1;
-}
-
-
-/**
- * virNetworkUpdate:
- * @network: pointer to a defined network
- * @section: which section of the network to update
- * (see virNetworkUpdateSection for descriptions)
- * @command: what action to perform (add/delete/modify)
- * (see virNetworkUpdateCommand for descriptions)
- * @parentIndex: which parent element, if there are multiple parents
- * of the same type (e.g. which <ip> element when modifying
- * a <dhcp>/<host> element), or "-1" for "don't
care" or
- * "automatically find appropriate one".
- * @xml: the XML description for the network, preferably in UTF-8
- * @flags: bitwise OR of virNetworkUpdateFlags.
- *
- * Update the definition of an existing network, either its live
- * running state, its persistent configuration, or both.
- *
- * Returns 0 in case of success, -1 in case of error
- */
-int
-virNetworkUpdate(virNetworkPtr network,
- unsigned int command, /* virNetworkUpdateCommand */
- unsigned int section, /* virNetworkUpdateSection */
- int parentIndex,
- const char *xml,
- unsigned int flags)
-{
- virConnectPtr conn;
- VIR_DEBUG("network=%p, section=%d, parentIndex=%d, xml=%s, flags=0x%x",
- network, section, parentIndex, xml, flags);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, -1);
- conn = network->conn;
-
- virCheckReadOnlyGoto(conn->flags, error);
- virCheckNonNullArgGoto(xml, error);
-
- if (conn->networkDriver && conn->networkDriver->networkUpdate) {
- int ret;
- ret = conn->networkDriver->networkUpdate(network, section, command,
- parentIndex, xml, flags);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(network->conn);
- return -1;
-}
-
-
-/**
- * virNetworkCreate:
- * @network: pointer to a defined network
- *
- * Create and start a defined network. If the call succeed the network
- * moves from the defined to the running networks pools.
- *
- * Returns 0 in case of success, -1 in case of error
- */
-int
-virNetworkCreate(virNetworkPtr network)
-{
- virConnectPtr conn;
- VIR_DEBUG("network=%p", network);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, -1);
- conn = network->conn;
-
- virCheckReadOnlyGoto(conn->flags, error);
-
- if (conn->networkDriver && conn->networkDriver->networkCreate) {
- int ret;
- ret = conn->networkDriver->networkCreate(network);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(network->conn);
- return -1;
-}
-
-
-/**
- * virNetworkDestroy:
- * @network: a network object
- *
- * Destroy the network object. The running instance is shutdown if not down
- * already and all resources used by it are given back to the hypervisor. This
- * does not free the associated virNetworkPtr object.
- * This function may require privileged access
- *
- * Returns 0 in case of success and -1 in case of failure.
- */
-int
-virNetworkDestroy(virNetworkPtr network)
-{
- virConnectPtr conn;
- VIR_DEBUG("network=%p", network);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, -1);
- conn = network->conn;
-
- virCheckReadOnlyGoto(conn->flags, error);
-
- if (conn->networkDriver && conn->networkDriver->networkDestroy) {
- int ret;
- ret = conn->networkDriver->networkDestroy(network);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(network->conn);
- return -1;
-}
-
-
-/**
- * virNetworkFree:
- * @network: a network object
- *
- * Free the network object. The running instance is kept alive.
- * The data structure is freed and should not be used thereafter.
- *
- * Returns 0 in case of success and -1 in case of failure.
- */
-int
-virNetworkFree(virNetworkPtr network)
-{
- VIR_DEBUG("network=%p", network);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, -1);
-
- virObjectUnref(network);
- return 0;
-}
-
-
-/**
- * virNetworkRef:
- * @network: the network to hold a reference on
- *
- * Increment the reference count on the network. For each
- * additional call to this method, there shall be a corresponding
- * call to virNetworkFree to release the reference count, once
- * the caller no longer needs the reference to this object.
- *
- * This method is typically useful for applications where multiple
- * threads are using a connection, and it is required that the
- * connection remain open until all threads have finished using
- * it. ie, each new thread using a network would increment
- * the reference count.
- *
- * Returns 0 in case of success, -1 in case of failure.
- */
-int
-virNetworkRef(virNetworkPtr network)
-{
- VIR_DEBUG("network=%p refs=%d", network,
- network ? network->object.u.s.refs : 0);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, -1);
-
- virObjectRef(network);
- return 0;
-}
-
-
-/**
- * virNetworkGetName:
- * @network: a network object
- *
- * Get the public name for that network
- *
- * Returns a pointer to the name or NULL, the string need not be deallocated
- * its lifetime will be the same as the network object.
- */
-const char *
-virNetworkGetName(virNetworkPtr network)
-{
- VIR_DEBUG("network=%p", network);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, NULL);
-
- return network->name;
-}
-
-
-/**
- * virNetworkGetUUID:
- * @network: a network object
- * @uuid: pointer to a VIR_UUID_BUFLEN bytes array
- *
- * Get the UUID for a network
- *
- * Returns -1 in case of error, 0 in case of success
- */
-int
-virNetworkGetUUID(virNetworkPtr network, unsigned char *uuid)
-{
- VIR_DEBUG("network=%p, uuid=%p", network, uuid);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, -1);
- virCheckNonNullArgGoto(uuid, error);
-
- memcpy(uuid, &network->uuid[0], VIR_UUID_BUFLEN);
-
- return 0;
-
- error:
- virDispatchError(network->conn);
- return -1;
-}
-
-
-/**
- * virNetworkGetUUIDString:
- * @network: a network object
- * @buf: pointer to a VIR_UUID_STRING_BUFLEN bytes array
- *
- * Get the UUID for a network as string. For more information about
- * UUID see RFC4122.
- *
- * Returns -1 in case of error, 0 in case of success
- */
-int
-virNetworkGetUUIDString(virNetworkPtr network, char *buf)
-{
- VIR_DEBUG("network=%p, buf=%p", network, buf);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, -1);
- virCheckNonNullArgGoto(buf, error);
-
- virUUIDFormat(network->uuid, buf);
- return 0;
-
- error:
- virDispatchError(network->conn);
- return -1;
-}
-
-
-/**
- * virNetworkGetXMLDesc:
- * @network: a network object
- * @flags: bitwise-OR of virNetworkXMLFlags
- *
- * Provide an XML description of the network. The description may be reused
- * later to relaunch the network with virNetworkCreateXML().
- *
- * Normally, if a network included a physical function, the output includes
- * all virtual functions tied to that physical interface. If @flags includes
- * VIR_NETWORK_XML_INACTIVE, then the expansion of virtual interfaces is
- * not performed.
- *
- * Returns a 0 terminated UTF-8 encoded XML instance, or NULL in case of error.
- * the caller must free() the returned value.
- */
-char *
-virNetworkGetXMLDesc(virNetworkPtr network, unsigned int flags)
-{
- virConnectPtr conn;
- VIR_DEBUG("network=%p, flags=%x", network, flags);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, NULL);
- conn = network->conn;
-
- if (conn->networkDriver && conn->networkDriver->networkGetXMLDesc)
{
- char *ret;
- ret = conn->networkDriver->networkGetXMLDesc(network, flags);
- if (!ret)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(network->conn);
- return NULL;
-}
-
-
-/**
- * virNetworkGetBridgeName:
- * @network: a network object
- *
- * Provides a bridge interface name to which a domain may connect
- * a network interface in order to join the network.
- *
- * Returns a 0 terminated interface name, or NULL in case of error.
- * the caller must free() the returned value.
- */
-char *
-virNetworkGetBridgeName(virNetworkPtr network)
-{
- virConnectPtr conn;
- VIR_DEBUG("network=%p", network);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, NULL);
- conn = network->conn;
-
- if (conn->networkDriver &&
conn->networkDriver->networkGetBridgeName) {
- char *ret;
- ret = conn->networkDriver->networkGetBridgeName(network);
- if (!ret)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(network->conn);
- return NULL;
-}
-
-
-/**
- * virNetworkGetAutostart:
- * @network: a network object
- * @autostart: the value returned
- *
- * Provides a boolean value indicating whether the network
- * configured to be automatically started when the host
- * machine boots.
- *
- * Returns -1 in case of error, 0 in case of success
- */
-int
-virNetworkGetAutostart(virNetworkPtr network,
- int *autostart)
-{
- virConnectPtr conn;
- VIR_DEBUG("network=%p, autostart=%p", network, autostart);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, -1);
- virCheckNonNullArgGoto(autostart, error);
-
- conn = network->conn;
-
- if (conn->networkDriver && conn->networkDriver->networkGetAutostart)
{
- int ret;
- ret = conn->networkDriver->networkGetAutostart(network, autostart);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(network->conn);
- return -1;
-}
-
-
-/**
- * virNetworkSetAutostart:
- * @network: a network object
- * @autostart: whether the network should be automatically started 0 or 1
- *
- * Configure the network to be automatically started
- * when the host machine boots.
- *
- * Returns -1 in case of error, 0 in case of success
- */
-int
-virNetworkSetAutostart(virNetworkPtr network,
- int autostart)
-{
- virConnectPtr conn;
- VIR_DEBUG("network=%p, autostart=%d", network, autostart);
-
- virResetLastError();
-
- virCheckNetworkReturn(network, -1);
- conn = network->conn;
-
- virCheckReadOnlyGoto(conn->flags, error);
-
- if (conn->networkDriver && conn->networkDriver->networkSetAutostart)
{
- int ret;
- ret = conn->networkDriver->networkSetAutostart(network, autostart);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(network->conn);
- return -1;
-}
-
-
-/**
* virInterfaceGetConnect:
* @iface: pointer to an interface
*
@@ -16659,71 +15753,6 @@ virDomainIsUpdated(virDomainPtr dom)
/**
- * virNetworkIsActive:
- * @net: pointer to the network object
- *
- * Determine if the network is currently running
- *
- * Returns 1 if running, 0 if inactive, -1 on error
- */
-int
-virNetworkIsActive(virNetworkPtr net)
-{
- VIR_DEBUG("net=%p", net);
-
- virResetLastError();
-
- virCheckNetworkReturn(net, -1);
-
- if (net->conn->networkDriver->networkIsActive) {
- int ret;
- ret = net->conn->networkDriver->networkIsActive(net);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
- error:
- virDispatchError(net->conn);
- return -1;
-}
-
-
-/**
- * virNetworkIsPersistent:
- * @net: pointer to the network object
- *
- * Determine if the network has a persistent configuration
- * which means it will still exist after shutting down
- *
- * Returns 1 if persistent, 0 if transient, -1 on error
- */
-int
-virNetworkIsPersistent(virNetworkPtr net)
-{
- VIR_DEBUG("net=%p", net);
-
- virResetLastError();
-
- virCheckNetworkReturn(net, -1);
-
- if (net->conn->networkDriver->networkIsPersistent) {
- int ret;
- ret = net->conn->networkDriver->networkIsPersistent(net);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
- error:
- virDispatchError(net->conn);
- return -1;
-}
-
-
-/**
* virStoragePoolIsActive:
* @pool: pointer to the storage pool object
*
@@ -17997,130 +17026,6 @@ virConnectDomainEventDeregisterAny(virConnectPtr conn,
/**
- * virConnectNetworkEventRegisterAny:
- * @conn: pointer to the connection
- * @net: pointer to the network
- * @eventID: the event type to receive
- * @cb: callback to the function handling network events
- * @opaque: opaque data to pass on to the callback
- * @freecb: optional function to deallocate opaque when not used anymore
- *
- * Adds a callback to receive notifications of arbitrary network events
- * occurring on a network. This function requires that an event loop
- * has been previously registered with virEventRegisterImpl() or
- * virEventRegisterDefaultImpl().
- *
- * If @net is NULL, then events will be monitored for any network. If @net
- * is non-NULL, then only the specific network will be monitored.
- *
- * Most types of event have a callback providing a custom set of parameters
- * for the event. When registering an event, it is thus necessary to use
- * the VIR_NETWORK_EVENT_CALLBACK() macro to cast the supplied function pointer
- * to match the signature of this method.
- *
- * The virNetworkPtr object handle passed into the callback upon delivery
- * of an event is only valid for the duration of execution of the callback.
- * If the callback wishes to keep the network object after the callback
- * returns, it shall take a reference to it, by calling virNetworkRef().
- * The reference can be released once the object is no longer required
- * by calling virNetworkFree().
- *
- * The return value from this method is a positive integer identifier
- * for the callback. To unregister a callback, this callback ID should
- * be passed to the virConnectNetworkEventDeregisterAny() method.
- *
- * Returns a callback identifier on success, -1 on failure.
- */
-int
-virConnectNetworkEventRegisterAny(virConnectPtr conn,
- virNetworkPtr net,
- int eventID,
- virConnectNetworkEventGenericCallback cb,
- void *opaque,
- virFreeCallback freecb)
-{
- VIR_DEBUG("conn=%p, eventID=%d, cb=%p, opaque=%p, freecb=%p",
- conn, eventID, cb, opaque, freecb);
-
- virResetLastError();
-
- virCheckConnectReturn(conn, -1);
- if (net) {
- virCheckNetworkGoto(net, error);
- if (net->conn != conn) {
- virReportInvalidArg(net,
- _("network '%s' in %s must match
connection"),
- net->name, __FUNCTION__);
- goto error;
- }
- }
- virCheckNonNullArgGoto(cb, error);
- virCheckNonNegativeArgGoto(eventID, error);
-
- if (eventID >= VIR_NETWORK_EVENT_ID_LAST) {
- virReportInvalidArg(eventID,
- _("eventID in %s must be less than %d"),
- __FUNCTION__, VIR_NETWORK_EVENT_ID_LAST);
- goto error;
- }
-
- if (conn->networkDriver &&
conn->networkDriver->connectNetworkEventRegisterAny) {
- int ret;
- ret = conn->networkDriver->connectNetworkEventRegisterAny(conn, net,
- eventID,
- cb, opaque,
- freecb);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
- error:
- virDispatchError(conn);
- return -1;
-}
-
-
-/**
- * virConnectNetworkEventDeregisterAny:
- * @conn: pointer to the connection
- * @callbackID: the callback identifier
- *
- * Removes an event callback. The callbackID parameter should be the
- * value obtained from a previous virConnectNetworkEventRegisterAny() method.
- *
- * Returns 0 on success, -1 on failure
- */
-int
-virConnectNetworkEventDeregisterAny(virConnectPtr conn,
- int callbackID)
-{
- VIR_DEBUG("conn=%p, callbackID=%d", conn, callbackID);
-
- virResetLastError();
-
- virCheckConnectReturn(conn, -1);
- virCheckNonNegativeArgGoto(callbackID, error);
-
- if (conn->networkDriver &&
- conn->networkDriver->connectNetworkEventDeregisterAny) {
- int ret;
- ret = conn->networkDriver->connectNetworkEventDeregisterAny(conn,
- callbackID);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
- error:
- virDispatchError(conn);
- return -1;
-}
-
-
-/**
* virDomainManagedSave:
* @dom: pointer to the domain
* @flags: bitwise-OR of virDomainSaveRestoreFlags
@@ -20199,132 +19104,6 @@ virNodeGetFreePages(virConnectPtr conn,
return -1;
}
-/**
- * virNetworkGetDHCPLeases:
- * @network: Pointer to network object
- * @mac: Optional ASCII formatted MAC address of an interface
- * @leases: Pointer to a variable to store the array containing details on
- * obtained leases, or NULL if the list is not required (just returns
- * number of leases).
- * @flags: Extra flags, not used yet, so callers should always pass 0
- *
- * For DHCPv4, the information returned:
- * - Network Interface Name
- * - Expiry Time
- * - MAC address
- * - IAID (NULL)
- * - IPv4 address (with type and prefix)
- * - Hostname (can be NULL)
- * - Client ID (can be NULL)
- *
- * For DHCPv6, the information returned:
- * - Network Interface Name
- * - Expiry Time
- * - MAC address
- * - IAID (can be NULL, only in rare cases)
- * - IPv6 address (with type and prefix)
- * - Hostname (can be NULL)
- * - Client DUID
- *
- * Note: @mac, @iaid, @ipaddr, @clientid are in ASCII form, not raw bytes.
- * Note: @expirytime can 0, in case the lease is for infinite time.
- *
- * The API fetches leases info of guests in the specified network. If the
- * optional parameter @mac is specified, the returned list will contain only
- * lease info about a specific guest interface with @mac. There can be
- * multiple leases for a single @mac because this API supports DHCPv6 too.
- *
- * Returns the number of leases found or -1 and sets @leases to NULL in
- * case of error. On success, the array stored into @leases is guaranteed to
- * have an extra allocated element set to NULL but not included in the return
- * count, to make iteration easier. The caller is responsible for calling
- * virNetworkDHCPLeaseFree() on each array element, then calling free() on @leases.
- *
- * See also virNetworkGetDHCPLeasesForMAC() as a convenience for filtering
- * the list to a single MAC address.
- *
- * Example of usage:
- *
- * virNetworkDHCPLeasePtr *leases = NULL;
- * virNetworkPtr network = ... obtain a network pointer here ...;
- * size_t i;
- * int nleases;
- * unsigned int flags = 0;
- *
- * nleases = virNetworkGetDHCPLeases(network, NULL, &leases, flags);
- * if (nleases < 0)
- * error();
- *
- * ... do something with returned values, for example:
- *
- * for (i = 0; i < nleases; i++) {
- * virNetworkDHCPLeasePtr lease = leases[i];
- *
- * printf("Time(epoch): %lu, MAC address: %s, "
- * "IP address: %s, Hostname: %s, ClientID: %s\n",
- * lease->expirytime, lease->mac, lease->ipaddr,
- * lease->hostname, lease->clientid);
- *
- * virNetworkDHCPLeaseFree(leases[i]);
- * }
- *
- * free(leases);
- *
- */
-int
-virNetworkGetDHCPLeases(virNetworkPtr network,
- const char *mac,
- virNetworkDHCPLeasePtr **leases,
- unsigned int flags)
-{
- virConnectPtr conn;
- VIR_DEBUG("network=%p, mac='%s' leases=%p, flags=%x",
- network, NULLSTR(mac), leases, flags);
-
- virResetLastError();
-
- if (leases)
- *leases = NULL;
-
- virCheckNetworkReturn(network, -1);
-
- conn = network->conn;
-
- if (conn->networkDriver &&
conn->networkDriver->networkGetDHCPLeases) {
- int ret;
- ret = conn->networkDriver->networkGetDHCPLeases(network, mac, leases,
flags);
- if (ret < 0)
- goto error;
- return ret;
- }
-
- virReportUnsupportedError();
-
- error:
- virDispatchError(network->conn);
- return -1;
-}
-
-
-/**
- * virNetworkDHCPLeaseFree:
- * @lease: pointer to a leases object
- *
- * Frees all the memory occupied by @lease.
- */
-void
-virNetworkDHCPLeaseFree(virNetworkDHCPLeasePtr lease)
-{
- if (!lease)
- return;
- VIR_FREE(lease->iface);
- VIR_FREE(lease->mac);
- VIR_FREE(lease->iaid);
- VIR_FREE(lease->ipaddr);
- VIR_FREE(lease->hostname);
- VIR_FREE(lease->clientid);
- VIR_FREE(lease);
-}
/**
* virConnectGetDomainCapabilities:
--
2.1.0