[openib-general] Re:[PATCH] OpenSM - fix multicast flow in osmtest

Yael Kalka yael at mellanox.co.il
Thu Feb 23 00:13:21 PST 2006


Hi Hal,

I have done some work on osmtest/osmt_multicast.c. 
There was a problem that in the middle of the test and in the end
there were checks that the only multicast groups that exist are the
ones discovered in the begining of the test. This isn't always true,
since multicast groups can be created by other applications during the
run. What the check should really be is that all the multicast groups
that were created during the test are deleted. I've added a map of all
the mlids created in the test, and added the above check.
Also - inserted back in to the test some code under "#if 0" - checks
of creation with illegal rate and mtu.
Also in the patch is a change to osm_helper.c, osm_dump_mc_record -
dump all the records of mc (previously not all were printed).

Thanks,
Yael

Signed-off-by:  Yael Kalka <yael at mellanox.co.il>

Index: osmtest/osmt_multicast.c
===================================================================
--- osmtest/osmt_multicast.c	(revision 5457)
+++ osmtest/osmt_multicast.c	(working copy)
@@ -45,12 +45,15 @@
 
 /* next error code: 16A    */
 
+#ifndef __WIN__
 #include <unistd.h>
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <complib/cl_debug.h>
 #include <complib/cl_memory.h>
+#include <complib/cl_map.h>
 #include "osmtest.h"
 
 static
@@ -88,6 +91,7 @@ osmt_query_mcast( IN osmtest_t * const p
   cl_list_iterator_t  p_mgids_res;
   cl_status_t cl_status;
   cl_map_item_t *p_item,*p_next_item;
+  osmtest_mgrp_t *p_mgrp;
 
   OSM_LOG_ENTER( &p_osmt->log, osmt_query_mcast );
   /*
@@ -114,7 +118,6 @@ osmt_query_mcast( IN osmtest_t * const p
   req.pfn_query_cb = osmtest_query_res_cb;
   req.p_query_input = &user;
   req.sm_key = 0;
-  osmtest_mgrp_t *p_mgrp;
 
   status = osmv_query_sa( p_osmt->h_bind, &req );
 
@@ -422,6 +425,8 @@ osmt_run_mcast_flow( IN osmtest_t * cons
   ib_node_record_t *p_rec;
   uint32_t num_recs = 0,i;
   uint8_t mtu_phys = 0,rate_phys = 0;
+  cl_map_t test_created_mlids; /* List of all mlids created in this test */
+  ib_member_rec_t* p_recvd_rec;
 
   static ib_gid_t good_mgid = {
     {
@@ -462,6 +467,14 @@ osmt_run_mcast_flow( IN osmtest_t * cons
       0xff, 0xff, 0xff, 0xff,            /*  32 bit IPv4 broadcast address */
     },
   };
+  static ib_gid_t osm_link_local_mgid = {
+    {
+      0xFF, 0x02, 0x00, 0x00, 
+      0x00, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x00, 0x01
+    },
+  };
 
 
   OSM_LOG_ENTER( &p_osmt->log, osmt_run_mcast_flow );
@@ -480,6 +493,10 @@ osmt_run_mcast_flow( IN osmtest_t * cons
 
   }
 
+  /* Initialize the test_created_mgrps map */
+  cl_map_construct(&test_created_mlids);
+  cl_map_init(&test_created_mlids, 1000);
+
   p_mgrp_mlid_tbl = &p_osmt->exp_subn.mgrp_mlid_tbl;
   osmt_init_mc_query_rec(p_osmt, &mc_req_rec);
 
@@ -726,6 +743,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -772,6 +790,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -825,6 +844,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -875,6 +895,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -926,12 +947,10 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
-#if 0
-  /*  CURRENTLY NOT SUPPORTED !!!! "Unrealizable" condition not available by OSM */
-
   /*  o15.0.1.8:  */
   /*  - Request join with irrelevant RATE : get a ERR_INSUFFICIANT_COMPONENTS */
   osm_log( &p_osmt->log, OSM_LOG_INFO,
@@ -968,6 +987,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -1006,6 +1026,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -1044,6 +1065,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -1079,6 +1101,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -1120,6 +1143,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -1155,16 +1179,19 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
+#if 0
+  /* Currently PacketLifeTime isn't checked in opensm */
   /* Check PacketLifeTime as 0 */
   osm_log( &p_osmt->log, OSM_LOG_INFO,
            "osmt_run_mcast_flow: "
            "Checking Create with unrealistic packet life value less than 0 (o15.0.1.8)...\n"
            );
 
-  /* impossible requested rate */
+  /* impossible requested packet life */
   mc_req_rec.pkt_life = 0 | IB_PATH_SELECTOR_LESS_THAN << 6;
 
   comp_mask =
@@ -1191,6 +1218,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 #endif
@@ -1247,6 +1275,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -1273,12 +1302,10 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              "Number of MC Records found in SA DB is %d.\n", middle_cnt);
     if (middle_cnt != start_cnt)
     {
-      osm_log( &p_osmt->log, OSM_LOG_ERROR,
-               "osmt_run_mcast_flow: ERR 02ah: "
+      osm_log( &p_osmt->log, OSM_LOG_INFO,
+               "osmt_run_mcast_flow: "
                "Got different number of records stored in SA DB (before any creation)\n"
                "Instead of %d got %d\n", start_cnt,middle_cnt);
-      status=IB_ERROR;
-      goto Exit;
     }
   }
 
@@ -1332,6 +1359,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -1389,6 +1417,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              ib_get_err_str( status ),
              ib_get_mad_status_str( (ib_mad_t*)(&res_sa_mad) )
              );
+    status = IB_ERROR;
     goto Exit;
   }
 
