1 OpenSM Release Notes 2 ====================== 3 4Version: OpenFabric Enterprise Distribution (OFED) 1.0 5Repo: https://openib.org/svn/gen2/branches/1.0/src/userspace/management/osm 6Version: 7992 7Date: Jun 2006 8 91 Overview 10---------- 11This document describes the contents of the OpenSM OFED 1.0 release. 12OpenSM is an InfiniBand compliant Subnet Manager and Administrator, 13and runs on top of OpenIB. The OpenSM version for this release 14is openib-1.2.1 15 16This document includes the following sections: 171 This Overview section (describing new features and software 18 dependencies) 192 Known Issues And Limitations 203 Unsupported IB compliance statements 214 Major Bug Fixes 225 Main Verification Flows 236 Qualified software stacks and devices 24 251.1 New Features 26 27* SA GuidInfoRecord support 28 29* Default for maxsmps changed: 30 Control the number of SMP sent in parallel and thus shorten the 31 fabric initialization time. 32 33* osmtest/osmt_slvl_vl_arb.c: 34 Output file name changed from vl_arbs.txt to qos.txt 35 36* Support new IBTA Errata IsPortInfoCapMaskMatchSupported: 37 This new capability of the SA enables matching of individual port 38 capability bits dramatically reducing the query size for agents like 39 the SRP initiator query for finding SRP targets. 40 41* Honor guid2lid when coming out of standby: 42 This change adds an option to the opensm that forces it to honor the 43 guid2lid file given when it comes out of Standby state. Currently, 44 when opensm comes out of Standby state, it ignores the guid2lid file 45 it read, and honors only the lids defined on the ports themselves. 46 47* Add guid to opensm opts 48 This enables the port on which to run the SM to be defined through 49 the configuration file as well as through the command line. 50 51* PPC support: 52 No PPC QA was performed. 53 541.2 Software Dependencies 55 56OpenSM depends on the installation of either OFED 1.0, 57OpenIB gen2 (e.g. IBG2 distribution), OpenIB gen1 (e.g. IBGD 58distribution) or Mellanox VAPI stacks. The qualified driver versions 59are provided in Table 2, "Qualified IB Stacks". 60 611.4 Supported Devices Firmware 62 63The main task of OpenSM is to initialize InfiniBand devices. The 64qualified devices and their corresponding firmware versions 65are listed in Table 3. 66 672 Known Issues And Limitations 68------------------------------ 69 70* No Partition/Pkey policy support: 71 OpenSM does not provide means to set partitions. 72 73* No Service / Key associations: 74 There is no way to manage Service access by Keys. 75 76* No SM to SM SMDB synchronization: 77 Puts the burden of re-registering services, multicast groups, and 78 inform-info on the client application (or IB access layer core). 79 80* No "port down" event handling: 81 Changing the switch port through which OpenSM connects to the IB 82 fabric may cause incorrect operation. Please restart OpenSM whenever 83 such a connectivity change is made. 84 85* Changing connections during SM operation: 86 Under some conditions the SM can get confused by a change in 87 cabling (moving a cable from one switch port to the other) and 88 momentarily see this as having the same GUID appear connected 89 to two different IB ports. Under some conditions, when the SM fails to 90 get the corresponding change event it might mistakenly report this case 91 as a "duplicated GUID" case and abort. It is advisable to double-check 92 the syslog after each such change in connectivity and restart 93 OpenSM if it has exited. 94 95* No QoS support: 96 No SL2VL and VLArbitration setting is performed by the SM. 97 983 Unsupported IB Compliance Statements 99-------------------------------------- 100The following section lists all the IB compliance statements which 101OpenSM does not support. Please refer to the IB specification for detailed 102information regarding each compliance statement. 103 104* C14-22 (Authentication): 105 M_Key M_KeyProtectBits and M_KeyLeasePeriod shall be set in one 106 SubnSet method. As a work-around, an OpenSM option is provided for 107 defining the protect bits. 108 109* C14-67 (Authentication): 110 On SubnGet(SMInfo) and SubnSet(SMInfo) - if M_Key is not zero then 111 the SM shall generate a SubnGetResp if the M_Key matches, or 112 silently drop the packet if M_Key does not match. 113 114* C15-0.1.23.4 (Authentication): 115 InformInfoRecords shall always be provided with the QPN set to 0, 116 except for the case of a trusted request, in which case the actual 117 subscriber QPN shall be returned. 118 119* o13-17.1.2 (Event-FWD): 120 If no permission to forward, the subscription should be removed and 121 no further forwarding should occur. 122 123* C14-37.1.2 (Handover): 124 Priority should be kept in non-volatile memory. 125 126* C14-24.1.1.5 and C14-62.1.1.22 (Initialization): 127 GUIDInfo - SM should enable assigning Port GUIDInfo. 128 129* C14-44 (Initialization): 130 If the SM discovers that it is missing an M_Key to update CA/RT/SW, 131 it should notify the higher level. 132 133* C14-62.1.1.11 (Initialization): 134 PortInfo:VLHighLimit should match the configured VLArb on the port. 135 136* C14-62.1.1.12 (Initialization): 137 PortInfo:M_Key - Set the M_Key to a node based random value. 138 139* C14-62.1.1.13 (Initialization): 140 PortInfo:P_KeyProtectBits - set according to an optional policy. 141 142* C14-62.1.1.24 (Initialization): 143 SwitchInfo:DefaultPort - should be configured for random FDB. 144 145* C14-62.1.1.32 (Initialization): 146 RandomForwardingTable should be configured. 147 148* o15-0.1.12 (Multicast): 149 If the JoinState is SendOnlyNonMember = 1 (only), then the endport 150 should join as sender only. 151 152* o15-0.1.13 (Multicast): 153 If a Join request using unrealistic parameters is received, return 154 ERR_REQ_INVALID. 155 156* o15-0.1.8 (Multicast): 157 If a request for creating an MCG with fields that cannot be met, 158 return ERR_REQ_INVALID (currently ignoring SL and FlowLabelTclass). 159 160* C15-0.1.11 (SA-Query): 161 Query response should use only base LIDs (as the feature has not 162 been qualified yet). 163 164* C15-0.1.19 (SA-Query): 165 Respond to SubnGetMulti(MultiPathRec) 166 167* C15-0.1.8.6 (SA-Query): 168 Respond to SubnAdmGetTraceTable - this is an optional attribute. 169 170* C15-0.1.8.7 (SA-Query): 171 SubnAdmGetMulti SubnAdmGetMultiResp - Only in case of a MultiPath. 172 173* C15-0.1.13 Services: 174 Reject ServiceRecord create, modify or delete if the given 175 ServiceP_Key does not match the one included in the ServiceGID port 176 and the port that sent the request. 177 178* C15-0.1.14 (Services): 179 Provide means to associate service name and ServiceKeys. 180 1814 Major Bug Fixes 182----------------- 183 184The following is a list of bugs that were fixed. Note that other less critical 185or visible bugs were also fixed. 186 187* Eliminate error on active -> active port state transition 188 SM may transition port from armed to active but in the meantime, due 189 to passing a data packet with active enable set, the port may 190 already have transitioned to active. Active -> active port state 191 transition is indicated as an error but it isn't really an error so 192 don't indicate error in the osm log. 193 194* Routing not set for the first LID in the last LFT block: 195 Fix: osm_switch.c: In osm_switch_get_fwd_tbl_block last block calculation 196 197* Corrupted guid2lid file causes OpenSM exit 198 Fix: exit only if exit_on_fatal option is set (the default) 199 200* OpenSM was causing Client-Re-Registration continuously: 201 The SM was storing the response PortInfo.ClientReRegstration 202 bit and using it during next Set(PortInfo). Fix: clear the bit on 203 receive. 204 205* Multicast Query Selectors MTU, rate, and PacketLifeTime were not exact 206 207* Try not to recognize port change as duplicated GUID 208 This fix solves the issue of a port move during heavy sweep 209 being recognized as a duplicated guid. Fix: If the SM sees what 210 seems to be a duplicated guid, but it also received an indication 211 for immediately forcing another heavy sweep (for example, as a 212 result of receiving trap 128) then it shouldn't issue a duplicated 213 guid error (and possibly exit), but should just ignore this and 214 continue. This means that only if the SM recognizes such a 215 duplication in a stable subnet that it'll issue the error (and 216 possibly exit). 217 218* Set PKey table on switch ports not supporting it: 219 OpenSM attempts to set pkey table entries on external switch ports 220 even if the switch declares a PartitionEnforcementCap of zero. The 221 consequence is ERR 4108. Fix: Observe PartitionEnforcementCap of zero. 222 223* Incorrect MCMemberRecord Get/GetTable in trusted mode: 224 This change fixes the retrieval of the MCMember records according to 225 Errata MGTWG3280. This fix provide means to obtain all the group 226 members by issuing a trusted GetTable query. 227 228* Trusted MCMemberRecord query was not recognized as trusted: 229 Trust is checked by comparing the request SM_Key field to the SM 230 SM_Key. The bug was in looking up the SM_Key from the response not 231 the request. 232 233* Port left in down state after setting MTU or OpVLs on its neighbor: 234 In case of a difference between the MTU of two ports, only the port 235 with the higher MTU was set to down. Its remote port was written in 236 the DB as in the ACTIVE state although its real status was INIT. 237 Because of this, the SM didn't try to move the remote port to 238 ACTIVE. 239 240* Atomic counters used throughout the code were broken: 241 A new implementation has been provided. 242 243* MC Group creation with "less than" MTU ignores the requester MTU: 244 When requesting to create an MC group with MTU(rate) selector 1 245 (meaning less than rate specified), the MC group is created with 246 MTU(rate) requested - 1. This is without checking the MTU(rate) of 247 the port requesting the creation of the multicast group. This means 248 that if, for example, port with MTU=2 sends a request for MC group 249 creation with MTU selector=1 and MTU=5, Opensm will try to create a 250 MC group with MTU=4, and fail, since the port capabilities are not 251 realizable. Fix: creation of the MC group with MTU(rate) also takes 252 into account the MTU(rate) of the port requesting the creation. 253 254* MC Group join does not validate that the joining port's capabilities 255 match those of the MC. Fix: Add verification of endport physical 256 capability to join MC group. 257 258* ClientReRegistration not sent to ports discovered after first sweep: 259 PortInfo sent with ClientReRegistration bit turned on only during 260 the first sweep after becoming Master. This doesn't cover all cases 261 where ClientReRegistration should be turned on. Fix: turn on this 262 bit also on new ports it discovers (in cases of subnet merging, for 263 example). 264 265* segfault during a report on deleted multicast group: 266 osm_mcast_mgr.c, executing the line of code: 267 osm_mgrp_send_delete_notice( p_mgr->p_subn, p_mgr->p_log, p_mgrp ); 268 caused segmentation fault since the handle p_mgrp was already 269 deleted while the function was called. Fix: inserted the line above 270 into the protected section. 271 272* segfault in osm_get_gid_by_mad_addr: 273 The affected flows are ports and multicast joins. 274 275* segfault in LID manager: 276 Handle NULL p_rem_physp can validly be NULL when the remote SMA is 277 not responding (but physical link is up). 278 279* segfault in Up/Down routing engine 280 281 2825 Main Verification Flows 283------------------------- 284 285OpenSM verification is run using the following activities: 286* osmtest - a stand-alone program 287* ibmgtsim (IB management simulator) based - a set of flows that 288 simulate clusters, inject errors and verify OpenSM capability to 289 respond and bring up the network correctly. 290* small cluster regression testing - where the SM is used on back to 291 back or single switch configurations. The regression includes 292 multiple OpenSM dedicated tests. 293* cluster testing - when we run OpenSM to setup a large cluster, perform 294 hand-off, reboots and reconnects, verify routing correctness and SA 295 responsiveness at the ULP level (IPoIB and SDP). 296 2975.1 osmtest 298 299osmtest is an automated verification tool used for OpenSM 300testing. Its verification flows are described by list below. 301 302* Inventory File: Obtain and verify all port info, node info, and path 303 records parameters. 304 305* Service Record: 306 - Register new service 307 - Register another service (with a lease period) 308 - Register another service (with service p_key set to zero) 309 - Get all services by name 310 - Delete the first service 311 - Delete the third service. 312 - Added bad flows of get/delete non valid service 313 - Add / Get same service with different data 314 - Add / Get / Delete by different component mask values (services 315 by Name & Key / Name & Data / Name & Id / Id only ) 316 317* Multicast Member Record: 318 - Query of existing Groups (IPoIB) 319 - BAD Join with insufficient comp mask (o15.0.1.3) 320 - Create given MGID=0 (o15.0.1.4) 321 - Create given MGID=0xFF12A01C,FE800000,00000000,12345678 (o15.0.1.4) 322 - Create BAD MGID=0xFA. (o15.0.1.6) 323 - Create BAD MGID=0xFF12A01B w/ link-local not set (o15.0.1.6) 324 - New MGID with invalid join state (o15.0.1.9) 325 - Retry of existing MGID - See JoinState update (o15.0.1.11) 326 - BAD RATE when connecting to existing MGID (o15.0.1.13) 327 - Partial JoinState delete request - removing FullMember (o15.0.1.14) 328 - Full Delete of a group (o15.0.1.14) 329 - Verify Delete by trying to Join deleted group (o15.0.1.14) 330 - BAD Delete of IPoIB membership (no prev join) (o15.0.1.15) 331 332* GUIDInfo Record: 333 - All GUIDInfoRecords in subnet are obtained 334 335* Event Forwarding: Register for trap forwarding using reports 336 - Send a trap and wait for report 337 - Unregister non-existing 338 339* Trap 64/65 Flow: Register to Trap 64-65, create traps (by 340 disconnecting/connecting ports) and wait for report, then unregister. 341 342* Stress Test: send PortInfoRecord queries, both single and RMPP and 343 check for the rate of responses as well as their validity. 344 345 3465.2 IB Management Simulator OpenSM Test Flows: 347 348The simulator provides ability to simulate the SM handling of virtual 349topologies that are not limited to actual lab equipment availability. 350OpenSM was simulated to bring up clusters of up to 10,000 nodes. Daily 351regressions use smaller (16 and 128 nodes clusters). 352 353The following test flows are run on the IB management simulator: 354 355* Stability: 356 Up to 12 links from the fabric are randomly selected to drop packets 357 at drop rates up to 90%. The SM is required to succeed in bringing the 358 fabric up. The resulting routing is verified to be correct, too. 359 360* LID Manager: 361 Using LMC = 2 the fabric is initialized with LIDs. Faults such as 362 zero LID, Duplicated LID, non-aligned (to LMC) LIDs are 363 randomly assigned to various nodes and other errors are randomly 364 output to the guid2lid cache file. The SM sweep is run 5 times and 365 after each iteration a complete verification is made to ensure that all 366 LIDs that could possibly be maintained are kept, as well as that all nodes 367 were assigned a legal LID range. 368 369* Multicast Routing: 370 Nodes randomly join the 0xc000 group and eventually the 371 resulting routing is verified for completeness and adherence to 372 Up/Down routing rules. 373 374* osmtest: 375 The complete osmtest flow as described in the previous table is run on 376 the simulated fabrics. 377 378* Stress Test: 379 This flow merges fabric, LID and stability issues with continuous 380 PathRecord, ServiceRecord and Multicast Join/Leave activity to 381 stress the SM/SA during continuous sweeps. 382 3835.3 OpenSM Regression 384 385Using a back-to-back or single switch connection, the following set of 386tests is run nightly on the stacks described in table 2. The included 387tests are: 388 389* Stress Testing: Flood the SA with queries from multiple channel 390 adapters to check the robustness of the entire stack up to the SA. 391 392* Dynamic Changes: Dynamic Topology changes, through randomly 393 dropping SMP packets, used to test OpenSM adaptation to an unstable 394 network & verify DB correctness. 395 396* Trap Injection: This flow injects traps to the SM and verifies that it 397 handles them gracefully. 398 399* SA Query Test: This test exhaustively checks the SA responses to all 400 possible single component mask. To do that the test examines the 401 entire set of records the SA can provide, classifies them by their 402 field values and then selects every field (using component mask and a 403 value) and verifies that the response matches the expected set of records. 404 A random selection using multiple component mask bits is also performed. 405 4065.4 Cluster testing: 407 408Cluster testing is usually run before a distribution release. It 409involves real hardware setups of 16 to 32 nodes (or more if a beta site 410is available). Each test is validated by running all-to-all ping through the IB 411interface. The test procedure includes: 412 413* Cluster bringup 414 415* Hand-off between 2 or 3 SM's while performing 416 - Node reboots 417 - Switch power cycles (disconnecting the SM's) 418 419* Unresponsive port detection and recovery 420 421* osmtest from multiple nodes 422 423* Trap injection and recovery 424 425 4266 Qualification 427---------------- 428 429Table 2 - Qualified IB Stacks 430============================= 431 432Stack | Version 433-----------------------------------------|-------------------------- 434OFED | 1.0 435OpenIB Gen2 (IBG2 distribution) | 1.0 436OpenIB Gen1 (IBGD distribution) | 1.8.0 437VAPI (Mellanox InfiniBand HCA Driver) | 3.2 and later 438 439Table 3 - Qualified Devices and Corresponding Firmware 440====================================================== 441 442Mellanox 443Device | FW versions 444--------|----------------------------------------------------------- 445MT43132 | InfiniScale - fw-43132 5.2.0 (and later) 446MT47396 | InfiniScale III - fw-47396 0.5.0 (and later) 447MT23108 | InfiniHost - fw-23108 3.3.2 448MT25204 | InfiniHost III Lx - fw-25204 1.0.1 449MT25208 | InfiniHost III Ex (InfiniHost Mode) - fw-25208 4.6.2 (and later) 450MT25208 | InfiniHost III Ex (MemFree Mode) - fw-25218 5.0.1 (and later) 451 452QLogic/PathScale 453Device | Note 454--------|----------------------------------------------------------- 455iPath | QHT6040 (PathScale InfiniPath HT-460) 456iPath | QHT6140 (PathScale InfiniPath HT-465) 457iPath | QLE6140 (PathScale InfiniPath PE-880) 458 459Note: OpenSM does not run on an IBM Galaxy (eHCA) as it does not expose 460QP0 and QP1. However, it does support it as a device on the subnet. 461