]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: Add more fchost search fields for storage pool vHBA creation
authorJohn Ferlan <jferlan@redhat.com>
Thu, 17 Nov 2016 22:48:35 +0000 (17:48 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Fri, 6 Jan 2017 22:15:34 +0000 (17:15 -0500)
Add new fields to the fchost structure to allow creation of a vHBA via
the storage pool when a parent_wwnn/parent_wwpn or parent_fabric_wwn is
supplied in the storage pool XML.

docs/schemas/basictypes.rng
src/conf/storage_conf.c
src/conf/storage_conf.h

index 1b4f980e75f541437898721fe3e42291b0d76a73..cc560e66f28e6e210552edabd0779fc8fda4787b 100644 (file)
               <ref name="virYesNo"/>
             </attribute>
           </optional>
+          <optional>
+            <attribute name='parent_wwnn'>
+              <ref name='wwn'/>
+            </attribute>
+          </optional>
+          <optional>
+            <attribute name='parent_wwpn'>
+              <ref name='wwn'/>
+            </attribute>
+          </optional>
+          <optional>
+            <attribute name='parent_fabric_wwn'>
+              <ref name='wwn'/>
+            </attribute>
+          </optional>
           <attribute name='wwnn'>
             <ref name='wwn'/>
           </attribute>
index 71ea0c9960240a602f13725c80fc15df370f3c38..c53f08046db9935e2f909129fbfbbd847f3f67a0 100644 (file)
@@ -335,6 +335,9 @@ virStoragePoolSourceAdapterClear(virStoragePoolSourceAdapterPtr adapter)
         VIR_FREE(adapter->data.fchost.wwnn);
         VIR_FREE(adapter->data.fchost.wwpn);
         VIR_FREE(adapter->data.fchost.parent);
+        VIR_FREE(adapter->data.fchost.parent_wwnn);
+        VIR_FREE(adapter->data.fchost.parent_wwpn);
+        VIR_FREE(adapter->data.fchost.parent_fabric_wwn);
     } else if (adapter->type ==
                VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_SCSI_HOST) {
         VIR_FREE(adapter->data.scsi_host.name);
@@ -591,10 +594,17 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
                 }
             }
 
-            source->adapter.data.fchost.wwnn =
-                virXPathString("string(./adapter/@wwnn)", ctxt);
+            source->adapter.data.fchost.parent_wwnn =
+                virXPathString("string(./adapter/@parent_wwnn)", ctxt);
+            source->adapter.data.fchost.parent_wwpn =
+                virXPathString("string(./adapter/@parent_wwpn)", ctxt);
+            source->adapter.data.fchost.parent_fabric_wwn =
+                virXPathString("string(./adapter/@parent_fabric_wwn)", ctxt);
+
             source->adapter.data.fchost.wwpn =
                 virXPathString("string(./adapter/@wwpn)", ctxt);
+            source->adapter.data.fchost.wwnn =
+                virXPathString("string(./adapter/@wwnn)", ctxt);
         } else if (source->adapter.type ==
                    VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_SCSI_HOST) {
 
@@ -1100,6 +1110,13 @@ virStoragePoolSourceFormat(virBufferPtr buf,
             if (src->adapter.data.fchost.managed)
                 virBufferAsprintf(buf, " managed='%s'",
                                   virTristateBoolTypeToString(src->adapter.data.fchost.managed));
+            virBufferEscapeString(buf, " parent_wwnn='%s'",
+                                  src->adapter.data.fchost.parent_wwnn);
+            virBufferEscapeString(buf, " parent_wwpn='%s'",
+                                  src->adapter.data.fchost.parent_wwpn);
+            virBufferEscapeString(buf, " parent_fabric_wwn='%s'",
+                                  src->adapter.data.fchost.parent_fabric_wwn);
+
             virBufferAsprintf(buf, " wwnn='%s' wwpn='%s'/>\n",
                               src->adapter.data.fchost.wwnn,
                               src->adapter.data.fchost.wwpn);
index 185ae5e71d73aa49d21a28649e97a10401b05c63..b35471d988d48da5568471dfd9bb0d7a4d9cea36 100644 (file)
@@ -193,6 +193,9 @@ struct _virStoragePoolSourceAdapter {
         } scsi_host;
         struct {
             char *parent;
+            char *parent_wwnn;
+            char *parent_wwpn;
+            char *parent_fabric_wwn;
             char *wwnn;
             char *wwpn;
             int managed;        /* enum virTristateSwitch */