@@ -1433,6 +1462,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              );
     goto Exit;
   }
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
   /* Good Flow - mgid is 0 while giving all required fields for join : P_Key, Q_Key, SL, FlowLabel, Tclass */
 
@@ -1466,7 +1506,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              );
     goto Exit;
   }
-
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "Created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
   /* Good Flow - mgid is 0 while giving all required fields for join : P_Key, Q_Key, SL, FlowLabel, Tclass */
 
@@ -1500,6 +1550,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              );
     goto Exit;
   }
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "Created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
    /* Good Flow - mgid is 0 while giving all required fields for join : P_Key, Q_Key, SL, FlowLabel, Tclass */
 
@@ -1532,6 +1593,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              );
     goto Exit;
   }
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "Created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
    /* Good Flow - mgid is 0 while giving all required fields for join : P_Key, Q_Key, SL, FlowLabel, Tclass */
    /* Using Exact feasible MTU & RATE */
@@ -1568,6 +1640,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              );
     goto Exit;
   }
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "Created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
      /* Good Flow - mgid is 0 while giving all required fields for join : P_Key, Q_Key, SL, FlowLabel, Tclass */
    /* Using Exact feasible RATE */
@@ -1600,7 +1683,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              );
     goto Exit;
   }
-
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "Created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
      /* Good Flow - mgid is 0 while giving all required fields for join : P_Key, Q_Key, SL, FlowLabel, Tclass */
    /* Using Exact feasible MTU */
@@ -1633,6 +1726,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              );
     goto Exit;
   }
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "Created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
   /*  o15.0.1.5:  */
   /*  - Check the returned MGID is valid. (p 804) */
@@ -1702,6 +1806,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              );
     goto Exit;
   }
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "Created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
   /*  o15.0.1.6: */
   /*  - Create a new MCG with valid requested MGID. */
@@ -1730,6 +1845,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              cl_ntoh64(good_mgid.unicast.interface_id));
     goto Exit;
   }
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "Created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
   osm_log( &p_osmt->log, OSM_LOG_INFO,
            "osmt_run_mcast_flow: "
@@ -1883,6 +2009,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              cl_ntoh64(good_mgid.unicast.interface_id));
     goto Exit;
   }
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "Created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
   /* Change the flags to invalid value 0x2 - get back INVALID REQ */
 
@@ -1930,14 +2067,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
            "Checking link local MGID 0xFF02:0:0:0:0:0:0:1 (o15.0.1.6)...\n"
            );
 
