[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