[libvirt] [PATCH v4 03/10] conf: Add optional NFS Source Pool <protocol ver='n'/> option

John Ferlan jferlan at redhat.com
Thu Jan 17 21:22:09 UTC 2019


Add an optional way to define which NFS Server version will be
used to content the target NFS server.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 docs/formatstorage.html.in                    | 16 ++++++++++++++
 docs/schemas/storagepool.rng                  |  7 ++++++
 src/conf/storage_conf.c                       | 22 +++++++++++++++++++
 src/conf/storage_conf.h                       |  3 +++
 .../pool-netfs-protocol-ver.xml               | 21 ++++++++++++++++++
 .../pool-netfs-protocol-ver.xml               | 21 ++++++++++++++++++
 tests/storagepoolxml2xmltest.c                |  1 +
 7 files changed, 91 insertions(+)
 create mode 100644 tests/storagepoolxml2xmlin/pool-netfs-protocol-ver.xml
 create mode 100644 tests/storagepoolxml2xmlout/pool-netfs-protocol-ver.xml

diff --git a/docs/formatstorage.html.in b/docs/formatstorage.html.in
index b6bf3edbd2..b1b76a1dda 100644
--- a/docs/formatstorage.html.in
+++ b/docs/formatstorage.html.in
@@ -121,6 +121,16 @@
 </source>
 ...</pre>
 
+    <pre>
+...
+  <source>
+    <host name='localhost'/>
+    <dir path='/var/lib/libvirt/images'/>
+    <format type='nfs'/>
+    <protocol ver='3'/>
+  </source>
+...</pre>
+
     <dl>
       <dt><code>device</code></dt>
       <dd>Provides the source for pools backed by physical devices
@@ -386,6 +396,12 @@
         LVM metadata type. All drivers are required to have a default
         value for this, so it is optional. <span class="since">Since 0.4.1</span></dd>
 
+      <dt><code>protocol</code></dt>
+      <dd>For a <code>netfs</code> Storage Pool provide a mechanism to
+        define which NFS protocol version number will be used to contact
+        the server's NFS service. The attribute <code>ver</code> accepts
+        an unsigned integer as the version number to use.
+        <span class="since">Since 5.1.0</span></dd>
       <dt><code>vendor</code></dt>
       <dd>Provides optional information about the vendor of the
         storage device. This contains a single
diff --git a/docs/schemas/storagepool.rng b/docs/schemas/storagepool.rng
index 74f4363106..f9a16422cc 100644
--- a/docs/schemas/storagepool.rng
+++ b/docs/schemas/storagepool.rng
@@ -531,6 +531,13 @@
             <ref name='sourceinfohost'/>
             <ref name='sourceinfodir'/>
             <ref name='sourcefmtnetfs'/>
+            <optional>
+              <element name='protocol'>
+                <attribute name='ver'>
+                  <ref name='unsignedInt'/>
+                </attribute>
+              </element>
+            </optional>
             <optional>
               <ref name='sourceinfovendor'/>
             </optional>
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 55db7a96f5..76e0bb987b 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -420,6 +420,7 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
     virStorageAuthDefPtr authdef = NULL;
     char *name = NULL;
     char *port = NULL;
+    char *ver = NULL;
     int n;
 
     relnode = ctxt->node;
@@ -546,6 +547,24 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
         authdef = NULL;
     }
 
+    /* Option protocol version string (NFSvN) */
+    if ((ver = virXPathString("string(./protocol/@ver)", ctxt))) {
+        if ((source->format != VIR_STORAGE_POOL_NETFS_NFS) &&
+            (source->format != VIR_STORAGE_POOL_NETFS_AUTO)) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("storage pool protocol ver unsupported for "
+                             "pool type '%s'"),
+                           virStoragePoolFormatFileSystemNetTypeToString(source->format));
+            goto cleanup;
+        }
+        if (virStrToLong_uip(ver, NULL, 0, &source->protocolVer) < 0) {
+            virReportError(VIR_ERR_XML_ERROR,
+                           _("storage pool protocol ver '%s' is malformaed"),
+                           ver);
+            goto cleanup;
+        }
+    }
+
     source->vendor = virXPathString("string(./vendor/@name)", ctxt);
     source->product = virXPathString("string(./product/@name)", ctxt);
 
