Add ib_node_query_via routine similar to ib_path_query_via

Signed-off-by: Hal Rosenstock <[email protected]>
---
diff --git a/include/infiniband/mad.h b/include/infiniband/mad.h
index 0694dc4..02b2353 100644
--- a/include/infiniband/mad.h
+++ b/include/infiniband/mad.h
@@ -65,6 +65,7 @@ BEGIN_C_DECLS
 #define IB_PC_DATA_SZ          (IB_MAD_SIZE - IB_PC_DATA_OFFS)
 #define IB_SA_MCM_RECSZ                53
 #define IB_SA_PR_RECSZ         64
+#define IB_SA_NR_RECSZ         108
 #define IB_SA_GIR_RECSZ                72
 #define IB_BM_DATA_OFFS                64
 #define IB_BM_DATA_SZ          (IB_MAD_SIZE - IB_BM_DATA_OFFS)
@@ -1519,6 +1542,9 @@ MAD_EXPORT int ib_path_query_via(const struct ibmad_port 
*srcport,
                                 ibmad_gid_t srcgid, ibmad_gid_t destgid,
                                 ib_portid_t * sm_id, void *buf);
        /* returns lid */
+MAD_EXPORT int ib_node_query_via(const struct ibmad_port *srcport,
+                                uint64_t guid, ib_portid_t * sm_id,
+                                void *buf);
 
 /* resolve.c */
 MAD_EXPORT int ib_resolve_smlid(ib_portid_t * sm_id, int timeout) DEPRECATED;
diff --git a/src/libibmad.map b/src/libibmad.map
index a4d4418..3f92885 100644
--- a/src/libibmad.map
+++ b/src/libibmad.map
@@ -148,5 +148,6 @@ IBMAD_1.3 {
                cc_config_status_via;
                smp_mkey_get;
                smp_mkey_set;
+               ib_node_query_via;
        local: *;
 };
diff --git a/src/sa.c b/src/sa.c
index a9a93cc..352ed9f 100644
--- a/src/sa.c
+++ b/src/sa.c
@@ -145,3 +145,47 @@ int ib_path_query(ibmad_gid_t srcgid, ibmad_gid_t destgid, 
ib_portid_t * sm_id,
 {
        return ib_path_query_via(ibmp, srcgid, destgid, sm_id, buf);
 }
+
+/* NodeRecord */
+#define IB_NR_COMPMASK_LID                             (1ull<<0)
+#define IB_NR_COMPMASK_RESERVED1                       (1ull<<1)
+#define IB_NR_COMPMASK_BASEVERSION                     (1ull<<2)
+#define IB_NR_COMPMASK_CLASSVERSION                    (1ull<<3)
+#define IB_NR_COMPMASK_NODETYPE                                (1ull<<4)
+#define IB_NR_COMPMASK_NUMPORTS                                (1ull<<5)
+#define IB_NR_COMPMASK_SYSIMAGEGUID                    (1ull<<6)
+#define IB_NR_COMPMASK_NODEGUID                                (1ull<<7)
+#define IB_NR_COMPMASK_PORTGUID                                (1ull<<8)
+#define IB_NR_COMPMASK_PARTCAP                         (1ull<<9)
+#define IB_NR_COMPMASK_DEVID                           (1ull<<10)
+#define IB_NR_COMPMASK_REV                             (1ull<<11)
+#define IB_NR_COMPMASK_PORTNUM                         (1ull<<12)
+#define IB_NR_COMPMASK_VENDID                          (1ull<<13)
+#define IB_NR_COMPMASK_NODEDESC                                (1ull<<14)
+
+#define IB_NR_DEF_MASK IB_NR_COMPMASK_PORTGUID
+
+int ib_node_query_via(const struct ibmad_port *srcport, uint64_t guid,
+                     ib_portid_t * sm_id, void *buf)
+{
+       ib_sa_call_t sa = { 0 };
+       uint8_t *p;
+
+       memset(&sa, 0, sizeof sa);
+       sa.method = IB_MAD_METHOD_GET;
+       sa.attrid = IB_SA_ATTR_NODERECORD;
+       sa.mask = IB_NR_DEF_MASK;
+       sa.trid = mad_trid();
+
+       memset(buf, 0, IB_SA_NR_RECSZ);
+
+       mad_encode_field(buf, IB_SA_NR_PORT_GUID_F, &guid);
+
+       p = sa_rpc_call(srcport, buf, sm_id, &sa, 0);
+       if (!p) {
+               IBWARN("sa call node_query failed");
+               return -1;
+       }
+
+       return 0;
+}
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to