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

« back to all changes in this revision

Viewing changes to ibdiag/demo/partition.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
puts "Running Simulation flow for Partitions test case"
 
2
 
 
3
# Assign partitions randomly
 
4
# Group 1 : 0x8001
 
5
# Group 2 : 0x8002
 
6
# Group 3 : 0x8001 0x8002 0x8003
 
7
#
 
8
# NOTE: default partition set by the SM ...
 
9
 
 
10
# find all active HCA ports
 
11
proc getAllActiveHCAPorts {fabric} {
 
12
   set hcaPorts {}
 
13
 
 
14
   # go over all nodes:
 
15
   foreach nodeNameId [IBFabric_NodeByName_get $fabric] {
 
16
      set node [lindex $nodeNameId 1]
 
17
 
 
18
      # we do care about non switches only
 
19
      if {[IBNode_type_get $node] != 1} {
 
20
         # go over all ports:
 
21
         for {set pn 1} {$pn <= [IBNode_numPorts_get $node]} {incr pn} {
 
22
            set port [IBNode_getPort $node $pn]
 
23
            if {($port != "") && ([IBPort_p_remotePort_get $port] != "")} {
 
24
               lappend hcaPorts $port
 
25
            }
 
26
         }
 
27
      }
 
28
   }
 
29
   return $hcaPorts
 
30
}
 
31
 
 
32
# prepare the three PKey groups G1 G2 abd G3
 
33
# then set the active HCA ports PKey tables (based on node name % 3)
 
34
# Note that the H-1/P1 has to have a slightly different PKey table
 
35
# with 0xffff such that all nodes can query the SA:
 
36
# we track the assignments in the arrays:
 
37
# PORT_PKEY_GROUP(port) -> group
 
38
# PORT_GROUP_PKEY_IDX(port) -> index of pkey (if set or -1)
 
39
proc setAllHcaPortsPKeyTable {fabric} {
 
40
   global PORT_PKEY_GROUP
 
41
   global GROUP_PKEY
 
42
 
 
43
   set G1 [list 0x8001]
 
44
   set G2 [list 0x8002]
 
45
   set G3 [list 0x8001 0x8002 0x8003]
 
46
 
 
47
   set GROUP_PKEY(1) 0x8001
 
48
   set GROUP_PKEY(2) 0x8002
 
49
   set GROUP_PKEY(3) "0x8002 0x8001"
 
50
 
 
51
   puts "-I- Group1 Pkeys:$G1"
 
52
   puts "-I- Group2 Pkeys:$G2"
 
53
   puts "-I- Group3 Pkeys:$G3"
 
54
 
 
55
   set hcaPorts [getAllActiveHCAPorts $fabric]
 
56
 
 
57
   foreach port $hcaPorts {
 
58
      set portNum [IBPort_num_get $port]
 
59
      # the H-1/P1 has a special treatment:
 
60
      set node [IBPort_p_node_get $port]
 
61
                set nodeName [IBNode_name_get $node]
 
62
                set group [expr int(rand()*3) + 1]
 
63
                set PORT_PKEY_GROUP($port) $group
 
64
                switch $group {
 
65
                        1 {set pkeys $G1}
 
66
                        2 {set pkeys $G2}
 
67
                        3 {set pkeys $G3}
 
68
                        default {
 
69
                                puts "-E- How come we got group $group ?"
 
70
                        }
 
71
                }
 
72
   }
 
73
   # all HCA active ports
 
74
   return "Set PKeys on [array size PORT_PKEY_GROUP] ports"
 
75
}
 
76
 
 
77
# Remove given group PKey from Switch port accross the given host port
 