@@ -962,6 +981,9 @@ virStoragePoolSourceFormat(virBufferPtr buf,
     if (src->auth)
         virStorageAuthDefFormat(buf, src->auth);
 
+    if (src->protocolVer)
+        virBufferAsprintf(buf, "<protocol ver='%u'/>\n", src->protocolVer);
+
     virBufferEscapeString(buf, "<vendor name='%s'/>\n", src->vendor);
     virBufferEscapeString(buf, "<product name='%s'/>\n", src->product);
 
diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h
index dc0aa2ab29..a6763447a7 100644
--- a/src/conf/storage_conf.h
+++ b/src/conf/storage_conf.h
@@ -197,6 +197,9 @@ struct _virStoragePoolSource {
      * or lvm version, etc.
      */
     int format;
+
+    /* Protocol version value for netfs */
+    unsigned int protocolVer;
 };
 
 typedef struct _virStoragePoolTarget virStoragePoolTarget;
diff --git a/tests/storagepoolxml2xmlin/pool-netfs-protocol-ver.xml b/tests/storagepoolxml2xmlin/pool-netfs-protocol-ver.xml
new file mode 100644
index 0000000000..40f3f94e41
--- /dev/null
+++ b/tests/storagepoolxml2xmlin/pool-netfs-protocol-ver.xml
@@ -0,0 +1,21 @@
+<pool type='netfs'>
+  <name>nfsimages</name>
+  <uuid>7641d5a8-af11-f730-a34e-0a7dfcede71f</uuid>
+  <capacity>0</capacity>
+  <allocation>0</allocation>
+  <available>0</available>
+  <source>
+    <host name='localhost'/>
+    <dir path='/var/lib/libvirt/images'/>
+    <format type='nfs'/>
+    <protocol ver='3'/>
+  </source>
+  <target>
+    <path>/mnt</path>
+    <permissions>
+      <mode>0700</mode>
+      <owner>0</owner>
+      <group>0</group>
+    </permissions>
+  </target>
+</pool>
diff --git a/tests/storagepoolxml2xmlout/pool-netfs-protocol-ver.xml b/tests/storagepoolxml2xmlout/pool-netfs-protocol-ver.xml
new file mode 100644
index 0000000000..5fcad1305b
--- /dev/null
+++ b/tests/storagepoolxml2xmlout/pool-netfs-protocol-ver.xml
@@ -0,0 +1,21 @@
+<pool type='netfs'>
+  <name>nfsimages</name>
+  <uuid>7641d5a8-af11-f730-a34e-0a7dfcede71f</uuid>
+  <capacity unit='bytes'>0</capacity>
+  <allocation unit='bytes'>0</allocation>
+  <available unit='bytes'>0</available>
+  <source>
+    <host name='localhost'/>
+    <dir path='/var/lib/libvirt/images'/>
+    <format type='nfs'/>
+    <protocol ver='3'/>
+  </source>
+  <target>
+    <path>/mnt</path>
+    <permissions>
+      <mode>0700</mode>
+      <owner>0</owner>
+      <group>0</group>
+    </permissions>
+  </target>
+</pool>
diff --git a/tests/storagepoolxml2xmltest.c b/tests/storagepoolxml2xmltest.c
index 707d09f5c2..d18390034f 100644
--- a/tests/storagepoolxml2xmltest.c
+++ b/tests/storagepoolxml2xmltest.c
@@ -83,6 +83,7 @@ mymain(void)
     DO_TEST("pool-iscsi-auth");
     DO_TEST("pool-netfs");
     DO_TEST("pool-netfs-auto");
+    DO_TEST("pool-netfs-protocol-ver");
     DO_TEST("pool-netfs-gluster");
     DO_TEST("pool-netfs-cifs");
     DO_TEST("pool-scsi");
-- 
2.20.1




More information about the libvir-list mailing list