[openib-general] [PATCH] osm.mcfdbs - ignore "empty" MLID or switch]
Eitan Zahavi
eitan at mellanox.co.il
Wed Dec 6 02:17:34 PST 2006
Hi Hal
The simulated regression caught this:
The osm.mcfdbs have now the format:
Switch 0x0002c90000000006
LID : Out Port(s)
0xC000 : 0x003 0x004 0x005 0x006
0xC001 :0xC002 :0xC003 :0xC004 :0xC005 :0xC006 :0xC007 :0xC008 :0xC009
:0xC00A :0xC00B :0xC00C :0xC00D :0xC00E :0xC00F :0xC010 :0xC011 :0xC012
:0xC013 :0xC014 :0xC015 :0xC016 :0xC017 :0xC018 :0xC019 :0xC01A :0xC01B
:0xC01C :0xC01D :0xC01E :0xC01F :
Which should probably just be:
Switch 0x0002c90000000006
LID : Out Port(s)
0xC000 : 0x003 0x004 0x005 0x006
Actually switches that do not have any MCG entry will not be included
in the dump file.
The following patch fixes that.
Eitan
Signed-off-by: Eitan Zahavi <eitan at mellanox.co.il>
Index: opensm/osm_mcast_mgr.c
===================================================================
--- opensm/osm_mcast_mgr.c (revision 10188)
+++ opensm/osm_mcast_mgr.c (working copy)
@@ -1389,10 +1389,13 @@ mcast_mgr_dump_sw_routes(
int16_t mlid_start_ho;
uint8_t position = 0;
int16_t block_num = 0;
- boolean_t print_lid;
+ boolean_t first_mlid;
+ boolean_t first_port;
const osm_node_t* p_node;
uint16_t i, j;
uint16_t mask_entry;
+ char sw_hdr[256];
+ char mlid_hdr[32];
OSM_LOG_ENTER( p_mgr->p_log, mcast_mgr_dump_sw_routes );
@@ -1403,9 +1406,10 @@ mcast_mgr_dump_sw_routes(
p_tbl = osm_switch_get_mcast_tbl_ptr( p_sw );
- fprintf( file, "\nSwitch 0x%016" PRIx64 "\n"
+ sprintf( sw_hdr, "\nSwitch 0x%016" PRIx64 "\n"
"LID : Out Port(s)\n",
- cl_ntoh64( osm_node_get_node_guid( p_node ) ) );
+ cl_ntoh64( osm_node_get_node_guid( p_node ) ) );
+ first_mlid = TRUE;
while ( block_num <= p_tbl->max_block_in_use )
{
mlid_start_ho = (uint16_t)(block_num * IB_MCAST_BLOCK_SIZE);
@@ -1413,8 +1417,8 @@ mcast_mgr_dump_sw_routes(
{
mlid_ho = mlid_start_ho + i;
position = 0;
- print_lid = FALSE;
- fprintf( file, "0x%04X :", mlid_ho + IB_LID_MCAST_START_HO );
+ first_port = TRUE;
+ sprintf( mlid_hdr, "0x%04X :", mlid_ho + IB_LID_MCAST_START_HO );
while ( position <= p_tbl->max_position )
{
mask_entry = cl_ntoh16((*p_tbl->p_mask_tbl)[mlid_ho][position]);
@@ -1423,17 +1427,27 @@ mcast_mgr_dump_sw_routes(
position++;
continue;
}
- print_lid = TRUE;
for (j = 0 ; j < 16 ; j++)
{
- if ( (1 << j) & mask_entry )
- fprintf( file, " 0x%03X ", j+(position*16) );
+ if ( (1 << j) & mask_entry ) {
+ if (first_mlid)
+ {
+ fprintf( file,"%s", sw_hdr );
+ first_mlid = FALSE;
+ }
+ if (first_port)
+ {
+ fprintf( file,"%s", mlid_hdr );
+ first_port = FALSE;
+ }
+ fprintf( file, " 0x%03X ", j+(position*16) );
+ }
}
position++;
}
- if (print_lid)
+ if (first_port == FALSE)
{
- fprintf( file, "\n" );
+ fprintf( file, "\n" );
}
}
block_num++;
More information about the general
mailing list