[openib-general] [PATCH 5/5] opensm: dump_lfts.sh compatible dumper for OpenSM

Sasha Khapyorsky sashak at voltaire.com
Thu Oct 19 13:35:25 PDT 2006


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 <sashak at voltaire.com>
---
 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





More information about the general mailing list