Add SA LFT Record attribute handling.

Signed-off-by: Sasha Khapyorsky <[EMAIL PROTECTED]>
---
 infiniband-diags/src/saquery.c |   52 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/infiniband-diags/src/saquery.c b/infiniband-diags/src/saquery.c
index 00b0f2c..996434d 100644
--- a/infiniband-diags/src/saquery.c
+++ b/infiniband-diags/src/saquery.c
@@ -634,6 +634,21 @@ static void dump_one_pkey_tbl_record(void *data)
        printf("\n");
 }
 
+static void dump_one_lft_record(void *data)
+{
+       ib_lft_record_t *lftr = data;
+       unsigned block = cl_ntoh16(lftr->block_num);
+       int i;
+       printf("LFT Record dump:\n"
+              "\t\tLID........................%u\n"
+              "\t\tBlock......................%u\n"
+              "\t\tLFT:\n",
+              cl_ntoh16(lftr->lid), block);
+       for (i = 0; i < 64 ; i++)
+               printf("\t\t%u\t%u\n", block*64 + i, lftr->lft[i]);
+       printf("\n");
+}
+
 static void dump_results(osmv_query_res_t *r, void (*dump_func)(void *))
 {
        int i;
@@ -1251,6 +1266,41 @@ print_pkey_tbl_records(const struct query_cmd *q, 
osm_bind_handle_t bind_handle,
        return status;
 }
 
+static int
+print_lft_records(const struct query_cmd *q, osm_bind_handle_t bind_handle,
+                 int argc, char *argv[])
+{
+       ib_lft_record_t lftr;
+       ib_net64_t comp_mask = 0;
+       int lid = 0, block = -1;
+       ib_api_status_t status;
+
+       if (argc > 0)
+               parse_lid_and_ports(bind_handle, argv[0],
+                                   &lid, &block, NULL);
+
+       memset(&lftr, 0, sizeof(lftr));
+
+       if (lid > 0) {
+               lftr.lid = cl_hton16(lid);
+               comp_mask |= IB_LFTR_COMPMASK_LID;
+       }
+       if (block >= 0) {
+               lftr.block_num = cl_hton16(block);
+               comp_mask |= IB_LFTR_COMPMASK_BLOCK;
+       }
+
+       status = get_any_records(bind_handle, IB_MAD_ATTR_LFT_RECORD, 0,
+                                comp_mask, &lftr,
+                                ib_get_attr_offset(sizeof(lftr)), 0);
+       if (status != IB_SUCCESS)
+               return status;
+
+       dump_results(&result, dump_one_lft_record);
+       return_mad();
+       return status;
+}
+
 static osm_bind_handle_t
 get_bind_handle(void)
 {
@@ -1344,6 +1394,8 @@ static const struct query_cmd query_cmds[] = {
        { "ServiceRecord", "SR", IB_MAD_ATTR_SERVICE_RECORD, },
        { "PathRecord", "PR", IB_MAD_ATTR_PATH_RECORD, },
        { "MCMemberRecord", "MCMR", IB_MAD_ATTR_MCMEMBER_RECORD, },
+       { "LFTRecord", "LFTR", IB_MAD_ATTR_LFT_RECORD, "[[lid]/[block]]",
+         print_lft_records },
        { 0 }
 };
 
-- 
1.6.0.1.196.g01914

_______________________________________________
general mailing list
general@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to