This is bonus - switch forwarding tables dump compatible with output
produced by dump_lfts.sh and which can be used as input for unicast
forwarding tables loader (with -R 'file' -U <file-name>). The dump file
name is 'opensm-lfts.sh' and will be generate if OSM_LOG_ROUTING
logging flag is set.

Signed-off-by: Sasha Khapyorsky <[EMAIL PROTECTED]>
---
 osm/opensm/osm_ucast_mgr.c |   44 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/osm/opensm/osm_ucast_mgr.c b/osm/opensm/osm_ucast_mgr.c
index 8f4bfba..7e1e7cc 100644
--- a/osm/opensm/osm_ucast_mgr.c
+++ b/osm/opensm/osm_ucast_mgr.c
@@ -380,10 +380,54 @@ ucast_mgr_dump_lid_matrix(cl_map_item_t 
 
 /**********************************************************************
  **********************************************************************/
+static void
+ucast_mgr_dump_lfts(cl_map_item_t *p_map_item, void *cxt)
+{
+       osm_switch_t* p_sw = (osm_switch_t *)p_map_item;
+       osm_ucast_mgr_t* p_mgr = ((struct ucast_mgr_dump_context *)cxt)->p_mgr;
+       FILE *file = ((struct ucast_mgr_dump_context *)cxt)->file;
+       osm_node_t *p_node = osm_switch_get_node_ptr(p_sw);
+       unsigned max_lid = osm_switch_get_max_lid_ho(p_sw);
+       unsigned max_port = osm_switch_get_num_ports(p_sw);
+       uint16_t lid;
+       uint8_t port;
+
+       fprintf(file, "Unicast lids [0x0-0x%x] of switch Lid %u guid 0x%016"
+               PRIx64 " (\'%s\'):\n",
+               max_lid, osm_node_get_base_lid(p_node, 0),
+               cl_ntoh64(osm_node_get_node_guid(p_node)),
+               p_node->node_desc.description);
+       for (lid = 0; lid <= max_lid; lid++) {
+               osm_port_t *p_port;
+               port = osm_switch_get_port_by_lid(p_sw, lid);
+
+               if (port >= max_port)
+                       continue;
+
+               fprintf(file, "0x%04x %03u # ", lid, port);
+
+               p_port = cl_ptr_vector_get(&p_mgr->p_subn->port_lid_tbl, lid);
+               if (p_port) {
+                       p_node = osm_port_get_parent_node(p_port);
+                       fprintf(file, "%s portguid 0x016%" PRIx64 ": \'%s\'",
+                               ib_get_node_type_str(osm_node_get_type(p_node)),
+                               cl_ntoh64(osm_port_get_guid(p_port)),
+                               p_node->node_desc.description);
+               }
+               else
+                       fprintf(file, "unknown node and type");
+               fprintf(file, "\n");
+       }
+       fprintf(file, "%u lids dumped\n", max_lid);
+}
+
+/**********************************************************************
+ **********************************************************************/
 static void __osm_ucast_mgr_dump_tables(osm_ucast_mgr_t *p_mgr)
 {
   ucast_mgr_dump_to_file(p_mgr, "opensm-lid-matrix.dump",
                          ucast_mgr_dump_lid_matrix);
+  ucast_mgr_dump_to_file(p_mgr, "opensm-lfts.dump", ucast_mgr_dump_lfts);
   if( osm_log_is_active( p_mgr->p_log, OSM_LOG_DEBUG ) )
     ucast_mgr_dump(p_mgr, NULL, __osm_ucast_mgr_dump_path_distribution);;
   ucast_mgr_dump_to_file(p_mgr, "osm.fdbs", __osm_ucast_mgr_dump_ucast_routes);
-- 
1.4.3.g7768


_______________________________________________
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