OpenSM/osm_console.c: Add resweep and status commands

Signed-off-by: Ira Weiny <[EMAIL PROTECTED]>
Signed-off-by: Hal Rosenstock <[EMAIL PROTECTED]>

diff --git a/osm/opensm/osm_console.c b/osm/opensm/osm_console.c
index 8d770aa..8157f90 100644
--- a/osm/opensm/osm_console.c
+++ b/osm/opensm/osm_console.c
@@ -84,6 +84,20 @@ static void help_quit(FILE *out, int det
 static void help_loglevel(FILE *out, int detail)
 {
        fprintf(out, "loglevel [<log-level>]\n");
+       if (detail) {
+               fprintf(out, "   log-level is OR'ed from the following\n");
+               fprintf(out, "   OSM_LOG_NONE             0x%02X\n", 
OSM_LOG_NONE);
+               fprintf(out, "   OSM_LOG_ERROR            0x%02X\n", 
OSM_LOG_ERROR);
+               fprintf(out, "   OSM_LOG_INFO             0x%02X\n", 
OSM_LOG_INFO);
+               fprintf(out, "   OSM_LOG_VERBOSE          0x%02X\n", 
OSM_LOG_VERBOSE);
+               fprintf(out, "   OSM_LOG_DEBUG            0x%02X\n", 
OSM_LOG_DEBUG);
+               fprintf(out, "   OSM_LOG_FUNCS            0x%02X\n", 
OSM_LOG_FUNCS);
+               fprintf(out, "   OSM_LOG_FRAMES           0x%02X\n", 
OSM_LOG_FRAMES);
+               fprintf(out, "   OSM_LOG_ROUTING          0x%02X\n", 
OSM_LOG_ROUTING);
+               fprintf(out, "   OSM_LOG_SYS              0x%02X\n", 
OSM_LOG_SYS);
+               fprintf(out, "\n");
+               fprintf(out, "   OSM_LOG_DEFAULT_LEVEL    0x%02X\n", 
OSM_LOG_DEFAULT_LEVEL);
+       }
 }
 
 static void help_priority(FILE *out, int detail)
@@ -91,6 +105,16 @@ static void help_priority(FILE *out, int
        fprintf(out, "priority [<sm-priority>]\n");
 }
 
+static void help_resweep(FILE *out, int detail)
+{
+       fprintf(out, "resweep [heavy|light]\n");
+}
+
+static void help_status(FILE *out, int detail)
+{
+       fprintf(out, "status\n");
+}
+
 /* more help routines go here */
 
 static void help_parse(char **p_last, osm_opensm_t *p_osm, FILE *out)
@@ -164,6 +188,99 @@ static void priority_parse(char **p_last
        }
 }
 
+static char *sm_state_str(int state)
+{
+       switch (state)
+       {
+       case IB_SMINFO_STATE_INIT:
+               return ("Init");
+       case IB_SMINFO_STATE_DISCOVERING:
+               return ("Discovering");
+       case IB_SMINFO_STATE_STANDBY:
+               return ("Standby");
+       case IB_SMINFO_STATE_NOTACTIVE:
+               return ("Not Active");
+       case IB_SMINFO_STATE_MASTER:
+               return ("Master");
+       }
+       return ("UNKNOWN");
+}
+
+static char *sa_state_str(osm_sa_state_t state)
+{
+       switch (state)
+       {
+       case OSM_SA_STATE_INIT:
+               return ("Init");
+       case OSM_SA_STATE_READY:
+               return ("Ready");
+       }
+       return ("UNKNOWN");
+}
+
+static void status_parse(char **p_last, osm_opensm_t *p_osm, FILE *out)
+{
+       fprintf(out, "   SM State : %s\n",
+               sm_state_str(p_osm->subn.sm_state));
+       fprintf(out, "   SA State : %s\n",
+               sa_state_str(p_osm->sa.state));
+       fprintf(out, "   MAD stats\n"
+                    "   ---------\n"
+                    "   QP0 MADS outstanding           : %d\n"
+                    "   QP0 MADS outstanding (on wire) : %d\n"
+                    "   QP0 MADS rcvd                  : %d\n"
+                    "   QP0 MADS sent                  : %d\n"
+                    "   QP0 unicasts sent              : %d\n"
+                    "   QP1 MADS outstanding           : %d\n"
+                    "   QP1 MADS rcvd                  : %d\n"
+                    "   QP1 MADS sent                  : %d\n"
+                    ,
+               p_osm->stats.qp0_mads_outstanding,
+               p_osm->stats.qp0_mads_outstanding_on_wire,
+               p_osm->stats.qp0_mads_rcvd,
+               p_osm->stats.qp0_mads_sent,
+               p_osm->stats.qp0_unicasts_sent,
+               p_osm->stats.qp1_mads_outstanding,
+               p_osm->stats.qp1_mads_rcvd,
+               p_osm->stats.qp1_mads_sent
+               );
+       fprintf(out, "   Subnet flags\n"
+                    "   ------------\n"
+                    "   Ignore existing lfts           : %d\n"
+                    "   Subnet Init errors             : %d\n"
+                    "   In sweep hop 0                 : %d\n"
+                    "   Moved to master state          : %d\n"
+                    "   First time master sweep        : %d\n"
+                    "   Coming out of standby          : %d\n"
+                    ,
+               p_osm->subn.ignore_existing_lfts,
+               p_osm->subn.subnet_initialization_error,
+               p_osm->subn.in_sweep_hop_0,
+               p_osm->subn.moved_to_master_state,
+               p_osm->subn.first_time_master_sweep,
+               p_osm->subn.coming_out_of_standby
+               );
+       fprintf(out, "\n");
+}
+
+static void resweep_parse(char **p_last, osm_opensm_t *p_osm, FILE *out)
+{
+       char *p_cmd;
+
+       p_cmd = next_token(p_last);
+       if (!p_cmd ||
+           (strcmp(p_cmd, "heavy") != 0 && 
+            strcmp(p_cmd, "light") != 0)) {
+               fprintf(out, "Invalid resweep command\n");
+               help_resweep(out, 1);
+       } else {
+               if (strcmp(p_cmd, "heavy") == 0) {
+                       p_osm->subn.force_immediate_heavy_sweep = TRUE;
+               }
+               osm_opensm_sweep( p_osm );
+       }
+}
+
 /* This is public to be able to close it on exit */
 void osm_console_close_socket(osm_opensm_t *p_osm)
 {
@@ -190,6 +307,8 @@ static const struct command console_cmds
        { "quit",       &help_quit,             &quit_parse},
        { "loglevel",   &help_loglevel,         &loglevel_parse},       
        { "priority",   &help_priority,         &priority_parse},
+       { "resweep",    &help_resweep,          &resweep_parse},
+       { "status",     &help_status,           &status_parse},
        { NULL,         NULL,                   NULL}   /* end of array */
 };
 




_______________________________________________
openib-general mailing list
openib-general@openib.org
http://openib.org/mailman/listinfo/openib-general

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

Reply via email to