Codebase list ibutils / lintian-fixes/main ibmgtsim / tests / osmStability.sim.tcl
lintian-fixes/main

Tree @lintian-fixes/main (Download .tar.gz)

osmStability.sim.tcl @lintian-fixes/mainraw · history · blame

puts "Randomally picking 10 ports and assigning random drop rate on"
########################################################################
#
#  Inject Random Multicast Requests
#

########################################################################
#
# Set Random Bad Links
proc setNodePortErrProfile {node} {
   # pick a random port number - but make sure you picked a connected one
   set done 0
   set cnt 0
   while {!$done && ($cnt < 100) } {
      set portNum [expr int([rmRand]*[IBNode_numPorts_get $node])+1]
      set port [IBNode_getPort $node $portNum]
      if {$port != ""} {
         if {[IBPort_p_remotePort_get $port] != ""} {
             set done 1
         }
      }
      incr cnt
   }
   if {!$done} {
      puts "-E- Fail to get connected port for node $node"
      return
   }

   # pick a random drop rate in the range 0 - 1 . The higher the number
   # the more chances for drop.
   set dropRate [rmRand]

   # set the node drop rate
   puts "-I- Setting drop rate:$dropRate on node:$node port:$portNum"
   set portErrProf "-drop-rate-avg $dropRate -drop-rate-var 4"
   IBMSNode_setPhyPortErrProfile sim$node $portNum $portErrProf
}

# get a random order of all the fabric nodes:
proc getNodesByRandomOreder {fabric} {
   # get number of nodes:
   set nodesByName [IBFabric_NodeByName_get $fabric]

   set nodeNameNOrderList {}
   foreach nodeNameNId [IBFabric_NodeByName_get $fabric] {
      lappend nodeNameNOrderList [list [lindex $nodeNameNId 1] [rmRand]]
   }

   set randNodes {}
   foreach nodeNameNOrder [lsort -index 1 -real $nodeNameNOrderList] {
      lappend randNodes [lindex $nodeNameNOrder 0]
   }
   return $randNodes
}

set fabric [IBMgtSimulator getFabric]

# get a random order of the nodes:
set randNodes [getNodesByRandomOreder $fabric]
set numNodes [llength $randNodes]

# now get the first N nodes for err profile ...
set numNodesUsed 0
set idx 0
while {($numNodesUsed < $numNodes / 10) && ($numNodesUsed < 12) && ($idx < $numNodes)} {
   set node [lindex $randNodes $idx]
   # ignore the root node:
   if {[IBNode_name_get $node] != "H-1/U1"} {
      if {[IBNode_type_get $node] != $IB_SW_NODE} {
         setNodePortErrProfile $node
         incr numNodesUsed
      }
   }
   incr idx
}