]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
api: add public virNetworkCreateXMLFlags() and remote protocol
authorKristina Hanicova <khanicov@redhat.com>
Wed, 15 Sep 2021 11:07:27 +0000 (13:07 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 16 Sep 2021 14:26:18 +0000 (16:26 +0200)
This new API creates network with given flags.

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
include/libvirt/libvirt-network.h
src/driver-network.h
src/libvirt-network.c
src/libvirt_public.syms
src/remote/remote_driver.c
src/remote/remote_protocol.x
src/remote_protocol-structs

index df29aabd5f4cfa884db11599b1ebbe577333b354..e505c3eb7e93e434aea0493c63bebab5a7726c10 100644 (file)
@@ -118,6 +118,9 @@ virNetworkPtr           virNetworkLookupByUUIDString    (virConnectPtr conn,
  */
 virNetworkPtr           virNetworkCreateXML     (virConnectPtr conn,
                                                  const char *xmlDesc);
+virNetworkPtr           virNetworkCreateXMLFlags(virConnectPtr conn,
+                                                 const char *xmlDesc,
+                                                 unsigned int flags);
 
 typedef enum {
     VIR_NETWORK_DEFINE_VALIDATE = 1 << 0, /* Validate the XML document against schema */
index d31d7c667db40a88b83882f9354cbb52bf118df8..99efd4c8aaec754eee1a23f2d87fc437dcf21e88 100644 (file)
@@ -69,6 +69,11 @@ typedef virNetworkPtr
 (*virDrvNetworkCreateXML)(virConnectPtr conn,
                           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;
index cf329120636cbce91c46adb3224171a5a0576c52..ee53b9f2c5ef141b7c4adeaf9aadd4fc9bca49fc 100644 (file)
@@ -427,6 +427,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
index 905072a21ead84466425357e40f01f82aca79550..788a967df78f58b6ef899c1e8ee56aa2639d847c 100644 (file)
@@ -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 ....
index 49afcc992495d1d1773ec737386a89ecdfac19d0..83ea33e91b887e56d487afb8731e2470e37eb3b5 100644 (file)
@@ -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 */
index 9d8a66786bbc19b10aff54398bb476aff3a554bb..296610a94da454d5872844be92794c52863e9fe3 100644 (file)
@@ -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
 };
index 8d012dc8a00bdd98be78975f748a6ca0808eb3e7..de06895d537c5e33c3bd642178f6eb49f73a496f 100644 (file)
@@ -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,
 };