-  mc_req_rec.mgid = (ib_gid_t) {
-    {
-      0xFF, 0x02, 0x00, 0x00,
-      0x00, 0x00, 0x00, 0x00,
-      0x00, 0x00, 0x00, 0x00,
-      0x00, 0x00, 0x00, 0x01
-    },
-  };
+  mc_req_rec.mgid = osm_link_local_mgid;
 
   status = osmt_send_mcast_request( p_osmt, 1,
                                     &mc_req_rec,
@@ -1953,8 +2083,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              );
     goto Exit;
   }
-
-
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "Created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
   /*  o15.0.1.7 - implicitlly checked during the prev steps. */
   /*  o15.0.1.8 - implicitlly checked during the prev steps. */
@@ -1998,7 +2137,7 @@ osmt_run_mcast_flow( IN osmtest_t * cons
   /* Lets try a valid join scope state */
   osm_log( &p_osmt->log, OSM_LOG_INFO,
            "osmt_run_mcast_flow: "
-           "Checking new MGID with invalid join state (o15.0.1.9)...\n"
+           "Checking new MGID with valid join state (o15.0.1.9)...\n"
            );
 
   mc_req_rec.mgid = good_mgid;
@@ -2082,6 +2221,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              );
     goto Exit;
   }
+  /* Save the mlid created in test_created_mlids map */
+  p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
+  osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
+           "osmt_run_mcast_flow: "
+           "Created MGID:0x%016" PRIx64 " : "
+           "0x%016" PRIx64 " MLID:0x%04X\n",
+           cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+           cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+           cl_ntoh16( p_recvd_rec->mlid ));
+  cl_map_insert(&test_created_mlids,
+                cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
 
   /*  o15.0.1.10 - can't check on a single client .-- obsolete -
       checked by SilverStorm bug o15-0.2.4, never the less recheck */
@@ -2984,9 +3134,17 @@ osmt_run_mcast_flow( IN osmtest_t * cons
       else
       {
         cur_mlid = cl_ntoh16(p_mc_res->mlid);
+        /* Save the mlid created in test_created_mlids map */
+        p_recvd_rec = (ib_member_rec_t*)ib_sa_mad_get_payload_ptr( &res_sa_mad );
         osm_log( &p_osmt->log, OSM_LOG_VERBOSE,
                  "osmt_run_mcast_flow : "
-                 "Added to new MCGroup with Mlid 0x04%x\n",cur_mlid);
+                 "Created MGID:0x%016" PRIx64 " : "
+                 "0x%016" PRIx64 " MLID:0x%04X\n",
+                 cl_ntoh64( p_recvd_rec->mgid.unicast.prefix ),
+                 cl_ntoh64( p_recvd_rec->mgid.unicast.interface_id ),
+                 cl_ntoh16( p_recvd_rec->mlid ));
+        cl_map_insert(&test_created_mlids,
+                      cl_ntoh16(p_recvd_rec->mlid), p_recvd_rec );
       }
       tmp_mlid--;
     }
@@ -3070,7 +3228,10 @@ osmt_run_mcast_flow( IN osmtest_t * cons
              "GetTable of all records has failed!\n");
     goto Exit;
   }
