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) --- docs/formatnode.html.in | 7 +++++ docs/schemas/nodedev.rng | 40 +++++++++++++++++++++++++++++ src/conf/node_device_conf.c | 3 ++ src/conf/node_device_conf.h | 1 + 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 126f8de..c04d04d 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 55191d9..1b9a2d1 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 9d48ff8..ea6ebde 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -389,6 +389,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) { @@ -1405,6 +1407,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 e317354..e787fc7 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 d352800..380be9c 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; -- 1.7.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list