File 0020-fcoeadm_display-Fix-display-of-NPIV-ports.patch of Package fcoe-utils

From 4b67d80294a059e0b1f94c194fe4c164dc5b86eb Mon Sep 17 00:00:00 2001
From: Johannes Thumshirn <jthumshirn@suse.de>
Date: Mon, 2 Nov 2015 12:41:11 +0100
Subject: [PATCH] fcoeadm_display: Fix display of NPIV ports

With the current libHBAAPI less implementation it was not possible to display
interface infotmation for NPIV ports, as the sysfs hba implementation assumed a
1:1 mapping of netdevices to FC hosts.

This is the output of fcoeadm -i fcoe0 before reading the host's vport
attributes from sysfs.

   Description:      BCM57840 NetXtreme II 10/20-Gigabit Ethernet
   Revision:         11
   Manufacturer:     Broadcom Corporation
   Serial Number:    6CC2173EA1D0

   Driver:           bnx2x 1.710.51-0
   Number of Ports:  1

       Symbolic Name:     bnx2fc (QLogic BCM57840) v2.4.2 over fcoe0
       OS Device Name:    host1
       Node Name:         0x20006cc2173ea1d1
       Port Name:         0x10006cc2173ea1d1
       FabricName:        0x100000c0dd0ce717
       Speed:             unknown
       Supported Speed:   1 Gbit, 10 Gbit
       MaxFrameSize:      2048 bytes
       FC-ID (Port ID):   0x660710
       State:             Online

This is the same output including the read from sysfs

   Description:      BCM57840 NetXtreme II 10/20-Gigabit Ethernet
   Revision:         11
   Manufacturer:     Broadcom Corporation
   Serial Number:    6CC2173EA1D0
   Driver:           bnx2x 1.710.51-0
   Number of Ports:  1

       Symbolic Name:     bnx2fc (QLogic BCM57840) v2.4.2 over fcoe0
       OS Device Name:    host1
       Node Name:         0x20006cc2173ea1d1
       Port Name:         0x10006cc2173ea1d1
       FabricName:        0x100000c0dd0ce717
       Speed:             unknown
       Supported Speed:   1 Gbit, 10 Gbit
       MaxFrameSize:      2048 bytes
       FC-ID (Port ID):   0x660710
       State:             Online

       Symbolic Name:     bnx2fc (QLogic BCM57840) v2.4.2 over fcoe0
       OS Device Name:    host2
       Node Name:         0x5555666677778888
       Port Name:         0x1111222233334444
       FabricName:        0x100000c0dd0ce717
       Speed:             unknown
       Supported Speed:   1 Gbit, 10 Gbit
       MaxFrameSize:      2048 bytes
       FC-ID (Port ID):   0x660717
       State:             Online

       Symbolic Name:     bnx2fc (QLogic BCM57840) v2.4.2 over fcoe0
       OS Device Name:    host3
       Node Name:         0x1111222233334444
       Port Name:         0x5555666677778888
       FabricName:        0x100000c0dd0ce717
       Speed:             unknown
       Supported Speed:   1 Gbit, 10 Gbit
       MaxFrameSize:      2048 bytes
       FC-ID (Port ID):   0x660718
       State:             Online

Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
---
 fcoeadm_display.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/fcoeadm_display.c b/fcoeadm_display.c
index e236629..16ccb6b 100644
--- a/fcoeadm_display.c
+++ b/fcoeadm_display.c
@@ -540,6 +540,44 @@ free_host:
 	return rc;
 }
 
+static int get_host_from_vport(struct dirent *dp, void *arg)
+{
+	if (!strncmp(dp->d_name, "host", strlen("host"))) {
+		struct port_attributes *port_attrs;
+
+		port_attrs = get_port_attribs(dp->d_name);
+		if (!port_attrs)
+			return 0;
+		printf("\n");
+		show_port_info(port_attrs);
+		free(port_attrs);
+	}
+
+	return 0;
+}
+
+static int crawl_vports(struct dirent *dp, void *arg)
+{
+	char *oldpath = arg;
+
+	if (!strncmp(dp->d_name, "vport", strlen("vport"))) {
+		char path[1024];
+
+		snprintf(path, sizeof(path), "%s/%s", oldpath, dp->d_name);
+		sa_dir_read(path, get_host_from_vport, NULL);
+	}
+	return 0;
+}
+
+static void show_host_vports(const char *host)
+{
+	char path[1024];
+
+	snprintf(path, sizeof(path), "%s/%s/device/", SYSFS_HOST_DIR, host);
+	sa_dir_read(path, crawl_vports, path);
+
+}
+
 static enum fcoe_status display_one_adapter_info(char *ifname)
 {
 	struct port_attributes *port_attrs;
@@ -569,6 +607,7 @@ static enum fcoe_status display_one_adapter_info(char *ifname)
 	 */
 	show_hba_info(hba_info);
 	show_port_info(port_attrs);
+	show_host_vports(host);
 
 	rc = SUCCESS;
 
-- 
1.8.5.6

openSUSE Build Service is sponsored by