@@ -1,7 +1,7 @@
/*
* Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
* Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
- * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2002-2010 Mellanox Technologies LTD. All rights reserved.
* Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
*
* This software is available to you under a choice of one of two
@@ -456,6 +456,60 @@ static void dump_topology_node(cl_map_item_t * item, FILE * file, void *cxt)
}
}
+static void dump_sl2vl_tbl(cl_map_item_t * item, FILE * file, void *cxt)
+{
+ osm_port_t *p_port = (osm_port_t *) item;
+ osm_node_t *p_node = p_port->p_node;
+ uint32_t in_port, out_port,
+ num_ports = p_node->node_info.num_ports;
+ ib_net16_t base_lid = osm_port_get_base_lid(p_port);
+ osm_physp_t *p_physp;
+ ib_slvl_table_t *p_tbl;
+ int i, n;
+ char buf[1024];
+ char * header_line = "#in out : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15";
+ char * separator_line = "#--------------------------------------------------------";
+
+ if (!num_ports)
+ return;
+
+ fprintf(file, "%s 0x%016" PRIx64 ", base LID %d, "
+ "\"%s\"\n%s\n%s\n",
+ ib_get_node_type_str(p_node->node_info.node_type),
+ cl_ntoh64(p_port->guid), cl_ntoh16(base_lid),
+ p_node->print_desc, header_line, separator_line);
+
+ if (p_node->node_info.node_type == IB_NODE_TYPE_SWITCH) {
+ for (out_port = 0; out_port <= num_ports; out_port++){
+ p_physp = osm_node_get_physp_ptr(p_node, out_port);
+
+ /* no need to print SL2VL table for port that is down */
+ if (!p_physp->p_remote_physp)
+ continue;
+
+ for (in_port = 0; in_port <= num_ports; in_port++) {
+ p_tbl = osm_physp_get_slvl_tbl(p_physp, in_port);
+ for (i = 0, n = 0; i < 16; i++)
+ n += sprintf(buf + n, " %-2d",
+ ib_slvl_table_get(p_tbl, i));
+ fprintf(file, "%-3d %-3d :%s\n",
+ in_port, out_port, buf);
+ }
+ }
+ } else {
+ p_physp = p_port->p_physp;
+ CL_ASSERT(p_physp->p_remote_physp);
+ p_tbl = osm_physp_get_slvl_tbl(p_physp, 0);
+ for (i = 0, n = 0; i < 16; i++)
+ n += sprintf(buf + n, " %-2d",
+ ib_slvl_table_get(p_tbl, i));
+ fprintf(file, "%-3d %-3d :%s\n",
+ 0, p_physp->port_num, buf);
+ }
+
+ fprintf(file, "%s\n\n", separator_line);
+}
+
static void print_node_report(cl_map_item_t * item, FILE * file, void *cxt)
{
osm_node_t *p_node = (osm_node_t *) item;
@@ -630,6 +684,11 @@ void osm_dump_all(osm_opensm_t * osm)
osm_dump_qmap_to_file(osm, "opensm.mcfdbs",
&osm->subn.sw_guid_tbl,
dump_mcast_routes, osm);
+ /* SL2VL tables */
+ if (osm->subn.opt.qos)
+ osm_dump_qmap_to_file(osm, "opensm-sl2vl.dump",
+ &osm->subn.port_guid_tbl,
+ dump_sl2vl_tbl, osm);
}
osm_dump_qmap_to_file(osm, "opensm-subnet.lst",
&osm->subn.node_guid_tbl, dump_topology_node,