~ubuntu-branches/ubuntu/raring/ibutils/raring-proposed

« back to all changes in this revision

Viewing changes to ibmgtsim/tests/ibdiag-dup-both-guids.sim.tcl

  • Committer: Bazaar Package Importer
  • Author(s): Benoit Mortier
  • Date: 2010-01-11 22:22:00 UTC
  • Revision ID: james.westby@ubuntu.com-20100111222200-53kum2et5nh13rv3
Tags: upstream-1.2-OFED-1.4.2
ImportĀ upstreamĀ versionĀ 1.2-OFED-1.4.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
puts "FLOW: duplicate some port guid"
 
3
 
 
4
# duplicate the node guid from the source to the dest
 
5
proc dupNodeGuid {fromNode toNode} {
 
6
   global errorInfo
 
7
   set newGuid [IBNode_guid_get $fromNode]
 
8
   set toNodeName [IBNode_name_get $toNode]
 
9
   set fromNodeName [IBNode_name_get $fromNode]
 
10
   puts "-I- Overriding node:$toNodeName guid to $newGuid (dup of $fromNodeName)"
 
11
 
 
12
   # IBDM ...
 
13
   IBNode_guid_set $toNode $newGuid
 
14
 
 
15
   # But we need to deal with the SIMNODE too:
 
16
   set simNode "sim$toNode"
 
17
   set ni [IBMSNode_getNodeInfo $simNode]
 
18
   ib_node_info_t_node_guid_set $ni $newGuid
 
19
}
 
20
 
 
21
# duplicate the port guid from the source to the dest
 
22
proc dupPortGuid {fromNodeNPort toNodeNPort} {
 
23
 
 
24
   # IBDM has a limitation of not holding "end ports"
 
25
   # instead only physical ports are available.
 
26
   # So in case of a switch port (port num 0) we need to handle all physical ports
 
27
   # instead...
 
28
 
 
29
   # do we have a switch as the guid to duplicate?
 
30
   set node [lindex $fromNodeNPort 0]
 
31
   if {[lindex $fromNodeNPort 1] == 0} {
 
32
      # just use the port 1 instead
 
33
      set port [IBNode_getPort $node  1]
 
34
      set fromPortName "[IBNode_name_get $node]/P0"
 
35
   } else {
 
36
      set port [IBNode_getPort $node [lindex $fromNodeNPort 1]]
 
37
      set fromPortName [IBPort_getName $port]
 
38
   }
 
39
   set newGuid [IBPort_guid_get $port]
 
40
 
 
41
   # do we have a switch port 0 as a target?
 
42
   set node [lindex $toNodeNPort 0]
 
43
   if {[lindex $toNodeNPort 1] == 0} {
 
44
      set numPorts [IBNode_numPorts_get $node]
 
45
      for {set pn 1} {$pn <= $numPorts} {incr pn} {
 
46
         set port [IBNode_getPort $node $pn]
 
47
         if {$port != ""} {
 
48
            lappend targetPorts $port
 
49
         }
 
50
      }
 
51
      set simNodeInfo [IBMSNode_getNodeInfo sim$node]
 
52
      puts "-I- Overriding node:[IBNode_name_get $node] port guid to $newGuid (dup of $fromPortName)"
 
53
      ib_node_info_t_port_guid_set $simNodeInfo $newGuid
 
54
   } else {
 
55
      set port [IBNode_getPort $node [lindex $toNodeNPort 1]]
 
56
      set targetPorts $port
 
57
   }
 
58
 
 
59
   # do the copy
 
60
   foreach port $targetPorts {
 
61
      puts "-I- Overriding port:[IBPort_getName $port] guid to $newGuid (dup of $fromPortName)"
 
62
      IBPort_guid_set $port $newGuid
 
63
   }
 
64
}
 
65
 
 
66
# get a random order of all the fabric endports:
 
67
# a list of {node port-num random}
 
68
proc getEndPortsByRandomOreder {fabric} {
 
69
   # get number of nodes:
 
70
   set nodesByName [IBFabric_NodeByName_get $fabric]
 
71
 
 
72
   set nodePortNOrderList {}
 
73
   foreach nodeNameNId [IBFabric_NodeByName_get $fabric] {
 
74
      set node [lindex $nodeNameNId 1]
 
75
 
 
76
      # each node might be a switch (then take port 0)
 
77
      if {[IBNode_type_get $node] == 1} {
 
78
         lappend nodePortNOrderList [list $node 0 [rmRand]]
 
79
      } else {
 
80
         # only connected ports please:
 
81
         set numPorts [IBNode_numPorts_get $node]
 
82
         for {set pn 1} {$pn <= $numPorts} {incr pn} {
 
83
            set port [IBNode_getPort $node $pn]
 
84
            if {($port != "") && ([IBPort_p_remotePort_get $port] != "")} {
 
85
               lappend nodePortNOrderList [list $node $pn [rmRand]]
 
86
            }
 
87
         }
 
88
      }
 
89
   }
 
90
 
 
91
   set randNodes {}
 
92
   foreach nodePortNRnd [lsort -index 2 -real $nodePortNOrderList] {
 
93
      lappend randNodes [lrange $nodePortNRnd 0 1]
 
94
   }
 
95
   return $randNodes
 
96
}
 
97
 
 
98
# setup post SM run changes:
 
99
proc postSmSettings {fabric} {
 
100
   return "-I- Nothing to be done post SM"
 
101
}
 
102
 
 
103
# make sure ibdiagnet reported the bad links
 
104
proc verifyDiagRes {fabric logFile} {
 
105
   return "-I- Could not figure out if OK yet"
 
106
}
 
107
 
 
108
set fabric [IBMgtSimulator getFabric]
 
109
 
 
110
# get a random order of the end ports:
 
111
set randEndPorts [getEndPortsByRandomOreder $fabric]
 
112
set numEndPorts [llength $randEndPorts]
 
113
 
 
114
set swaps [expr int([rmRand]*$numEndPorts)/5]
 
115
set swaps 1
 
116
for {set i 1} {$i <= $swaps } {incr i} {
 
117
    set idx [expr ($i + int([rmRand]*$numEndPorts))%$numEndPorts]
 
118
    set fromNodeNPort [lindex $randEndPorts $idx]
 
119
    set clones [expr int([rmRand]*2)]
 
120
    for {set j 1} {$j <= $clones} {incr j} {
 
121
       set toNodeNPort [lindex $randEndPorts [expr ($idx+$j)%$numEndPorts]]
 
122
       if {[catch {dupPortGuid $fromNodeNPort $toNodeNPort} e]} {
 
123
          puts $errorInfo
 
124
       }
 
125
       dupNodeGuid [lindex $fromNodeNPort 0] [lindex $toNodeNPort 0]
 
126
    }
 
127
}