Override default SM's SL to use in cases where LASH is not used.

Signed-off-by: Robert Pearson <[email protected]>
Signed-off-by: Hal Rosenstock <[email protected]>
---

diff --git a/opensm/include/opensm/osm_subnet.h 
b/opensm/include/opensm/osm_subnet.h
index 29d3b73..6c20de8 100644
--- a/opensm/include/opensm/osm_subnet.h
+++ b/opensm/include/opensm/osm_subnet.h
@@ -224,6 +224,7 @@ typedef struct osm_subn_opt {
        boolean_t consolidate_ipv6_snm_req;
        struct osm_subn_opt *file_opts; /* used for update */
        uint8_t lash_start_vl;                  /* starting vl to use in lash */
+       uint8_t sm_sl;                  /* which SL to use for SM/SA 
communication */
 } osm_subn_opt_t;
 /*
 * FIELDS
diff --git a/opensm/man/opensm.8.in b/opensm/man/opensm.8.in
index c71a79d..b23a973 100644
--- a/opensm/man/opensm.8.in
+++ b/opensm/man/opensm.8.in
@@ -12,6 +12,7 @@ opensm \- InfiniBand subnet manager and administration (SM/SA)
 [\-l(mc) <LMC>]
 [\-p(riority) <PRIORITY>]
 [\-smkey <SM_Key>]
+[\-\-sm_sl <SL number>]
 [\-r(eassign_lids)]
 [\-R <engine name(s)> | \-\-routing_engine <engine name(s)>]
 [\-\-do_mesh_analysis]
@@ -129,6 +130,10 @@ Note that OpenSM version 3.2.1 and below used the default 
value '1'
 in a host byte order, it is fixed now but you may need this option to
 interoperate with old OpenSM running on a little endian machine.
 .TP
+\fB\-\-sm_sl\fR <SL number>
+This option sets the SL to use for communication with the SM/SA.
+Defaults to 0.
+.TP
 \fB\-r\fR, \fB\-\-reassign_lids\fR
 This option causes OpenSM to reassign LIDs to all
 end nodes. Specifying -r on a running subnet
diff --git a/opensm/opensm/main.c b/opensm/opensm/main.c
index 62242f4..bf8e5c6 100644
--- a/opensm/opensm/main.c
+++ b/opensm/opensm/main.c
@@ -185,6 +185,8 @@ static void show_usage(void)
        printf("--lash_start_vl <vl number>\n"
                   "          Sets the starting VL to use for the lash routing 
algorithm.\n"
                   "          Defaults to 0.\n");
+       printf("--sm_sl <sl number>\n"
+                  "          Sets the SL to use to communicate with the SM/SA. 
Defaults to 0.\n\n");
        printf("--connect_roots, -z\n"
               "          This option enforces a routing engine (currently\n"
               "          up/down only) to make connectivity between root 
switches\n"
@@ -606,6 +608,7 @@ int main(int argc, char *argv[])
                {"consolidate_ipv6_snm_req", 0, NULL, 4},
                {"do_mesh_analysis", 0, NULL, 5},
                {"lash_start_vl", 1, NULL, 6},
+               {"sm_sl", 1, NULL, 7},
                {NULL, 0, NULL, 0}      /* Required at the end of the array */
        };
 
@@ -966,6 +969,15 @@ int main(int argc, char *argv[])
                        opt.lash_start_vl = (uint8_t) temp;
                        printf(" LASH starting VL = %d\n", opt.lash_start_vl);
                        break;
+               case 7:
+                       temp = strtol(optarg, NULL, 0);
+                       if (temp < 0 || temp > 15) {
+                               fprintf(stderr,
+                                       "ERROR: SM's SL must be between 0 and 
15\n");
+                               return (-1);
+                       }
+                       opt.sm_sl = (uint8_t) temp;
+                       break;
                case 'h':
                case '?':
                case ':':
diff --git a/opensm/opensm/osm_link_mgr.c b/opensm/opensm/osm_link_mgr.c
index 285096c..c9bdfee 100644
--- a/opensm/opensm/osm_link_mgr.c
+++ b/opensm/opensm/osm_link_mgr.c
@@ -71,7 +71,7 @@ static uint8_t link_mgr_get_smsl(IN osm_sm_t * sm, IN 
osm_physp_t * p_physp)
        if (p_osm->routing_engine_used != OSM_ROUTING_ENGINE_TYPE_LASH) {
                /* Use default SL if lash routing is not used */
                OSM_LOG_EXIT(sm->p_log);
-               return (OSM_DEFAULT_SL);
+               return (sm->p_subn->opt.sm_sl);
        }
 
        /* Find osm_port of the SM itself = dest_port */
diff --git a/opensm/opensm/osm_subnet.c b/opensm/opensm/osm_subnet.c
index 3470b60..0d11811 100644
--- a/opensm/opensm/osm_subnet.c
+++ b/opensm/opensm/osm_subnet.c
@@ -391,6 +391,7 @@ static const opt_rec_t opt_tbl[] = {
        { "prefix_routes_file", OPT_OFFSET(prefix_routes_file), 
opts_parse_charp, NULL, 0 },
        { "consolidate_ipv6_snm_req", OPT_OFFSET(consolidate_ipv6_snm_req), 
opts_parse_boolean, NULL, 1 },
        { "lash_start_vl", OPT_OFFSET(lash_start_vl), opts_parse_uint8, NULL, 1 
},
+       { "sm_sl", OPT_OFFSET(sm_sl), opts_parse_uint8, NULL, 1 },
        {0}
 };
 
@@ -760,6 +761,7 @@ void osm_subn_set_default_opt(IN osm_subn_opt_t * const 
p_opt)
        p_opt->prefix_routes_file = strdup(OSM_DEFAULT_PREFIX_ROUTES_FILE);
        p_opt->consolidate_ipv6_snm_req = FALSE;
        p_opt->lash_start_vl = 0;
+       p_opt->sm_sl = OSM_DEFAULT_SL;
        subn_init_qos_options(&p_opt->qos_options, NULL);
        subn_init_qos_options(&p_opt->qos_ca_options, NULL);
        subn_init_qos_options(&p_opt->qos_sw0_options, NULL);
@@ -1277,6 +1279,8 @@ int osm_subn_output_conf(FILE *out, IN osm_subn_opt_t 
*const p_opts)
                "# enhanced switch port 0. If TRUE, LMC value for subnet is 
used for\n"
                "# ESP0. Otherwise, LMC value for ESP0s is 0.\n"
                "lmc_esp0 %s\n\n"
+               "# sm_sl determines SMSL used for SM/SA communication\n"
+               "sm_sl %u\n\n"
                "# The code of maximal time a packet can live in a switch\n"
                "# The actual time is 4.096usec * 2^<packet_life_time>\n"
                "# The value 0x14 disables this mechanism\n"
@@ -1326,6 +1330,7 @@ int osm_subn_output_conf(FILE *out, IN osm_subn_opt_t 
*const p_opts)
                cl_ntoh64(p_opts->subnet_prefix),
                p_opts->lmc,
                p_opts->lmc_esp0 ? "TRUE" : "FALSE",
+               p_opts->sm_sl,
                p_opts->packet_life_time,
                p_opts->vl_stall_count,
                p_opts->leaf_vl_stall_count,
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

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

Reply via email to