diff options
author | Osier Yang <jyang@redhat.com> | 2011-12-06 07:09:03 -0500 |
---|---|---|
committer | Osier Yang <jyang@redhat.com> | 2011-12-07 18:42:08 +0800 |
commit | cc17f09246212efff27d6f48cae24ee09d1b5eab (patch) | |
tree | 2e9f2cb5abb071c0a5a937f0887155d832ed4606 | |
parent | Conditionalize daemonPath decl for Win32 which lacks UNIX sockets (diff) | |
download | libvirt-cc17f09246212efff27d6f48cae24ee09d1b5eab.tar.gz libvirt-cc17f09246212efff27d6f48cae24ee09d1b5eab.tar.bz2 libvirt-cc17f09246212efff27d6f48cae24ee09d1b5eab.zip |
npiv: Expose fabric_name outside
This patch is to expose the fabric_name of fc_host class, which
might be useful for users who wants to known which fabric the
(v)HBA connects to.
The patch also adds the missed capabilities' XML schema of scsi_host,
(of course, with fabric_wwn added), and update the documents
(docs/formatnode.html.in)
-rw-r--r-- | docs/formatnode.html.in | 7 | ||||
-rw-r--r-- | docs/schemas/nodedev.rng | 40 | ||||
-rw-r--r-- | src/conf/node_device_conf.c | 3 | ||||
-rw-r--r-- | src/conf/node_device_conf.h | 1 | ||||
-rw-r--r-- | src/node_device/node_device_linux_sysfs.c | 10 |
5 files changed, 61 insertions, 0 deletions
diff --git a/docs/formatnode.html.in b/docs/formatnode.html.in index 126f8de5c..c04d04d1c 100644 --- a/docs/formatnode.html.in +++ b/docs/formatnode.html.in @@ -126,6 +126,7 @@ <dd>A network protocol exposed by the device, where the attribute <code>type</code> can be "80203" for IEEE 802.3, or "80211" for various flavors of IEEE 802.11. + </dd> </dl> </dd> <dt><code>scsi_host</code></dt> @@ -133,6 +134,12 @@ <dl> <dt><code>host</code></dt> <dd>The SCSI host number.</dd> + <dt><code>capability</code></dt> + <dd>Current capabilities include "vports_ops" (indicates + vport operations are supported) and "fc_host", the later + implies following sub-elements: <code>wwnn</code>, + <code>wwpn</code>, <code>fabric_wwn</code>. + </dd> </dl> </dd> <dt><code>scsi</code></dt> diff --git a/docs/schemas/nodedev.rng b/docs/schemas/nodedev.rng index 55191d990..1b9a2d122 100644 --- a/docs/schemas/nodedev.rng +++ b/docs/schemas/nodedev.rng @@ -216,6 +216,35 @@ </attribute> </define> + <define name='wwn'> + <data type='string'> + <param name='pattern'>(0-9a-fA-F){16}</param> + </data> + </define> + + <define name='capsfchost'> + <attribute name='type'> + <value>fc_host</value> + </attribute> + + <element name='wwnn'> + <ref name='wwn'/> + </element> + + <element name='wwpn'> + <ref name='wwn'/> + </element> + + <element name='fabric_wwn'> + <ref name='wwn'/> + </element> + </define> + + <define name='capsvports'> + <attribute name='type'> + <value>vports_ops</value> + </attribute> + </define> <define name='capscsihost'> <attribute name='type'> @@ -225,6 +254,17 @@ <element name='host'> <ref name='uint'/> </element> + + <optional> + <zeroOrMore> + <element name='capability'> + <choice> + <ref name='capsfchost'/> + <ref name='capsvports'/> + </choice> + </element> + </zeroOrMore> + </optional> </define> <define name='capscsi'> diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c index 084121f26..d9dc9ac77 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -396,6 +396,8 @@ char *virNodeDeviceDefFormat(const virNodeDeviceDefPtr def) data->scsi_host.wwnn); virBufferEscapeString(&buf, " <wwpn>%s</wwpn>\n", data->scsi_host.wwpn); + virBufferEscapeString(&buf, " <fabric_wwn>%s</fabric_wwn>\n", + data->scsi_host.fabric_wwn); virBufferAddLit(&buf, " </capability>\n"); } if (data->scsi_host.flags & VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS) { @@ -1378,6 +1380,7 @@ void virNodeDevCapsDefFree(virNodeDevCapsDefPtr caps) case VIR_NODE_DEV_CAP_SCSI_HOST: VIR_FREE(data->scsi_host.wwnn); VIR_FREE(data->scsi_host.wwpn); + VIR_FREE(data->scsi_host.fabric_wwn); break; case VIR_NODE_DEV_CAP_SCSI_TARGET: VIR_FREE(data->scsi_target.name); diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h index 17be0313a..a1833a0e6 100644 --- a/src/conf/node_device_conf.h +++ b/src/conf/node_device_conf.h @@ -141,6 +141,7 @@ struct _virNodeDevCapsDef { unsigned int host; char *wwnn; char *wwpn; + char *fabric_wwn; unsigned int flags; } scsi_host; struct { diff --git a/src/node_device/node_device_linux_sysfs.c b/src/node_device/node_device_linux_sysfs.c index d3528007b..380be9c61 100644 --- a/src/node_device/node_device_linux_sysfs.c +++ b/src/node_device/node_device_linux_sysfs.c @@ -149,10 +149,20 @@ int check_fc_host_linux(union _virNodeDevCapData *d) retval = -1; } + if (read_wwn(d->scsi_host.host, + "fabric_name", + &d->scsi_host.fabric_wwn) == -1) { + VIR_ERROR(_("Failed to read fabric WWN for host%d"), + d->scsi_host.host); + retval = -1; + goto out; + } + out: if (retval == -1) { VIR_FREE(d->scsi_host.wwnn); VIR_FREE(d->scsi_host.wwpn); + VIR_FREE(d->scsi_host.fabric_wwn); } VIR_FREE(sysfs_path); return retval; |