-  /* Only when we are on single mode check flow - do the count comparison, otherwise skip */
+
+  /* If we are in single mode check flow - need to make sure all the multicast groups 
+     that are left are not ones created during the flow.
+  */
   if (p_osmt->opt.mmode == 1 || p_osmt->opt.mmode == 3)
   {
       end_cnt = cl_qmap_count(&p_osmt->exp_subn.mgrp_mlid_tbl);
@@ -3080,14 +3241,47 @@ osmt_run_mcast_flow( IN osmtest_t * cons
           /* when we comapre num of MCG we should consider an outside source which create other MCGs */
       if ((end_cnt-fail_to_delete_mcg) != (start_cnt - mcg_outside_test_cnt))
       {
-        osm_log( &p_osmt->log, OSM_LOG_ERROR,
-                 "osmt_run_mcast_flow: ERR 02FG: "
+        osm_log( &p_osmt->log, OSM_LOG_INFO,
+                 "osmt_run_mcast_flow: "
                  "Got different number of records stored in SA DB\n\t\t"
                  "at Start got %d, at End got %d (IPoIB groups only)\n",
                  (start_cnt-mcg_outside_test_cnt),(end_cnt-fail_to_delete_mcg));
+      }
+      p_mgrp_mlid_tbl = &p_osmt->exp_subn.mgrp_mlid_tbl;
+      p_mgrp = (osmtest_mgrp_t*)cl_qmap_head( p_mgrp_mlid_tbl );
+      while( p_mgrp != (osmtest_mgrp_t*)cl_qmap_end( p_mgrp_mlid_tbl ) )
+      {
+        uint16_t mlid = (uint16_t)cl_qmap_key((cl_map_item_t*)p_mgrp);
+        osm_log( &p_osmt->log, OSM_LOG_INFO,
+                 "osmt_run_mcast_flow: "
+                 "Found MLID:0x%04X\n",
+                 mlid);
+        /* Check if the mlid is in the test_created_mlids. If TRUE, then we
+           didn't delete a MCgroup that was created in this flow. */
+        if ( cl_map_get (&test_created_mlids, mlid) != NULL )
+        {
+          /* This means that we still have an mgrp that we created!! */
+          osm_log( &p_osmt->log, OSM_LOG_ERROR,
+                   "osmt_run_mcast_flow: ERR 02FG: "
+                   "Wasn't able to erase mgrp with MGID:0x%016" PRIx64 " : 0x%016"
+                   PRIx64 " MLID:0x%04X\n",
+                   cl_ntoh64(p_mgrp->mcmember_rec.mgid.unicast.prefix),
+                   cl_ntoh64(p_mgrp->mcmember_rec.mgid.unicast.interface_id),
+                   mlid );
         status=IB_ERROR;
         goto Exit;
       }
+        else
+        {
+          osm_log( &p_osmt->log, OSM_LOG_INFO,
+                   "osmt_run_mcast_flow: "
+                   "Still exists MGID:0x%016" PRIx64 " : 0x%016"
+                   PRIx64 "\n",
+                   cl_ntoh64(p_mgrp->mcmember_rec.mgid.unicast.prefix),
+                   cl_ntoh64(p_mgrp->mcmember_rec.mgid.unicast.interface_id) );
+        }
+        p_mgrp = (osmtest_mgrp_t*)cl_qmap_next( &p_mgrp->map_item );
+      }
   }
  Exit:
   OSM_LOG_EXIT( &p_osmt->log );
Index: opensm/osm_helper.c
===================================================================
--- opensm/osm_helper.c	(revision 5457)
+++ opensm/osm_helper.c	(working copy)
@@ -970,11 +970,14 @@ osm_dump_mc_record(
              "0x%016" PRIx64 "\n"
              "\t\t\t\tqkey....................0x%X\n"
              "\t\t\t\tMlid....................0x%X\n"
-             "\t\t\t\tScopeState..............0x%X\n"
-             "\t\t\t\tRate....................0x%X\n"
              "\t\t\t\tMtu.....................0x%X\n"
              "\t\t\t\tTClass..................0x%X\n"
+             "\t\t\t\tpkey....................0x%X\n"
+             "\t\t\t\tRate....................0x%X\n"
+             "\t\t\t\tPacketLife..............0x%X\n"
              "\t\t\t\tSLFlowLabelHopLimit.....0x%X\n"
+             "\t\t\t\tScopeState..............0x%X\n"
+             "\t\t\t\tProxyJoin...............0x%X\n"
              "",
              cl_ntoh64( p_mcmr->mgid.unicast.prefix ),
              cl_ntoh64( p_mcmr->mgid.unicast.interface_id ),
@@ -982,11 +985,14 @@ osm_dump_mc_record(
              cl_ntoh64( p_mcmr->port_gid.unicast.interface_id ),
              cl_ntoh32( p_mcmr->qkey ),
              cl_ntoh16( p_mcmr->mlid ),
-             p_mcmr->scope_state,
-             p_mcmr->rate,
              p_mcmr->mtu,
              p_mcmr->tclass,
-             cl_ntoh32( p_mcmr->sl_flow_hop )
+             cl_ntoh16( p_mcmr->pkey ),
+             p_mcmr->rate,
+             p_mcmr->pkt_life,
+             cl_ntoh32( p_mcmr->sl_flow_hop ),
+             p_mcmr->scope_state,
+             p_mcmr->proxy_join
              );
   }
 }




More information about the general mailing list