Added option 'sa_db_dump' to dump SA DB at every
sweep (both heavy and light).
The option is not exposed through OSM command line,
but only through options file.

Signed-off-by: Yevgeny Kliteynik <[email protected]>
---

Changes since V2:
  - no changes, just rebased

Signed-off-by: Yevgeny Kliteynik <[email protected]>
---
 opensm/include/opensm/osm_subnet.h |    5 +++++
 opensm/opensm/osm_state_mgr.c      |    5 ++++-
 opensm/opensm/osm_subnet.c         |    8 ++++++++
 3 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/opensm/include/opensm/osm_subnet.h 
b/opensm/include/opensm/osm_subnet.h
index 3c08689..89807cc 100644
--- a/opensm/include/opensm/osm_subnet.h
+++ b/opensm/include/opensm/osm_subnet.h
@@ -200,6 +200,7 @@ typedef struct osm_subn_opt {
        char *ids_guid_file;
        char *guid_routing_order_file;
        char *sa_db_file;
+       boolean_t sa_db_dump;
        boolean_t do_mesh_analysis;
        boolean_t exit_on_fatal;
        boolean_t honor_guid2lid_file;
@@ -411,6 +412,10 @@ typedef struct osm_subn_opt {
 *      sa_db_file
 *              Name of the SA database file.
 *
+*      sa_db_dump
+*              When TRUE causes OpenSM to dump SA DB at the end of every
+*              light sweep regardless the current verbosity level.
+*
 *      exit_on_fatal
 *              If TRUE (default) - SM will exit on fatal subnet initialization
 *              issues.
diff --git a/opensm/opensm/osm_state_mgr.c b/opensm/opensm/osm_state_mgr.c
index 08985d3..57eda7b 100644
--- a/opensm/opensm/osm_state_mgr.c
+++ b/opensm/opensm/osm_state_mgr.c
@@ -1080,6 +1080,8 @@ static void do_sweep(osm_sm_t * sm)
                if (wait_for_pending_transactions(&sm->p_subn->p_osm->stats))
                        return;
                if (!sm->p_subn->force_heavy_sweep) {
+                       if (sm->p_subn->opt.sa_db_dump)
+                               osm_sa_db_file_dump(sm->p_subn->p_osm);
                        OSM_LOG_MSG_BOX(sm->p_log, OSM_LOG_VERBOSE,
                                        "LIGHT SWEEP COMPLETE");
                        return;
@@ -1344,7 +1346,8 @@ repeat_discovery:
                state_mgr_up_msg(sm);
                sm->p_subn->first_time_master_sweep = FALSE;

-               if (osm_log_is_active(sm->p_log, OSM_LOG_VERBOSE))
+               if (osm_log_is_active(sm->p_log, OSM_LOG_VERBOSE) ||
+                   sm->p_subn->opt.sa_db_dump)
                        osm_sa_db_file_dump(sm->p_subn->p_osm);
        }

diff --git a/opensm/opensm/osm_subnet.c b/opensm/opensm/osm_subnet.c
index 09029db..032ef38 100644
--- a/opensm/opensm/osm_subnet.c
+++ b/opensm/opensm/osm_subnet.c
@@ -348,6 +348,7 @@ static const opt_rec_t opt_tbl[] = {
        { "ids_guid_file", OPT_OFFSET(ids_guid_file), opts_parse_charp, NULL, 0 
},
        { "guid_routing_order_file", OPT_OFFSET(guid_routing_order_file), 
opts_parse_charp, NULL, 0 },
        { "sa_db_file", OPT_OFFSET(sa_db_file), opts_parse_charp, NULL, 0 },
+       { "sa_db_dump", OPT_OFFSET(sa_db_dump), opts_parse_boolean, NULL, 1 },
        { "do_mesh_analysis", OPT_OFFSET(do_mesh_analysis), opts_parse_boolean, 
NULL, 1 },
        { "exit_on_fatal", OPT_OFFSET(exit_on_fatal), opts_parse_boolean, NULL, 
1 },
        { "honor_guid2lid_file", OPT_OFFSET(honor_guid2lid_file), 
opts_parse_boolean, NULL, 1 },
@@ -752,6 +753,7 @@ void osm_subn_set_default_opt(IN osm_subn_opt_t * p_opt)
        p_opt->ids_guid_file = NULL;
        p_opt->guid_routing_order_file = NULL;
        p_opt->sa_db_file = NULL;
+       p_opt->sa_db_dump = FALSE;
        p_opt->do_mesh_analysis = FALSE;
        p_opt->exit_on_fatal = TRUE;
        p_opt->enable_quirks = FALSE;
@@ -1452,6 +1454,12 @@ int osm_subn_output_conf(FILE *out, IN osm_subn_opt_t * 
p_opts)
                p_opts->sa_db_file ? p_opts->sa_db_file : null_str);

        fprintf(out,
+               "# If TRUE causes OpenSM to dump SA database at the end of\n"
+               "# every light sweep, regardless of the verbosity level\n"
+               "sa_db_dump %s\n\n",
+               p_opts->sa_db_dump ? "TRUE" : "FALSE");
+
+       fprintf(out,
                "#\n# HANDOVER - MULTIPLE SMs OPTIONS\n#\n"
                "# SM priority used for deciding who is the master\n"
                "# Range goes from 0 (lowest priority) to 15 (highest).\n"
-- 
1.5.1.4


--
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