summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristina Hanicova <khanicov@redhat.com>2021-09-15 13:07:27 +0200
committerMichal Privoznik <mprivozn@redhat.com>2021-09-16 16:26:18 +0200
commit6a0a2840cf93a5dd6fd7f58d473f9e99e48b62a1 (patch)
treea84241d587630d9f9848ff4954a681bdb1bde85c /src
parentddba9f1dc945383428a312fbd7a6d370d16f2865 (diff)
downloadlibvirt-6a0a2840cf93a5dd6fd7f58d473f9e99e48b62a1.tar.gz
api: add public virNetworkCreateXMLFlags() and remote protocol
This new API creates network with given flags. Signed-off-by: Kristina Hanicova <khanicov@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Diffstat (limited to 'src')
-rw-r--r--src/driver-network.h6
-rw-r--r--src/libvirt-network.c41
-rw-r--r--src/libvirt_public.syms1
-rw-r--r--src/remote/remote_driver.c1
-rw-r--r--src/remote/remote_protocol.x18
-rw-r--r--src/remote_protocol-structs8
6 files changed, 74 insertions, 1 deletions
diff --git a/src/driver-network.h b/src/driver-network.h
index d31d7c667d..99efd4c8aa 100644
--- a/src/driver-network.h
+++ b/src/driver-network.h
@@ -70,6 +70,11 @@ typedef virNetworkPtr
const char *xmlDesc);
typedef virNetworkPtr
+(*virDrvNetworkCreateXMLFlags)(virConnectPtr conn,
+ const char *xmlDesc,
+ unsigned int flags);
+
+typedef virNetworkPtr
(*virDrvNetworkDefineXML)(virConnectPtr conn,
const char *xml);
@@ -176,6 +181,7 @@ struct _virNetworkDriver {
virDrvNetworkLookupByUUID networkLookupByUUID;
virDrvNetworkLookupByName networkLookupByName;
virDrvNetworkCreateXML networkCreateXML;
+ virDrvNetworkCreateXMLFlags networkCreateXMLFlags;
virDrvNetworkDefineXML networkDefineXML;
virDrvNetworkDefineXMLFlags networkDefineXMLFlags;
virDrvNetworkUndefine networkUndefine;
diff --git a/src/libvirt-network.c b/src/libvirt-network.c
index cf32912063..ee53b9f2c5 100644
--- a/src/libvirt-network.c
+++ b/src/libvirt-network.c
@@ -428,6 +428,47 @@ virNetworkCreateXML(virConnectPtr conn, const char *xmlDesc)
/**
+ * virNetworkCreateXMLFlags:
+ * @conn: pointer to the hypervisor connection
+ * @xmlDesc: an XML description of the network
+ * @flags: extra flags; not used yet, so callers should always pass 0
+ *
+ * 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
+virNetworkCreateXMLFlags(virConnectPtr conn, const char *xmlDesc, unsigned int flags)
+{
+ VIR_DEBUG("conn=%p, xmlDesc=%s, flags=0x%x", conn, NULLSTR(xmlDesc), flags);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, NULL);
+ virCheckNonNullArgGoto(xmlDesc, error);
+ virCheckReadOnlyGoto(conn->flags, error);
+
+ if (conn->networkDriver && conn->networkDriver->networkCreateXMLFlags) {
+ virNetworkPtr ret;
+ ret = conn->networkDriver->networkCreateXMLFlags(conn, xmlDesc, flags);
+ 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
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index 905072a21e..788a967df7 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -908,6 +908,7 @@ LIBVIRT_7.8.0 {
virNodeDeviceGetAutostart;
virNodeDeviceIsPersistent;
virNodeDeviceIsActive;
+ virNetworkCreateXMLFlags;
} LIBVIRT_7.7.0;
# .... define new API here using predicted next version number ....
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index 49afcc9924..83ea33e91b 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -8552,6 +8552,7 @@ static virNetworkDriver network_driver = {
.networkLookupByUUID = remoteNetworkLookupByUUID, /* 0.3.0 */
.networkLookupByName = remoteNetworkLookupByName, /* 0.3.0 */
.networkCreateXML = remoteNetworkCreateXML, /* 0.3.0 */
+ .networkCreateXMLFlags = remoteNetworkCreateXMLFlags, /* 7.8.0 */
.networkDefineXML = remoteNetworkDefineXML, /* 0.3.0 */
.networkDefineXMLFlags = remoteNetworkDefineXMLFlags, /* 7.7.0 */
.networkUndefine = remoteNetworkUndefine, /* 0.3.0 */
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
index 9d8a66786b..296610a94d 100644
--- a/src/remote/remote_protocol.x
+++ b/src/remote/remote_protocol.x
@@ -1530,6 +1530,15 @@ struct remote_network_create_xml_ret {
remote_nonnull_network net;
};
+struct remote_network_create_xml_flags_args {
+ remote_nonnull_string xml;
+ unsigned int flags;
+};
+
+struct remote_network_create_xml_flags_ret {
+ remote_nonnull_network net;
+};
+
struct remote_network_define_xml_args {
remote_nonnull_string xml;
};
@@ -6875,6 +6884,13 @@ enum remote_procedure {
* @priority: high
* @acl: node_device:read
*/
- REMOTE_PROC_NODE_DEVICE_IS_ACTIVE = 436
+ REMOTE_PROC_NODE_DEVICE_IS_ACTIVE = 436,
+ /**
+ * @generate: both
+ * @priority: high
+ * @acl: network:write
+ * @acl: network:start
+ */
+ REMOTE_PROC_NETWORK_CREATE_XML_FLAGS = 437
};
diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs
index 8d012dc8a0..de06895d53 100644
--- a/src/remote_protocol-structs
+++ b/src/remote_protocol-structs
@@ -1098,6 +1098,13 @@ struct remote_network_create_xml_args {
struct remote_network_create_xml_ret {
remote_nonnull_network net;
};
+struct remote_network_create_xml_flags_args {
+ remote_nonnull_string xml;
+ u_int flags;
+};
+struct remote_network_create_xml_flags_ret {
+ remote_nonnull_network net;
+};
struct remote_network_define_xml_args {
remote_nonnull_string xml;
};
@@ -3665,4 +3672,5 @@ enum remote_procedure {
REMOTE_PROC_NODE_DEVICE_SET_AUTOSTART = 434,
REMOTE_PROC_NODE_DEVICE_IS_PERSISTENT = 435,
REMOTE_PROC_NODE_DEVICE_IS_ACTIVE = 436,
+ REMOTE_PROC_NETWORK_CREATE_XML_FLAGS = 437,
};