@@ -918,6 +918,7 @@ uint8_t osm_switch_recommend_path(IN const osm_switch_t * p_sw,
IN osm_port_t * p_port, IN uint16_t lid_ho,
IN unsigned start_from,
IN boolean_t ignore_existing,
+ IN boolean_t routing_for_lmc,
IN boolean_t dor);
/*
* PARAMETERS
@@ -940,6 +941,17 @@ uint8_t osm_switch_recommend_path(IN const osm_switch_t * p_sw,
* If false, the switch will choose an existing route if one
* exists, otherwise will choose the optimal route.
*
+* routing_for_lmc
+* [in] We support an enhanced LMC aware routing mode:
+* In the case of LMC > 0, we can track the remote side
+* system and node for all of the lids of the target
+* and try and avoid routing again through the same
+* system / node.
+*
+* Assume if routing_for_lmc is TRUE that this procedure
+* was provided with the tracking array and counter via
+* p_port->priv, and we can conduct this algorithm.
+*
* dor
* [in] If TRUE, Dimension Order Routing will be done.
*
@@ -221,7 +221,7 @@ static void dump_ucast_routes(cl_map_item_t * item, FILE * file, void *cxt)
/* No LMC Optimization */
best_port = osm_switch_recommend_path(p_sw, p_port,
lid_ho, 1, TRUE,
- dor);
+ FALSE, dor);
fprintf(file, "No %u hop path possible via port %u!",
best_hops, best_port);
}
@@ -216,6 +216,7 @@ uint8_t osm_switch_recommend_path(IN const osm_switch_t * p_sw,
IN osm_port_t * p_port, IN uint16_t lid_ho,
IN unsigned start_from,
IN boolean_t ignore_existing,
+ IN boolean_t routing_for_lmc,
IN boolean_t dor)
{
/*
@@ -225,10 +226,10 @@ uint8_t osm_switch_recommend_path(IN const osm_switch_t * p_sw,
and try and avoid routing again through the same
system / node.
- If this procedure is provided with the tracking array
- and counter we can conduct this algorithm.
+ Assume if routing_for_lmc is true that this procedure was
+ provided the tracking array and counter via p_port->priv,
+ and we can conduct this algorithm.
*/
- boolean_t routing_for_lmc = (p_port->priv != NULL);
uint16_t base_lid;
uint8_t hops;
uint8_t least_hops;
@@ -252,6 +252,7 @@ static void ucast_mgr_process_port(IN osm_ucast_mgr_t * p_mgr,
*/
port = osm_switch_recommend_path(p_sw, p_port, lid_ho, start_from,
p_mgr->p_subn->ignore_existing_lfts,
+ p_mgr->p_subn->opt.lmc,
p_mgr->is_dor);
if (port == OSM_NO_PATH) {