[ofa-general] [PATCH - diags] Added support to query the GUID table entries

Dotan Barak dotanb at dev.mellanox.co.il
Wed Mar 14 04:25:32 PDT 2007


Added support to query the GUID table entries.

Signed-off-by: Dotan Barak <dotanb at mellanox.co.il>

---

Index: gen2_devel_user/src/userspace/management/diags/src/smpquery.c
===================================================================
--- gen2_devel_user.orig/src/userspace/management/diags/src/smpquery.c	2007-03-12 18:05:09.000000000 +0200
+++ gen2_devel_user/src/userspace/management/diags/src/smpquery.c	2007-03-12 18:09:52.000000000 +0200
@@ -44,6 +44,9 @@
 #include <getopt.h>
 #include <netinet/in.h>
 
+#define __STDC_FORMAT_MACROS
+#include <inttypes.h>
+
 #define __BUILD_VERSION_TAG__ 1.2
 #include <common.h>
 #include <umad.h>
@@ -65,7 +68,7 @@ typedef struct match_rec {
 } match_rec_t;
 
 static op_fn_t	node_desc, node_info, port_info, switch_info, pkey_table,
-	sl2vl_table, vlarb_table;
+	sl2vl_table, vlarb_table, guid_info;
 
 static const match_rec_t match_tbl[] = {
 	{ "nodeinfo", node_info },
@@ -75,6 +78,7 @@ static const match_rec_t match_tbl[] = {
 	{ "pkeys", pkey_table, 1 },
 	{ "sl2vl", sl2vl_table, 1 },
 	{ "vlarb", vlarb_table, 1 },
+	{ "guid", guid_info, 1 },
 	{0}
 };
 
@@ -341,6 +345,51 @@ vlarb_table(ib_portid_t *dest, char **ar
 	return ret;
 }
 
+static char *
+guid_info(ib_portid_t *dest, char **argv, int argc)
+{
+	uint8_t data[IB_SMP_DATA_SIZE];
+	uint32_t i, j, k;
+	uint64_t *p;
+	uint mod;
+	int n, phy_ports;
+	int portnum = 0;
+
+	if (argc > 0)
+		portnum = strtol(argv[0], 0, 0);
+
+	/* Get the guid capacity */
+	if (!smp_query(data, dest, IB_ATTR_NODE_INFO, 0, 0))
+		return "node info query failed";
+
+	mad_decode_field(data, IB_NODE_NPORTS_F, &phy_ports);
+	if (portnum > phy_ports)
+		return "invalid port number";
+
+	if (!smp_query(data, dest, IB_ATTR_PORT_INFO, 0, 0))
+		return "port info failed";
+	mad_decode_field(data, IB_PORT_GUID_CAP_F, &n);
+
+	for (i = 0; i < (n + 7) / 8; i++) {
+		mod =  i;
+		if (!smp_query(data, dest, IB_ATTR_GUID_INFO, mod, 0))
+			return "guid info query failed";
+		if (i + 1 == (n + 7) / 8)
+			k = ((n + 1 - i * 8) / 2) * 2;
+		else
+			k = 8;
+		p = (uint64_t *) data;
+		for (j = 0; j < k; j += 2, p += 2) {
+			printf("%4u: 0x%016"PRIx64" 0x%016"PRIx64"\n",
+				(i * 8) + j,
+				ntohll(p[0]), ntohll(p[1]));
+		}
+	}
+	printf("%d guids capacity for this port\n", n);
+
+	return 0;
+}
+
 static op_fn_t *
 match_op(char *name)
 {
Index: gen2_devel_user/src/userspace/management/libibmad/include/infiniband/mad.h
===================================================================
--- gen2_devel_user.orig/src/userspace/management/libibmad/include/infiniband/mad.h	2007-02-26 16:01:55.000000000 +0200
+++ gen2_devel_user/src/userspace/management/libibmad/include/infiniband/mad.h	2007-03-12 18:12:11.000000000 +0200
@@ -118,6 +118,7 @@ enum SMI_ATTR_ID {
 	IB_ATTR_NODE_DESC = 0x10,
 	IB_ATTR_NODE_INFO = 0x11,
 	IB_ATTR_SWITCH_INFO = 0x12,
+	IB_ATTR_GUID_INFO = 0x14,
 	IB_ATTR_PORT_INFO = 0x15,
 	IB_ATTR_PKEY_TBL = 0x16,
 	IB_ATTR_SLVL_TABLE = 0x17,





More information about the general mailing list