78
proc removeGroupPKeyAccrosForHcaPort {fabric hostNodeName portNum groupNum} {
 
79
        global GROUP_PKEY
 
80
        set hostNode [IBFabric_getNode $fabric $hostNodeName]
 
81
        if {$hostNode == ""} {
 
82
                puts "-E- fail to find node $hostNodeName"
 
83
                return "ERR: fail to find node $hostNodeName"
 
84
        }
 
85
        set port [IBNode_getPort $hostNode $portNum]
 
86
        if {$port == ""} {
 
87
                puts "-E- fail to find node $hostNodeName port $portNum"
 
88
                return "ERR: fail to find node $hostNodeName port $portNum"
 
89
        }
 
90
        set remPort [IBPort_p_remotePort_get $port]
 
91
        if {$remPort == ""} {
 
92
                puts "-E- no remote port accross $hostNodeName port $portNum"
 
93
                return "ERR:no remote port accross $hostNodeName port $portNum"
 
94
        }
 
95
 
 
96
        set swPortNum [IBPort_num_get $remPort]
 
97
        set remNode [IBPort_p_node_get $remPort]
 
98
        set swName  [IBNode_name_get $remNode]
 
99
 
 
100
        set pkey [lindex $GROUP_PKEY($groupNum) 0]
 
101
 
 
102
        set ni [IBMSNode_getNodeInfo sim$remNode]
 
103
        set partcap [ib_node_info_t_partition_cap_get $ni]
 
104
        set done 0
 
105
        for {set blockNum 0 } {$blockNum < ($partcap+31)/32} {incr blockNum} {
 
106
                set block [IBMSNode_getPKeyTblBlock sim$remNode $swPortNum $blockNum]
 
107
                puts "-I- PKey get $remNode port:$swPortNum block:$blockNum is:$block"
 
108
                #updating the block
 
109
                for {set i 0 } {$i < 32} {incr i} {
 
110
                        if {[lindex $block $i] == $pkey} {
 
111
                                set block [lreplace $block $i $i 0]
 
112
                                puts "-I- Removing $pkey from block:$blockNum idx:$i"
 
113
                                set done 1
 
114
                        }
 
115
                }
 
116
                IBMSNode_setPKeyTblBlock sim$remNode $swPortNum $blockNum $block
 
117
                set block [IBMSNode_getPKeyTblBlock sim$remNode $swPortNum $blockNum]
 
118
                puts "-I- PKey set $remNode port:$swPortNum block:$blockNum to:$block"
 
119
        }
 
120
        if {$done } {
 
121
                return "Removed Group:$groupNum PKey:$pkey from Switch:$swName port:$swPortNum accross:$hostNodeName"
 
122
        } else {
 
123
                return "ERR: fail to find pkey:$pkey on Switch:$swName port:$swPortNum accros:$hostNodeName"
 
124
        }
 
125
}
 
126
 
 
127
# Dump out the HCA ports and their groups:
 
128
proc dumpHcaPKeyGroupFile {simDir} {
 
129
   global PORT_PKEY_GROUP
 
130
   global GROUP_PKEY
 
131
 
 
132
   set fn [file join $simDir "port_pkey_groups.txt"]
 
133
   set f [open $fn w]
 
134
        puts $f [format "\#%-6s %-4s %-5s %-18s %s" HOST PORT GROUP GUID PKEYS]
 
135
   foreach port [array names PORT_PKEY_GROUP] {
 
136
      set node [IBPort_p_node_get $port]
 
137
      set sys  [IBNode_p_system_get $node]
 
138
      set num  [IBPort_num_get $port]
 
139
      set name [IBSystem_name_get $sys]
 
140
      set guid [IBPort_guid_get $port]
 
141
      set grp  $PORT_PKEY_GROUP($port)
 
142
      set pkeys $GROUP_PKEY($grp)
 
143
                set idx  1
 
144
      puts $f [format " %-6s %4d %5d %s %s" $name $num $grp $guid $pkeys]
 
145
   }
 
146
   close $f
 
147
   return "Dumpped Group info into:$fn"
 
148
}
 
149
 
 
150
# dump out the current set of pkey tables:
 
151
proc dumpPKeyTables {fabric} {
 
152
        set f [open "pkeys.txt" w]
 
153
   set hcaPorts [getAllActiveHCAPorts $fabric]
 
154
   foreach port $hcaPorts {
 
155
      set portNum [IBPort_num_get $port]
 
156
      set node [IBPort_p_node_get $port]
 
157
                set name [IBPort_getName $port]
 
158
      set ni [IBMSNode_getNodeInfo sim$node]
 
159
      set partcap [ib_node_info_t_partition_cap_get $ni]
 
160
                puts $f "PORT: $name  PartCap:$partcap"
 
161
      for {set blockNum 0 } {$blockNum < $partcap/32} {incr blockNum} {
 
162
         set block [IBMSNode_getPKeyTblBlock sim$node $portNum $blockNum]
 
163
         puts $f "BLOCK:$blockNum pkeys:$block"
 
164
                }
 
165
                puts $f " "
 
166
        }
 
167
        close $f
 
168
        return "Dumped pkeys into:pkeys.txt"
 
169
}
 
170
 
 
171
set fabric [IBMgtSimulator getFabric]