]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
[OPENSM] set opensm cache & config folder as %ProgramFiles%\WinOF\OpenSM; integrated...
authorstansmith <stansmith@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sat, 12 Dec 2009 00:57:11 +0000 (00:57 +0000)
committerstansmith <stansmith@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sat, 12 Dec 2009 00:57:11 +0000 (00:57 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1@2633 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

trunk/WinOF/WIX/common/OpenSM_service.inc
trunk/WinOF/WIX/common/requirements.inc
trunk/WinOF/WIX/common/std_features.inc
trunk/docs/Manual.htm
trunk/ulp/opensm/user/include/opensm/osm_base.h
trunk/ulp/opensm/user/include/opensm/osm_config.h
trunk/ulp/opensm/user/include/vendor/winosm_common.h
trunk/ulp/opensm/user/libvendor/winosm_common.c

index 7f38fb31897f06760b3a41dafd1aec13f165e081..9e403ca4d6dbe8ad4f7be89f9545af69a6f3fb27 100644 (file)
 \r
     </Component>\r
 \r
+    <!-- create a folder for OpenSM config files -->\r
+    <Directory Id="OpenSMDir" Name="OpenSM">\r
+        <Component Id="cOpenSMfolder"\r
+                   Guid="3D4B2704-05C4-4378-9D49-17580945B367">\r
+\r
+            <CreateFolder />\r
+\r
+            <RemoveFile Id='fOSM1' On='uninstall' Name="gid2lid" />\r
+            <RemoveFile Id='fOSM2' On='uninstall' Name="*.*" />\r
+            <RemoveFile Id='fOSM3' On='uninstall' Name="*" />\r
+\r
+            <RemoveFile Id='fOsmlog' On='uninstall' Property="WINTEMP"\r
+                        Name="osm.log" />\r
+            <RemoveFile Id='fOsmsyslog' On='uninstall' Property="WINTEMP"\r
+                        Name="osm.syslog" />\r
+        </Component>\r
+    </Directory>\r
+\r
 </Include>\r
index b8e3be6a467421ea3b48835a0229231ca56a12eb..f66fdee9d386693fb7d6b189e2a8c2c13b5f4ca1 100644 (file)
@@ -55,5 +55,6 @@
     <Property Id="DiskPrompt" Value="WinOF Installation [1]" />\r
 \r
     <SetProperty Id="WINROOT" Value="[WindowsVolume]" Before="CostInitialize" />\r
+    <SetProperty Id="WINTEMP" Value="[WindowsFolder]\temp\" Before="CostInitialize" />\r
 \r
 </Include>\r
index cb649e99b2607f927ca634a3e03ace266d0d2a71..2b565afb27b6b4b55908483c42f1773f7b1cfcab 100644 (file)
@@ -14,6 +14,7 @@
       <ComponentRef Id="WinOFshortcuts" />\r
       <ComponentRef Id="Tools" />\r
       <ComponentRef Id="OpenSMservice" />\r
+      <ComponentRef Id="cOpenSMfolder" />\r
 \r
       <?if $(var.ARCHP) = "x64" AND ($(var.OS) = "wlh" OR $(var.OS) = "win7") ?>\r
          <ComponentRef Id="cCertPush" />\r
index 122faa6c705474b4ea5f444f593d1f52cd23f777..d9562227156e3e9145b324ba7eb7b5aa94867377 100644 (file)
@@ -15,7 +15,7 @@ div.Section1
 <h1 align="center">User's Manual</h1>\r
 <h2 align="center">Release 2.1</h2>\r
 <h3 align="center">\r
-<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%m/%d/%Y" startspan -->08/18/2009<!--webbot bot="Timestamp" endspan i-checksum="12646" --></h3>\r
+<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%m/%d/%Y" startspan -->12/10/2009<!--webbot bot="Timestamp" endspan i-checksum="12507" --></h3>\r
 <h2 align="left"><u>Overview</u></h2>\r
 <p align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'">\r
 The Windows OpenFabrics (WinOF) package is composed of software modules intended \r
@@ -44,7 +44,7 @@ style='background-position: 0% 0%; mso-highlight:yellow; background-image:none;
 <li>\r
 <p align="left">Upper Layer Protocols: IPoIB, WSD, NetworkDirect, VNIC, SRP Initiator and uDAPL</li>\r
 </ul>\r
-<p align="left">OpenFabrics utilities:</p>\r
+<p align="left">OpenFabrics Tools:</p>\r
 <ul>\r
        <li>\r
        <p align="left">OpenSM: InfiniBand Subnet Manager</li>\r
@@ -2422,7 +2422,7 @@ vstat - HCA Stats and Counters</h3>
 <h4 align="left"><a href="#TOP"><font color="#000000">&lt;return-to-top&gt;</font></a></h4>\r
 <p align="left">&nbsp;</p>\r
 <BLOCKQUOTE></BLOCKQUOTE>\r
-<h2 align="left"><a name="opensm"></a>Subnet Management with OpenSM Rev: openib-1.2.0</h2>\r
+<h2 align="left"><a name="opensm"></a>Subnet Management with OpenSM version 3.3.3</h2>\r
 <hr>\r
 <p align="left">A single running process (opensm.exe) is required to configure \r
 and thus make an Infiniband subnet useable.&nbsp; For most cases, InfiniBand \r
@@ -2434,7 +2434,7 @@ Windows (WinOF) node or a Linux (OFED) node.<br>
 Limit the number of OpenSM processes per IB fabric; one SM is sufficient \r
 although redundant SMs are supported. You do not need a Subnet Manager per \r
 node/system.</p>\r
-<h4>OpenIB Subnet Management as a Windows Service</h4>\r
+<h3>OpenIB Subnet Management as a Windows Service</h3>\r
 <p>InfiniBand subnet management (OpenSM), as a Windows service, is installed by default, although it is NOT \r
 started by default. There are two ways to enable the InfiniBand Subnet \r
 Management service.</p>\r
@@ -2449,375 +2449,1267 @@ Management service.</p>
        Once the installation has completed, check the running InfiniBand Subnet \r
        Management service status via the Windows service manager (see #1).<br>\r
 &nbsp;</li>\r
-       <li>Consult the OpenSM log file @ %SystemRoot%\Temp\osm.log to see what \r
-       OpenSM thinks is happening.</li>\r
+       <li>Consult the OpenSM log file @ %windir%\temp\osm.log to see what \r
+       OpenSM thinks is happening.<br>\r
+&nbsp;</li>\r
 </ol>\r
-<p>&nbsp;</p>\r
-<h4 align="left">Manual InfiniBand Subnet Management from a command window</h4>\r
-<p align="left">Usage: opensm.exe [options]</p>\r
-<p align="left">Options:</p>\r
-<blockquote>\r
-       <p align="left">-c<br>\r
-       --cache-options</p>\r
-       <blockquote>\r
-               <p align="left">Cache the given command line options into the file<br>\r
-               /var/cache/osm/opensm.opts for use next invocation<br>\r
-               The cache directory can be changed by the environment<br>\r
-               variable OSM_CACHE_DIR</p>\r
-       </blockquote>\r
-       <p align="left">-g[=]&lt;GUID in hex&gt;<br>\r
-       --guid[=]&lt;GUID in hex&gt;</p>\r
-       <blockquote>\r
-               <p align="left">This option specifies the local port GUID value with \r
-               which OpenSM should bind. OpenSM may be<br>\r
-               bound to 1 port at a time.&nbsp; If GUID given is 0, OpenSM displays a \r
-               list of possible port GUIDs and waits for user input. Without -g, OpenSM \r
-               trys to use the default port.</p>\r
-       </blockquote>\r
-       <p align="left">-l &lt;LMC&gt;<br>\r
-       --lmc &lt;LMC&gt;</p>\r
-       <blockquote>\r
-               <p align="left">This option specifies the subnet's LMC value.<br>\r
-               The number of LIDs assigned to each port is 2^LMC.<br>\r
-               The LMC value must be in the range 0-7.<br>\r
-               LMC values &gt; 0 allow multiple paths between ports.<br>\r
-               LMC values &gt; 0 should only be used if the subnet<br>\r
-               topology actually provides multiple paths between<br>\r
-               ports, i.e. multiple interconnects between switches.<br>\r
-               Without -l, OpenSM defaults to LMC = 0, which allows<br>\r
-               one path between any two ports.</p>\r
-       </blockquote>\r
-       <p align="left">-p &lt;PRIORITY&gt;<br>\r
-       --priority &lt;PRIORITY&gt;</p>\r
-       <blockquote>\r
-               <p align="left">This option specifies the SM's PRIORITY.<br>\r
-               This will effect the handover cases, where master<br>\r
-               is chosen by priority and GUID.<br>\r
-               -smkey &lt;SM_Key&gt;<br>\r
-               This option specifies the SM's SM_Key (64 bits).<br>\r
-               This will effect SM authentication.</p>\r
-       </blockquote>\r
-       <p align="left">-r<br>\r
-       --reassign_lids</p>\r
-       <blockquote>\r
-               <p align="left"><br>\r
-               This option causes OpenSM to reassign LIDs to all end nodes. Specifying \r
-               -r on a running subnet<br>\r
-               may disrupt subnet traffic.&nbsp; Without -r, OpenSM attempts to \r
-               preserve existing LID assignments resolving multiple use of same LID.</p>\r
-       </blockquote>\r
-       <p align="left">-u<br>\r
-       --updn</p>\r
-       <blockquote>\r
-               <p align="left">This option activate UPDN algorithm instead of Min Hop \r
-               algorithm (default).</p>\r
-       </blockquote>\r
-       <p align="left">-a<br>\r
-       --add_guid_file &lt;path to file&gt;</p>\r
-       <blockquote>\r
-               <p align="left">Set the root nodes for the Up/Down routing algorithm to \r
-               the guids provided in the given file (one per line)</p>\r
-       </blockquote>\r
-       <p align="left">-o<br>\r
-       --once</p>\r
-       <blockquote>\r
-               <p align="left">This option causes OpenSM to configure the subnet once, \r
-               then exit. Ports remain in the ACTIVE state.</p>\r
-       </blockquote>\r
-       <p align="left">-s &lt;interval&gt;<br>\r
-       --sweep &lt;interval&gt;</p>\r
-       <blockquote>\r
-               <p align="left">This option specifies the number of seconds between \r
-               subnet sweeps. Specifying -s 0 disables sweeping.<br>\r
-               Without -s, OpenSM defaults to a sweep interval of 10 seconds.</p>\r
-       </blockquote>\r
-       <p align="left">-t &lt;milliseconds&gt;<br>\r
-       --timeout &lt;milliseconds&gt;</p>\r
-       <blockquote>\r
-               <p align="left">This option specifies the time in milliseconds<br>\r
-               used for transaction timeouts.<br>\r
-               Specifying -t 0 disables timeouts.<br>\r
-               Without -t, OpenSM defaults to a timeout value of<br>\r
-               200 milliseconds.</p>\r
-       </blockquote>\r
-       <p align="left">-maxsmps &lt;number&gt;</p>\r
-       <blockquote>\r
-               <p align="left">This option specifies the number of VL15 SMP MADs \r
-               allowed on the wire at any one time.<br>\r
-               Specifying -maxsmps 0 allows unlimited outstanding SMPs.<br>\r
-               Without -maxsmps, OpenSM defaults to a maximum of one outstanding SMP.</p>\r
-       </blockquote>\r
-       <p align="left">-i &lt;equalize-ignore-guids-file&gt;<br>\r
-       -ignore-guids &lt;equalize-ignore-guids-file&gt;</p>\r
-       <blockquote>\r
-               <p align="left">This option provides the means to define a set of ports\r
-               (by guids) that will be ignored by the link load&nbsp;\r
-               equalization algorithm.</p>\r
-       </blockquote>\r
-       <p align="left">-x<br>\r
-       --honor_guid2lid</p>\r
-       <blockquote>\r
-               <p align="left">This option forces OpenSM to honor the guid2lid file,\r
-               when it comes out of Standby state, if such file exists\r
-               under OSM_CACHE_DIR, and is valid.\r
-               By default this is FALSE.</p>\r
-       </blockquote>\r
-       <p align="left">-f<br>\r
-       --log_file</p>\r
-       <blockquote>\r
-               <p align="left">This option names the OpenSM log file. By \r
-               default the log goes to %SystemRoot%\Temp\osm.log when started as<br>\r
-               a Windows service. When OpenSM.exe is run from a command prompt, the \r
-               default log file is created as '%TEMP%\osm.log'.<br>\r
-               For the log to go to standard output use -f stdout.</p>\r
-       </blockquote>\r
-       <p align="left">-e<br>\r
-       --erase_log_file</p>\r
-       <blockquote>\r
-               <p align="left">This option will cause deletion of the log file&nbsp; \r
-               (if it previously exists). By default, the log file is accumulative.</p>\r
-       </blockquote>\r
-       <p align="left">-y<br>\r
-       --stay_on_fatal</p>\r
-       <blockquote>\r
-               <p align="left">This option will cause SM not to exit on fatal \r
-               initialization\r
-               issues: if SM discovers duplicated guids or 12x link with\r
-               lane reversal badly configured.\r
-               By default, the SM will exit on these errors.</p>\r
-       </blockquote>\r
-       <p align="left">-v<br>\r
-       --verbose</p>\r
-       <blockquote>\r
-               <p align="left">This option increases the log verbosity level.\r
-               The -v option may be specified multiple times\r
-               to further increase the verbosity level.&nbsp;\r
-               See the -vf option for more information about.\r
-               log verbosity.</p>\r
-       </blockquote>\r
-       <p align="left">-V</p>\r
-       <blockquote>\r
-               <p align="left">This option sets the maximum verbosity level and\r
-               forces log flushing.<br>\r
-               The -V is equivalent to '-vf 0xFF -d 2'.\r
-               See the -vf option for more information about\r
-               log verbosity.</p>\r
-       </blockquote>\r
-       <p align="left">-D &lt;flags&gt;</p>\r
-       <blockquote>\r
-               <p align="left">This option sets the log verbosity level.&nbsp; A flags \r
-               field must follow the -D option.<br>\r
-               A bit set/clear in the flags enables/disables a specific log level as \r
-               follows:<br>\r
-               BIT LOG LEVEL ENABLED<br>\r
-               ---- -----------------<br>\r
-               0x01 - ERROR (error messages)<br>\r
-               0x02 - INFO (basic messages, low volume)<br>\r
-               0x04 - VERBOSE (interesting stuff, moderate volume)<br>\r
-               0x08 - DEBUG (diagnostic, high volume)<br>\r
-               0x10 - FUNCS (function entry/exit, very high volume)<br>\r
-               0x20 - FRAMES (dumps all SMP and GMP frames)<br>\r
-               0x40 - ROUTING (dump FDB routing information)<br>\r
-               0x80 - currently unused.<br>\r
-               Without -D, OpenSM defaults to ERROR + INFO (0x3).<br>\r
-               Specifying -D 0 disables all messages.<br>\r
-               Specifying -D 0xFF enables all messages (see -V).<br>\r
-               High verbosity levels may require increasing the transaction timeout \r
-               with the -t option.</p>\r
-       </blockquote>\r
-       <p align="left">-d &lt;number&gt;<br>\r
-       --debug &lt;number&gt;</p>\r
-       <blockquote>\r
-               <p align="left">This option specifies a debug option. These options are \r
-               not normally needed. The number following -d selects the debug option to \r
-               enable as follows:<br>\r
-               OPT Description<br>\r
-               --- -----------------<br>\r
-               -d0 - Ignore other SM nodes<br>\r
-               -d1 - Force single threaded dispatching<br>\r
-               -d2 - Force log flushing after each log message<br>\r
-               -d3 - Disable multicast support<br>\r
-               -d4 - Put OpenSM in memory tracking mode<br>\r
-               -d10 - Put OpenSM in testability mode<br>\r
-               Without -d, no debug options are enabled</p>\r
-       </blockquote>\r
-       <p align="left">-h<br>\r
-       --help</p>\r
-       <blockquote>\r
-               <p align="left">Display this usage info then exit.</p>\r
-       </blockquote>\r
-       <p align="left">-?</p>\r
-       <blockquote>\r
-               <p align="left">Display this usage info then exit.</p>\r
-       </blockquote>\r
-</blockquote>\r
+<h3 align="left">InfiniBand Subnet Management from a command window</h3>
+<h3>SYNOPSIS</h3>
+
+<B>opensm</B>
+
+[--version]]
+[-F | --config &lt;file_name&gt;]
+[-c(reate-config) &lt;file_name&gt;]
+[-g(uid) &lt;GUID in hex&gt;]
+[-l(mc) &lt;LMC&gt;]
+[-p(riority) &lt;PRIORITY&gt;]
+[-smkey &lt;SM_Key&gt;]
+[--sm_sl &lt;SL number&gt;]
+[-r(eassign_lids)]
+[-R &lt;engine name(s)&gt; | --routing_engine &lt;engine name(s)&gt;]
+[--do_mesh_analysis]
+[--lash_start_vl &lt;vl number&gt;]
+[-A | --ucast_cache]
+[-z | --connect_roots]
+[-M &lt;file name&gt; | --lid_matrix_file &lt;file name&gt;]
+[-U &lt;file name&gt; | --lfts_file &lt;file name&gt;]
+[-S | --sadb_file &lt;file name&gt;]
+[-a | --root_guid_file &lt;path to file&gt;]
+[-u | --cn_guid_file &lt;path to file&gt;]
+[-G | --io_guid_file &lt;path to file&gt;]
+[-H | --max_reverse_hops &lt;max reverse hops allowed&gt;]
+[-X | --guid_routing_order_file &lt;path to file&gt;]
+[-m | --ids_guid_file &lt;path to file&gt;]
+[-o(nce)]
+[-s(weep) &lt;interval&gt;]
+[-t(imeout) &lt;milliseconds&gt;]
+[--retries &lt;number&gt;]
+[-maxsmps &lt;number&gt;]
+[-console [off | local | socket | loopback]]
+[-console-port &lt;port&gt;]
+[-i(gnore-guids) &lt;equalize-ignore-guids-file&gt;]
+[-w | --hop_weights_file &lt;path to file&gt;]
+[-f &lt;log file path&gt; | --log_file &lt;log file path&gt; ]
+[-L | --log_limit &lt;size in MB&gt;] [-e(rase_log_file)]
+[-P(config) &lt;partition config file&gt; ]
+[-N | --no_part_enforce]
+[-Q | --qos [-Y | --qos_policy_file &lt;file name&gt;]]
+[-y | --stay_on_fatal]
+[-B | --service --daemon]
+[-I | --inactive]
+[--perfmgr]
+[--perfmgr_sweep_time_s &lt;seconds&gt;]
+[--prefix_routes_file &lt;path&gt;]
+[--consolidate_ipv6_snm_req]
+[-v(erbose)] [-V] [-D &lt;flags&gt;] [-d(ebug) &lt;number&gt;]
+[-h(elp)] [-?]
+<h3>DESCRIPTION</h3>
+
+<P>
+
+opensm is an InfiniBand compliant Subnet Manager and Administration,
+and runs on top of WinOF.
+
+opensm provides an implementation of an InfiniBand Subnet Manager and
+Administration. Such a software entity is required to run for in order
+to initialize the InfiniBand hardware (at least one per each
+InfiniBand subnet).
+
+opensm also now contains an experimental version of a performance
+manager as well.
+
+opensm defaults were designed to meet the common case usage on clusters with up to a few hundred nodes. Thus, in this default mode, opensm will scan the IB
+fabric, initialize it, and sweep occasionally for changes.
+
+opensm attaches to a specific IB port on the local machine and configures only
+the fabric connected to it. (If the local machine has other IB ports,
+opensm will ignore the fabrics connected to those other ports). If no port is
+specified, it will select the first &quot;best&quot; available port.
+
+opensm can present the available ports and prompt for a port number to attach \r
+to. By default, the run is logged to two files:%windir%\temp\osm.syslog and \r
+%windir%\temp\osm.log.
+The first file will register only general major events, whereas the second
+will include details of reported errors. All errors reported in this second
+file should be treated as indicators of IB fabric health issues.
+(Note that when a fatal and non-recoverable error occurs, opensm will exit.)
+Both log files should include the message &quot;SUBNET UP&quot; if opensm was able to
+setup the subnet correctly.<h3>OPTIONS</h3>
+
+
+<P>
+
+<DL COMPACT>
+<DT><B>--version</B><DD>
+Prints OpenSM version and exits.
+<DT><B>-F</B>, <B>--config</B> &lt;config file&gt;<DD>
+The name of the OpenSM config file. When not specified
+<b>%ProgramFiles%\WinOF\OpenSM\opensm.conf</b> will be used (if exists).
+<DT><B>-c</B>, <B>--create-config</B> &lt;file name&gt;<DD>
+OpenSM will dump its configuration to the specified file and exit.
+This is a way to generate OpenSM configuration file template.
+<DT><B>-g</B>, <B>--guid</B> &lt;GUID in hex&gt;<DD>
+This option specifies the local port GUID value
+with which OpenSM should bind.  OpenSM may be
+bound to 1 port at a time.
+If GUID given is 0, OpenSM displays a list
+of possible port GUIDs and waits for user input.
+Without -g, OpenSM tries to use the default port.
+<DT><B>-l</B>, <B>--lmc</B> &lt;LMC value&gt;<DD>
+This option specifies the subnet's LMC value.
+The number of LIDs assigned to each port is 2^LMC.
+The LMC value must be in the range 0-7.
+LMC values &gt; 0 allow multiple paths between ports.
+LMC values &gt; 0 should only be used if the subnet
+topology actually provides multiple paths between
+ports, i.e. multiple interconnects between switches.
+Without -l, OpenSM defaults to LMC = 0, which allows
+one path between any two ports.
+<DT><B>-p</B>, <B>--priority</B> &lt;Priority value&gt;<DD>
+This option specifies the SM's PRIORITY.
+This will effect the handover cases, where master
+is chosen by priority and GUID.  Range goes from 0
+(default and lowest priority) to 15 (highest).
+<DT><B>-smkey</B> &lt;SM_Key value&gt;<DD>
+This option specifies the SM's SM_Key (64 bits).
+This will effect SM authentication.
+Note that OpenSM version 3.2.1 and below used the default value '1'
+in a host byte order, it is fixed now but you may need this option to
+interoperate with old OpenSM running on a little endian machine.
+<DT><B>--sm_sl</B> &lt;SL number&gt;<DD>
+This option sets the SL to use for communication with the SM/SA.
+Defaults to 0.
+<DT><B>-r</B>, <B>--reassign_lids</B><DD>
+This option causes OpenSM to reassign LIDs to all
+end nodes. Specifying -r on a running subnet
+may disrupt subnet traffic.
+Without -r, OpenSM attempts to preserve existing
+LID assignments resolving multiple use of same LID.
+<DT><B>-R</B>, <B>--routing_engine</B> &lt;Routing engine names&gt;<DD>
+This option chooses routing engine(s) to use instead of Min Hop
+algorithm (default).  Multiple routing engines can be specified
+separated by commas so that specific ordering of routing algorithms
+will be tried if earlier routing engines fail.
+Supported engines: minhop, updn, file, ftree, lash, dor
+<DT><B>--do_mesh_analysis</B><DD>
+This option enables additional analysis for the lash routing engine to
+precondition switch port assignments in regular cartesian meshes which
+may reduce the number of SLs required to give a deadlock free routing.
+<DT><B>--lash_start_vl</B> &lt;vl number&gt;<DD>
+This option sets the starting VL to use for the lash routing algorithm.
+Defaults to 0.
+<DT><B>-A</B>, <B>--ucast_cache</B><DD>
+This option enables unicast routing cache and prevents routing
+recalculation (which is a heavy task in a large cluster) when
+there was no topology change detected during the heavy sweep, or
+when the topology change does not require new routing calculation,
+e.g. when one or more CAs/RTRs/leaf switches going down, or one or
+more of these nodes coming back after being down.
+A very common case that is handled by the unicast routing cache
+is host reboot, which otherwise would cause two full routing
+recalculations: one when the host goes down, and the other when
+the host comes back online.
+<DT><B>-z</B>, <B>--connect_roots</B><DD>
+This option enforces a routing engine (currently up/down
+only) to make connectivity between root switches and in
+this way to be fully IBA complaint. In many cases this can
+violate &quot;pure&quot; deadlock free algorithm, so use it carefully.
+<DT><B>-M</B>, <B>--lid_matrix_file</B> &lt;file name&gt;<DD>
+This option specifies the name of the lid matrix dump file
+from where switch lid matrices (min hops tables will be
+loaded.
+<DT><B>-U</B>, <B>--lfts_file</B> &lt;file name&gt;<DD>
+This option specifies the name of the LFTs file
+from where switch forwarding tables will be loaded.
+<DT><B>-S</B>, <B>--sadb_file</B> &lt;file name&gt;<DD>
+This option specifies the name of the SA DB dump file
+from where SA database will be loaded.
+<DT><B>-a</B>, <B>--root_guid_file</B> &lt;file name&gt;<DD>
+Set the root nodes for the Up/Down or Fat-Tree routing
+algorithm to the guids provided in the given file (one to a line).
+<DT><B>-u</B>, <B>--cn_guid_file</B> &lt;file name&gt;<DD>
+Set the compute nodes for the Fat-Tree routing algorithm
+to the guids provided in the given file (one to a line).
+<DT><B>-G</B>, <B>--io_guid_file</B> &lt;file name&gt;<DD>
+Set the I/O nodes for the Fat-Tree routing algorithm
+to the guids provided in the given file (one to a line).
+I/O nodes are non-CN nodes allowed to use up to max_reverse_hops switches
+the wrong way around to improve connectivity.
+<DT><B>-H</B>, <B>--max_reverse_hops</B> &lt;file name&gt;<DD>
+Set the maximum number of reverse hops an I/O node is allowed
+to make. A reverse hop is the use of a switch the wrong way around.
+<DT><B>-m</B>, <B>--ids_guid_file</B> &lt;file name&gt;<DD>
+Name of the map file with set of the IDs which will be used
+by Up/Down routing algorithm instead of node GUIDs
+(format: &lt;guid&gt; &lt;id&gt; per line).
+<DT><B>-X</B>, <B>--guid_routing_order_file</B> &lt;file name&gt;<DD>
+Set the order port guids will be routed for the MinHop
+and Up/Down routing algorithms to the guids provided in the
+given file (one to a line).
+<DT><B>-o</B>, <B>--once</B><DD>
+This option causes OpenSM to configure the subnet
+once, then exit.  Ports remain in the ACTIVE state.
+<DT><B>-s</B>, <B>--sweep</B> &lt;interval value&gt;<DD>
+This option specifies the number of seconds between
+subnet sweeps.  Specifying -s 0 disables sweeping.
+Without -s, OpenSM defaults to a sweep interval of
+10 seconds.
+<DT><B>-t</B>, <B>--timeout</B> &lt;value&gt;<DD>
+This option specifies the time in milliseconds
+used for transaction timeouts.
+Specifying -t 0 disables timeouts.
+Without -t, OpenSM defaults to a timeout value of
+200 milliseconds.
+<DT><B>--retries</B> &lt;number&gt;<DD>
+This option specifies the number of retries used
+for transactions.
+Without --retries, OpenSM defaults to 3 retries
+for transactions.
+<DT><B>-maxsmps</B> &lt;number&gt;<DD>
+This option specifies the number of VL15 SMP MADs
+allowed on the wire at any one time.
+Specifying -maxsmps 0 allows unlimited outstanding
+SMPs.
+Without -maxsmps, OpenSM defaults to a maximum of
+4 outstanding SMPs.
+<DT><B>-console [off | local | socket | loopback]</B><DD>
+This option brings up the OpenSM console (default off).
+Note that the socket and loopback options will only be available
+if OpenSM was built with --enable-console-socket.
+<DT><B>-console-port</B> &lt;port&gt;<DD>
+Specify an alternate telnet port for the socket console (default 10000).
+Note that this option only appears if OpenSM was built with
+--enable-console-socket.
+<DT><B>-i</B>, <B>-ignore-guids</B> &lt;equalize-ignore-guids-file&gt;<DD>
+This option provides the means to define a set of ports
+(by node guid and port number) that will be ignored by the link load
+equalization algorithm.
+<DT><B>-w</B>, <B>--hop_weights_file</B> &lt;path to file&gt;<DD>
+This option provides weighting factors per port representing a hop cost in
+computing the lid matrix.  The file consists of lines containing a switch port
+GUID (specified as a 64 bit hex number, with leading 0x), output port number,
+and weighting factor.  Any port not listed in the file defaults to a weighting
+factor of 1.  Lines starting with # are comments.  Weights affect only the
+output route from the port, so many useful configurations will require weights
+to be specified in pairs.
+<DT><B>-x</B>, <B>--honor_guid2lid</B><DD>
+This option forces OpenSM to honor the guid2lid file,
+when it comes out of Standby state, if such file exists
+under OSM_CACHE_DIR, and is valid.
+By default, this is FALSE.
+<DT><B>-f</B>, <B>--log_file</B> &lt;file name&gt;<DD>
+This option defines the log to be the given file. By default, the log goes to <b>\r
+%windir%\temp\</b>osm.log.
+For the log to go to standard output use -f stdout.
+<DT><B>-L</B>, <B>--log_limit</B> &lt;size in MB&gt;<DD>
+This option defines maximal log file size in MB. When
+specified the log file will be truncated upon reaching
+this limit.
+<DT><B>-e</B>, <B>--erase_log_file</B><DD>
+This option will cause deletion of the log file
+(if it previously exists). By default, the log file
+is accumulative.
+<DT><B>-P</B>, <B>--Pconfig</B> &lt;partition config file&gt;<DD>
+This option defines the optional partition configuration file.
+The default name is <b>%ProgramFiles%\WinOF\OpenSM\partitions.conf</b>.
+<DT><B>--prefix_routes_file</B> &lt;file name&gt;<DD>
+Prefix routes control how the SA responds to path record queries for
+off-subnet DGIDs.  By default, the SA fails such queries. The
+<B>PREFIX ROUTES</B>
+
+section below describes the format of the configuration file.
+The default path is <b>%ProgramFiles%\WinOF\OpenSM\prefix-routes.conf</b>.
+<DT><B>-Q</B>, <B>--qos</B><DD>
+This option enables QoS setup. It is disabled by default.
+<DT><B>-Y</B>, <B>--qos_policy_file</B> &lt;file name&gt;<DD>
+This option defines the optional QoS policy file. The default
+name is <b>%ProgramFiles%\WinOF\OpenSM\qos-policy.conf</b>. See
+QoS_management_in_OpenSM.txt in opensm doc for more information on
+configuring QoS policy via this file.
+<DT><B>-N</B>, <B>--no_part_enforce</B><DD>
+This option disables partition enforcement on switch external ports.
+<DT><B>-y</B>, <B>--stay_on_fatal</B><DD>
+This option will cause SM not to exit on fatal initialization
+issues: if SM discovers duplicated guids or a 12x link with
+lane reversal badly configured.
+By default, the SM will exit on these errors.
+<DT><B>-B</B>, <B>--service</B><DD>
+OpenSM will run in the background (without a console window) as a Windows system \r
+service (the preferred Windows mode).
+<DT><B>-I</B>, <B>--inactive</B><DD>
+Start SM in inactive rather than init SM state.  This
+option can be used in conjunction with the perfmgr so as to
+run a standalone performance manager without SM/SA.  However,
+this is NOT currently implemented in the performance manager.
+<DT><B>-perfmgr</B><DD>
+Enable the perfmgr.  Only takes effect if --enable-perfmgr was specified at
+configure time.  See performance-manager-HOWTO.txt in opensm doc for
+more information on running perfmgr.
+<DT><B>-perfmgr_sweep_time_s</B> &lt;seconds&gt;<DD>
+Specify the sweep time for the performance manager in seconds
+(default is 180 seconds).  Only takes
+effect if --enable-perfmgr was specified at configure time.
+<DT><B>--consolidate_ipv6_snm_req</B>
+
+<DD>
+Consolidate IPv6 Solicited Node Multicast group join requests into one
+multicast group per MGID PKey.
+<DT><B>-v</B>, <B>--verbose</B><DD>
+This option increases the log verbosity level.
+The -v option may be specified multiple times
+to further increase the verbosity level.
+See the -D option for more information about
+log verbosity.
+<DT><B>-V</B><DD>
+This option sets the maximum verbosity level and
+forces log flushing.
+The -V option is equivalent to '-D 0xFF -d 2'.
+See the -D option for more information about
+log verbosity.
+<DT><B>-D</B> &lt;value&gt;<DD>
+This option sets the log verbosity level.
+A flags field must follow the -D option.
+A bit set/clear in the flags enables/disables a
+specific log level as follows:
+
+<BR>&nbsp;BIT&nbsp;&nbsp;&nbsp;&nbsp;LOG&nbsp;LEVEL&nbsp;ENABLED
+<BR>&nbsp;----&nbsp;&nbsp;&nbsp;-----------------
+<BR>&nbsp;0x01&nbsp;-&nbsp;ERROR&nbsp;(error&nbsp;messages)
+<BR>&nbsp;0x02&nbsp;-&nbsp;INFO&nbsp;(basic&nbsp;messages,&nbsp;low&nbsp;volume)
+<BR>&nbsp;0x04&nbsp;-&nbsp;VERBOSE&nbsp;(interesting&nbsp;stuff,&nbsp;moderate&nbsp;volume)
+<BR>&nbsp;0x08&nbsp;-&nbsp;DEBUG&nbsp;(diagnostic,&nbsp;high&nbsp;volume)
+<BR>&nbsp;0x10&nbsp;-&nbsp;FUNCS&nbsp;(function&nbsp;entry/exit,&nbsp;very&nbsp;high&nbsp;volume)
+<BR>&nbsp;0x20&nbsp;-&nbsp;FRAMES&nbsp;(dumps&nbsp;all&nbsp;SMP&nbsp;and&nbsp;GMP&nbsp;frames)
+<BR>&nbsp;0x40&nbsp;-&nbsp;ROUTING&nbsp;(dump&nbsp;FDB&nbsp;routing&nbsp;information)
+<BR>&nbsp;0x80&nbsp;-&nbsp;currently&nbsp;unused.
+
+Without -D, OpenSM defaults to ERROR + INFO (0x3).
+Specifying -D 0 disables all messages.
+Specifying -D 0xFF enables all messages (see -V).
+High verbosity levels may require increasing
+the transaction timeout with the -t option.
+<DT><B>-d</B>, <B>--debug</B> &lt;value&gt;<DD>
+This option specifies a debug option.
+These options are not normally needed.
+The number following -d selects the debug
+option to enable as follows:
+
+<BR>&nbsp;OPT&nbsp;&nbsp;&nbsp;Description
+<BR>&nbsp;---&nbsp;&nbsp;&nbsp;&nbsp;-----------------
+<BR>&nbsp;-d0&nbsp;&nbsp;-&nbsp;Ignore&nbsp;other&nbsp;SM&nbsp;nodes
+<BR>&nbsp;-d1&nbsp;&nbsp;-&nbsp;Force&nbsp;single&nbsp;threaded&nbsp;dispatching
+<BR>&nbsp;-d2&nbsp;&nbsp;-&nbsp;Force&nbsp;log&nbsp;flushing&nbsp;after&nbsp;each&nbsp;log&nbsp;message
+<BR>&nbsp;-d3&nbsp;&nbsp;-&nbsp;Disable&nbsp;multicast&nbsp;support
+<DT><B>-h</B>, <B>--help</B><DD>
+Display this usage info then exit.
+<DT><B>-?</B><DD>
+Display this usage info then exit.
+
+<br>\r
+&nbsp;</DL>
+<h3>ENVIRONMENT VARIABLES</h3>
+
+<P>
+
+The following environment variables control opensm behavior:<ul>\r
+       <li>OSM_TMP_DIR - controls the directory in which the temporary files generated by
+opensm are created.<br>\r
+       These files are: opensm-subnet.lst, opensm.fdbs, and
+opensm.mcfdbs. By default, this directory is %ProgramFiles%\WinOF\OpenSM\.</li>\r
+       <li>OSM_CACHE_DIR - opensm stores certain data to the disk such that \r
+       subsequent runs are consistent. The default directory used is %ProgramFiles%\WinOF\OpenSM\.
+The following file is included in it: <BR>&nbsp;guid2lid&nbsp;-&nbsp;stores&nbsp;the&nbsp;LID&nbsp;range&nbsp;assigned&nbsp;to&nbsp;each&nbsp;GUID<br>\r
+&nbsp;</li>\r
+       </ul>\r
+<h3>NOTES</h3>
+
+<P>
+
+When opensm running as a windows service, if the opensm process receives a service control code of \r
+129, it starts a new heavy sweep as if a trap was received or a topology change was found.<P>
+
+Also, service control code 128 can be used to trigger a reopen of %windir%\temp\osm.log for
+logrotate purposes.<br>\r
+&nbsp;<P>
+
+Examples:<P>
+
+&nbsp;&nbsp;&nbsp; sc.exe control OpenSM 128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \r
+# will clear the contends of %windir%\temp\osm.log<br>\r
+&nbsp;&nbsp;&nbsp; sc.exe control OpenSM 129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \r
+# start a new heavy sweep<P>
+
+&nbsp;<h3>PARTITION CONFIGURATION</h3>
+
+<P>
+
+The default name of OpenSM partitions configuration file is
+<B>%ProgramFiles\WinOF\OpenSM\partitions.conf</B>. The default may be changed
+by using the --Pconfig (-P) option with OpenSM.
+
+The default partition will be created by OpenSM unconditionally even
+when partition configuration file does not exist or cannot be accessed.
+
+The default partition has P_Key value 0x7fff. OpenSM's port will always
+have full membership in default partition. All other end ports will have
+full membership if the partition configuration file is not found or cannot
+be accessed, or limited membership if the file exists and can be accessed
+but there is no rule for the Default partition.
+
+Effectively, this amounts to the same as if one of the following rules
+below appear in the partition configuration file.
+
+In the case of no rule for the Default partition:
+
+Default=0x7fff : ALL=limited, SELF=full ;
+
+In the case of no partition configuration file or file cannot be accessed:
+
+Default=0x7fff : ALL=full ;
+
+
+File Format
+
+Comments:
+
+Line content followed after '#' character is comment and ignored by
+parser.
+
+General file format:
+
+&lt;Partition Definition&gt;:&lt;PortGUIDs list&gt; ;
+
+Partition Definition:
+
+[PartitionName][=PKey][,flag[=value]][,defmember=full|limited]
+
+<BR>&nbsp;PartitionName&nbsp;-&nbsp;string,&nbsp;will&nbsp;be&nbsp;used&nbsp;with&nbsp;logging.&nbsp;When&nbsp;omitted
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;empty&nbsp;string&nbsp;will&nbsp;be&nbsp;used.
+<BR>&nbsp;PKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;P_Key&nbsp;value&nbsp;for&nbsp;this&nbsp;partition.&nbsp;Only&nbsp;low&nbsp;15&nbsp;bits&nbsp;will
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;used.&nbsp;When&nbsp;omitted&nbsp;will&nbsp;be&nbsp;autogenerated.
+<BR>&nbsp;flag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;used&nbsp;to&nbsp;indicate&nbsp;IPoIB&nbsp;capability&nbsp;of&nbsp;this&nbsp;partition.
+<BR>&nbsp;defmember=full|limited&nbsp;-&nbsp;specifies&nbsp;default&nbsp;membership&nbsp;for&nbsp;port&nbsp;guid
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.&nbsp;Default&nbsp;is&nbsp;limited.
+
+Currently recognized flags are:
+
+<BR>&nbsp;ipoib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;indicates&nbsp;that&nbsp;this&nbsp;partition&nbsp;may&nbsp;be&nbsp;used&nbsp;for&nbsp;IPoIB,&nbsp;as
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;IPoIB&nbsp;capable&nbsp;MC&nbsp;group&nbsp;will&nbsp;be&nbsp;created.
+<BR>&nbsp;rate=&lt;val&gt;&nbsp;&nbsp;-&nbsp;specifies&nbsp;rate&nbsp;for&nbsp;this&nbsp;IPoIB&nbsp;MC&nbsp;group
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(default&nbsp;is&nbsp;3&nbsp;(10GBps))
+<BR>&nbsp;mtu=&lt;val&gt;&nbsp;&nbsp;&nbsp;-&nbsp;specifies&nbsp;MTU&nbsp;for&nbsp;this&nbsp;IPoIB&nbsp;MC&nbsp;group
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(default&nbsp;is&nbsp;4&nbsp;(2048))
+<BR>&nbsp;sl=&lt;val&gt;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;specifies&nbsp;SL&nbsp;for&nbsp;this&nbsp;IPoIB&nbsp;MC&nbsp;group
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(default&nbsp;is&nbsp;0)
+<BR>&nbsp;scope=&lt;val&gt;&nbsp;-&nbsp;specifies&nbsp;scope&nbsp;for&nbsp;this&nbsp;IPoIB&nbsp;MC&nbsp;group
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(default&nbsp;is&nbsp;2&nbsp;(link&nbsp;local)).&nbsp;&nbsp;Multiple&nbsp;scope&nbsp;settings
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;permitted&nbsp;for&nbsp;a&nbsp;partition.
+
+Note that values for rate, mtu, and scope should be specified as
+defined in the IBTA specification (for example, mtu=4 for 2048).
+
+PortGUIDs list:
+
+<BR>&nbsp;PortGUID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;GUID&nbsp;of&nbsp;partition&nbsp;member&nbsp;EndPort.&nbsp;Hexadecimal
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numbers&nbsp;should&nbsp;start&nbsp;from&nbsp;0x,&nbsp;decimal&nbsp;numbers
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;accepted&nbsp;too.
+<BR>&nbsp;full&nbsp;or&nbsp;limited&nbsp;&nbsp;-&nbsp;indicates&nbsp;full&nbsp;or&nbsp;limited&nbsp;membership&nbsp;for&nbsp;this
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port.&nbsp;&nbsp;When&nbsp;omitted&nbsp;(or&nbsp;unrecognized)&nbsp;limited
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;membership&nbsp;is&nbsp;assumed.
+
+There are two useful keywords for PortGUID definition:
+
+<BR>&nbsp;-&nbsp;'ALL'&nbsp;means&nbsp;all&nbsp;end&nbsp;ports&nbsp;in&nbsp;this&nbsp;subnet.
+<BR>&nbsp;-&nbsp;'ALL_CAS'&nbsp;means&nbsp;all&nbsp;Channel&nbsp;Adapter&nbsp;end&nbsp;ports&nbsp;in&nbsp;this&nbsp;subnet.
+<BR>&nbsp;-&nbsp;'ALL_SWITCHES'&nbsp;means&nbsp;all&nbsp;Switch&nbsp;end&nbsp;ports&nbsp;in&nbsp;this&nbsp;subnet.
+<BR>&nbsp;-&nbsp;'ALL_ROUTERS'&nbsp;means&nbsp;all&nbsp;Router&nbsp;end&nbsp;ports&nbsp;in&nbsp;this&nbsp;subnet.
+<BR>&nbsp;-&nbsp;'SELF'&nbsp;means&nbsp;subnet&nbsp;manager's&nbsp;port.
+
+Empty list means no ports in this partition.
+
+Notes:
+
+White space is permitted between delimiters ('=', ',',':',';').
+
+The line can be wrapped after ':' followed after Partition Definition and
+between.
+
+PartitionName does not need to be unique, PKey does need to be unique.
+If PKey is repeated then those partition configurations will be merged
+and first PartitionName will be used (see also next note).
+
+It is possible to split partition configuration in more than one
+definition, but then PKey should be explicitly specified (otherwise
+different PKey values will be generated for those definitions).
+
+Examples:
+
+<BR>&nbsp;Default=0x7fff&nbsp;:&nbsp;ALL,&nbsp;SELF=full&nbsp;;
+<BR>&nbsp;Default=0x7fff&nbsp;:&nbsp;ALL,&nbsp;ALL_SWITCHES=full,&nbsp;SELF=full&nbsp;;
+
+<BR>&nbsp;NewPartition&nbsp;,&nbsp;ipoib&nbsp;:&nbsp;0x123456=full,&nbsp;0x3456789034=limi,&nbsp;0x2134af2306&nbsp;;
+
+<BR>&nbsp;YetAnotherOne&nbsp;=&nbsp;0x300&nbsp;:&nbsp;SELF=full&nbsp;;
+<BR>&nbsp;YetAnotherOne&nbsp;=&nbsp;0x300&nbsp;:&nbsp;ALL=limited&nbsp;;
+
+<BR>&nbsp;ShareIO&nbsp;=&nbsp;0x80&nbsp;,&nbsp;defmember=full&nbsp;:&nbsp;0x123451,&nbsp;0x123452;
+<BR>&nbsp;#&nbsp;0x123453,&nbsp;0x123454&nbsp;will&nbsp;be&nbsp;limited
+<BR>&nbsp;ShareIO&nbsp;=&nbsp;0x80&nbsp;:&nbsp;0x123453,&nbsp;0x123454,&nbsp;0x123455=full;
+<BR>&nbsp;#&nbsp;0x123456,&nbsp;0x123457&nbsp;will&nbsp;be&nbsp;limited
+<BR>&nbsp;ShareIO&nbsp;=&nbsp;0x80&nbsp;:&nbsp;defmember=limited&nbsp;:&nbsp;0x123456,&nbsp;0x123457,&nbsp;0x123458=full;
+<BR>&nbsp;ShareIO&nbsp;=&nbsp;0x80&nbsp;,&nbsp;defmember=full&nbsp;:&nbsp;0x123459,&nbsp;0x12345a;
+<BR>&nbsp;ShareIO&nbsp;=&nbsp;0x80&nbsp;,&nbsp;defmember=full&nbsp;:&nbsp;0x12345b,&nbsp;0x12345c=limited,&nbsp;0x12345d;
+
+
+Note:
+
+The following rule is equivalent to how OpenSM used to run prior to the
+partition manager:
+
+<BR>&nbsp;Default=0x7fff,ipoib:ALL=full;
+
+<A NAME="lbAI">&nbsp;</A>
+<h3>QOS CONFIGURATION</h3>
+
+<P>
+
+There are a set of QoS related low-level configuration parameters.
+All these parameter names are prefixed by &quot;qos_&quot; string. Here is a full
+list of these parameters:
+
+<BR>&nbsp;qos_max_vls&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;The&nbsp;maximum&nbsp;number&nbsp;of&nbsp;VLs&nbsp;that&nbsp;will&nbsp;be&nbsp;on&nbsp;the&nbsp;subnet
+<BR>&nbsp;qos_high_limit&nbsp;-&nbsp;The&nbsp;limit&nbsp;of&nbsp;High&nbsp;Priority&nbsp;component&nbsp;of&nbsp;VL
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arbitration&nbsp;table&nbsp;(IBA&nbsp;7.6.9)
+<BR>&nbsp;qos_vlarb_low&nbsp;&nbsp;-&nbsp;Low&nbsp;priority&nbsp;VL&nbsp;Arbitration&nbsp;table&nbsp;(IBA&nbsp;7.6.9)
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template
+<BR>&nbsp;qos_vlarb_high&nbsp;-&nbsp;High&nbsp;priority&nbsp;VL&nbsp;Arbitration&nbsp;table&nbsp;(IBA&nbsp;7.6.9)
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Both&nbsp;VL&nbsp;arbitration&nbsp;templates&nbsp;are&nbsp;pairs&nbsp;of
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VL&nbsp;and&nbsp;weight
+<BR>&nbsp;qos_sl2vl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;SL2VL&nbsp;Mapping&nbsp;table&nbsp;(IBA&nbsp;7.6.6)&nbsp;template.&nbsp;It&nbsp;is
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;list&nbsp;of&nbsp;VLs&nbsp;corresponding&nbsp;to&nbsp;SLs&nbsp;0-15&nbsp;(Note
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;VL15&nbsp;used&nbsp;here&nbsp;means&nbsp;drop&nbsp;this&nbsp;SL)
+
+Typical default values (hard-coded in OpenSM initialization) are:
+
+<BR>&nbsp;qos_max_vls&nbsp;15
+<BR>&nbsp;qos_high_limit&nbsp;0
+<BR>&nbsp;qos_vlarb_low&nbsp;0:0,1:4,2:4,3:4,4:4,5:4,6:4,7:4,8:4,9:4,10:4,11:4,12:4,13:4,14:4
+<BR>&nbsp;qos_vlarb_high&nbsp;0:4,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0
+<BR>&nbsp;qos_sl2vl&nbsp;0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,7
+
+The syntax is compatible with rest of OpenSM configuration options and
+values may be stored in OpenSM config file (cached options file).
+
+In addition to the above, we may define separate QoS configuration
+parameters sets for various target types. As targets, we currently support
+CAs, routers, switch external ports, and switch's enhanced port 0. The
+names of such specialized parameters are prefixed by &quot;qos_&lt;type&gt;_&quot;
+string. Here is a full list of the currently supported sets:
+
+<BR>&nbsp;qos_ca_&nbsp;&nbsp;-&nbsp;QoS&nbsp;configuration&nbsp;parameters&nbsp;set&nbsp;for&nbsp;CAs.
+<BR>&nbsp;qos_rtr_&nbsp;-&nbsp;parameters&nbsp;set&nbsp;for&nbsp;routers.
+<BR>&nbsp;qos_sw0_&nbsp;-&nbsp;parameters&nbsp;set&nbsp;for&nbsp;switches'&nbsp;port&nbsp;0.
+<BR>&nbsp;qos_swe_&nbsp;-&nbsp;parameters&nbsp;set&nbsp;for&nbsp;switches'&nbsp;external&nbsp;ports.
+
+Examples:
+<BR>&nbsp;qos_sw0_max_vls=2
+<BR>&nbsp;qos_ca_sl2vl=0,1,2,3,5,5,5,12,12,0,
+<BR>&nbsp;qos_swe_high_limit=0
+
+<A NAME="lbAJ">&nbsp;</A>
+<h3>PREFIX ROUTES</h3>
+
+<P>
+
+Prefix routes control how the SA responds to path record queries for
+off-subnet DGIDs.  By default, the SA fails such queries.
+Note that IBA does not specify how the SA should obtain off-subnet path
+record information.
+The prefix routes configuration is meant as a stop-gap until the
+specification is completed.
+<P>
+
+Each line in the configuration file is a 64-bit prefix followed by a
+64-bit GUID, separated by white space.
+The GUID specifies the router port on the local subnet that will
+handle the prefix.
+Blank lines are ignored, as is anything between a <B>#</B> character
+and the end of the line.
+The prefix and GUID are both in hex, the leading 0x is optional.
+Either, or both, can be wild-carded by specifying an
+asterisk instead of an explicit prefix or GUID.
+<P>
+
+When responding to a path record query for an off-subnet DGID,
+opensm searches for the first prefix match in the configuration file.
+Therefore, the order of the lines in the configuration file is important:
+a wild-carded prefix at the beginning of the configuration file renders
+all subsequent lines useless.
+If there is no match, then opensm fails the query.
+It is legal to repeat prefixes in the configuration file,
+opensm will return the path to the first available matching router.
+A configuration file with a single line where both prefix and GUID
+are wild-carded means that a path record query specifying any
+off-subnet DGID should return a path to the first available router.
+This configuration yields the same behavior formerly achieved by
+compiling opensm with -DROUTER_EXP which has been obsoleted.
+
+<A NAME="lbAK">&nbsp;</A>
+<h3>ROUTING</h3>
+
+<P>
+
+OpenSM now offers five routing engines:
+
+1.  Min Hop Algorithm - based on the minimum hops to each node where the
+path length is optimized.
+
+2.  UPDN Unicast routing algorithm - also based on the minimum hops to each
+node, but it is constrained to ranking rules. This algorithm should be chosen
+if the subnet is not a pure Fat Tree, and deadlock may occur due to a
+loop in the subnet.
+
+3.  Fat Tree Unicast routing algorithm - this algorithm optimizes routing
+for congestion-free &quot;shift&quot; communication pattern.
+It should be chosen if a subnet is a symmetrical or almost symmetrical
+fat-tree of various types, not just K-ary-N-Trees: non-constant K, not
+fully staffed, any Constant Bisectional Bandwidth (CBB) ratio.
+Similar to UPDN, Fat Tree routing is constrained to ranking rules.
+
+4. LASH unicast routing algorithm - uses Infiniband virtual layers
+(SL) to provide deadlock-free shortest-path routing while also
+distributing the paths between layers. LASH is an alternative
+deadlock-free topology-agnostic routing algorithm to the non-minimal
+UPDN algorithm avoiding the use of a potentially congested root node.
+
+5. DOR Unicast routing algorithm - based on the Min Hop algorithm, but
+avoids port equalization except for redundant links between the same
+two switches.  This provides deadlock free routes for hypercubes when
+the fabric is cabled as a hypercube and for meshes when cabled as a
+mesh (see details below).
+
+OpenSM also supports a file method which
+can load routes from a table. See 'Modular Routing Engine' for more
+information on this.
+
+The basic routing algorithm is comprised of two stages:
+
+1. MinHop matrix calculation
+<BR>&nbsp;&nbsp;&nbsp;How&nbsp;many&nbsp;hops&nbsp;are&nbsp;required&nbsp;to&nbsp;get&nbsp;from&nbsp;each&nbsp;port&nbsp;to&nbsp;each&nbsp;LID&nbsp;?
+<BR>&nbsp;&nbsp;&nbsp;The&nbsp;algorithm&nbsp;to&nbsp;fill&nbsp;these&nbsp;tables&nbsp;is&nbsp;different&nbsp;if&nbsp;you&nbsp;run&nbsp;standard
+(min hop) or Up/Down.
+<BR>&nbsp;&nbsp;&nbsp;For&nbsp;standard&nbsp;routing,&nbsp;a&nbsp;&quot;relaxation&quot;&nbsp;algorithm&nbsp;is&nbsp;used&nbsp;to&nbsp;propagate
+min hop from every destination LID through neighbor switches
+<BR>&nbsp;&nbsp;&nbsp;For&nbsp;Up/Down&nbsp;routing,&nbsp;a&nbsp;BFS&nbsp;from&nbsp;every&nbsp;target&nbsp;is&nbsp;used.&nbsp;The&nbsp;BFS&nbsp;tracks&nbsp;link
+direction (up or down) and avoid steps that will perform up after a down
+step was used.
+
+2. Once MinHop matrices exist, each switch is visited and for each target LID a
+decision is made as to what port should be used to get to that LID.
+<BR>&nbsp;&nbsp;&nbsp;This&nbsp;step&nbsp;is&nbsp;common&nbsp;to&nbsp;standard&nbsp;and&nbsp;Up/Down&nbsp;routing.&nbsp;Each&nbsp;port&nbsp;has&nbsp;a
+counter counting the number of target LIDs going through it.
+<BR>&nbsp;&nbsp;&nbsp;When&nbsp;there&nbsp;are&nbsp;multiple&nbsp;alternative&nbsp;ports&nbsp;with&nbsp;same&nbsp;MinHop&nbsp;to&nbsp;a&nbsp;LID,
+the one with less previously assigned ports is selected.
+<BR>&nbsp;&nbsp;&nbsp;If&nbsp;LMC&nbsp;&gt;&nbsp;0,&nbsp;more&nbsp;checks&nbsp;are&nbsp;added:&nbsp;Within&nbsp;each&nbsp;group&nbsp;of&nbsp;LIDs&nbsp;assigned&nbsp;to
+same target port,
+<BR>&nbsp;&nbsp;&nbsp;a.&nbsp;use&nbsp;only&nbsp;ports&nbsp;which&nbsp;have&nbsp;same&nbsp;MinHop
+<BR>&nbsp;&nbsp;&nbsp;b.&nbsp;first&nbsp;prefer&nbsp;the&nbsp;ones&nbsp;that&nbsp;go&nbsp;to&nbsp;different&nbsp;systemImageGuid&nbsp;(then
+the previous LID of the same LMC group)
+<BR>&nbsp;&nbsp;&nbsp;c.&nbsp;if&nbsp;none&nbsp;-&nbsp;prefer&nbsp;those&nbsp;which&nbsp;go&nbsp;through&nbsp;another&nbsp;NodeGuid
+<BR>&nbsp;&nbsp;&nbsp;d.&nbsp;fall&nbsp;back&nbsp;to&nbsp;the&nbsp;number&nbsp;of&nbsp;paths&nbsp;method&nbsp;(if&nbsp;all&nbsp;go&nbsp;to&nbsp;same&nbsp;node).
+
+Effect of Topology Changes
+
+OpenSM will preserve existing routing in any case where there is no change in
+the fabric switches unless the -r (--reassign_lids) option is specified.
+
+-r
+<BR>
+
+--reassign_lids
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;option&nbsp;causes&nbsp;OpenSM&nbsp;to&nbsp;reassign&nbsp;LIDs&nbsp;to&nbsp;all
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;nodes.&nbsp;Specifying&nbsp;-r&nbsp;on&nbsp;a&nbsp;running&nbsp;subnet
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;may&nbsp;disrupt&nbsp;subnet&nbsp;traffic.
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Without&nbsp;-r,&nbsp;OpenSM&nbsp;attempts&nbsp;to&nbsp;preserve&nbsp;existing
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LID&nbsp;assignments&nbsp;resolving&nbsp;multiple&nbsp;use&nbsp;of&nbsp;same&nbsp;LID.
+
+If a link is added or removed, OpenSM does not recalculate
+the routes that do not have to change. A route has to change
+if the port is no longer UP or no longer the MinHop. When routing changes
+are performed, the same algorithm for balancing the routes is invoked.
+
+In the case of using the file based routing, any topology changes are
+currently ignored The 'file' routing engine just loads the LFTs from the file
+specified, with no reaction to real topology. Obviously, this will not be able
+to recheck LIDs (by GUID) for disconnected nodes, and LFTs for non-existent
+switches will be skipped. Multicast is not affected by 'file' routing engine
+(this uses min hop tables).
+
+
+Min Hop Algorithm
+
+The Min Hop algorithm is invoked by default if no routing algorithm is
+specified.  It can also be invoked by specifying '-R minhop'.
+
+The Min Hop algorithm is divided into two stages: computation of
+min-hop tables on every switch and LFT output port assignment. Link
+subscription is also equalized with the ability to override based on
+port GUID. The latter is supplied by:
+
+-i &lt;equalize-ignore-guids-file&gt;
+<BR>
+
+-ignore-guids &lt;equalize-ignore-guids-file&gt;
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;option&nbsp;provides&nbsp;the&nbsp;means&nbsp;to&nbsp;define&nbsp;a&nbsp;set&nbsp;of&nbsp;ports
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(by&nbsp;guid)&nbsp;that&nbsp;will&nbsp;be&nbsp;ignored&nbsp;by&nbsp;the&nbsp;link&nbsp;load
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;equalization&nbsp;algorithm.&nbsp;Note&nbsp;that&nbsp;only&nbsp;endports&nbsp;(CA,
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;port&nbsp;0,&nbsp;and&nbsp;router&nbsp;ports)&nbsp;and&nbsp;not&nbsp;switch&nbsp;external
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ports&nbsp;are&nbsp;supported.
+
+LMC awareness routes based on (remote) system or switch basis.
+
+
+Purpose of UPDN Algorithm
+
+The UPDN algorithm is designed to prevent deadlocks from occurring in loops
+of the subnet. A loop-deadlock is a situation in which it is no longer
+possible to send data between any two hosts connected through the loop. As
+such, the UPDN routing algorithm should be used if the subnet is not a pure
+Fat Tree, and one of its loops may experience a deadlock (due, for example,
+to high pressure).
+
+The UPDN algorithm is based on the following main stages:
+
+1.  Auto-detect root nodes - based on the CA hop length from any switch in
+the subnet, a statistical histogram is built for each switch (hop num vs
+number of occurrences). If the histogram reflects a specific column (higher
+than others) for a certain node, then it is marked as a root node. Since
+the algorithm is statistical, it may not find any root nodes. The list of
+the root nodes found by this auto-detect stage is used by the ranking
+process stage.
+
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;Note&nbsp;1:&nbsp;The&nbsp;user&nbsp;can&nbsp;override&nbsp;the&nbsp;node&nbsp;list&nbsp;manually.
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;Note&nbsp;2:&nbsp;If&nbsp;this&nbsp;stage&nbsp;cannot&nbsp;find&nbsp;any&nbsp;root&nbsp;nodes,&nbsp;and&nbsp;the&nbsp;user&nbsp;did
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;specify&nbsp;a&nbsp;guid&nbsp;list&nbsp;file,&nbsp;OpenSM&nbsp;defaults&nbsp;back&nbsp;to&nbsp;the
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Min&nbsp;Hop&nbsp;routing&nbsp;algorithm.
+
+2.  Ranking process - All root switch nodes (found in stage 1) are assigned
+a rank of 0. Using the BFS algorithm, the rest of the switch nodes in the
+subnet are ranked incrementally. This ranking aids in the process of enforcing
+rules that ensure loop-free paths.
+
+3.  Min Hop Table setting - after ranking is done, a BFS algorithm is run from
+each (CA or switch) node in the subnet. During the BFS process, the FDB table
+of each switch node traversed by BFS is updated, in reference to the starting
+node, based on the ranking rules and guid values.
+
+At the end of the process, the updated FDB tables ensure loop-free paths
+through the subnet.
+
+Note: Up/Down routing does not allow LID routing communication between
+switches that are located inside spine &quot;switch systems&quot;.
+The reason is that there is no way to allow a LID route between them
+that does not break the Up/Down rule.
+One ramification of this is that you cannot run SM on switches other
+than the leaf switches of the fabric.
+
+
+UPDN Algorithm Usage
+
+Activation through OpenSM
+
+Use '-R updn' option (instead of old '-u') to activate the UPDN algorithm.
+Use '-a &lt;root_guid_file&gt;' for adding an UPDN guid file that contains the
+root nodes for ranking.
+If the `-a' option is not used, OpenSM uses its auto-detect root nodes
+algorithm.
+
+Notes on the guid list file:
+
+1.   A valid guid file specifies one guid in each line. Lines with an invalid
+format will be discarded.
+<BR>
+
+2.   The user should specify the root switch guids. However, it is also
+possible to specify CA guids; OpenSM will use the guid of the switch (if
+it exists) that connects the CA to the subnet as a root node.
+
+
+Fat-tree Routing Algorithm
+
+The fat-tree algorithm optimizes routing for &quot;shift&quot; communication pattern.
+It should be chosen if a subnet is a symmetrical or almost symmetrical
+fat-tree of various types.
+It supports not just K-ary-N-Trees, by handling for non-constant K,
+cases where not all leafs (CAs) are present, any CBB ratio.
+As in UPDN, fat-tree also prevents credit-loop-deadlocks.
+
+If the root guid file is not provided ('-a' or '--root_guid_file' options),
+the topology has to be pure fat-tree that complies with the following rules:
+<BR>&nbsp;&nbsp;-&nbsp;Tree&nbsp;rank&nbsp;should&nbsp;be&nbsp;between&nbsp;two&nbsp;and&nbsp;eight&nbsp;(inclusively)
+<BR>&nbsp;&nbsp;-&nbsp;Switches&nbsp;of&nbsp;the&nbsp;same&nbsp;rank&nbsp;should&nbsp;have&nbsp;the&nbsp;same&nbsp;number
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;UP-going&nbsp;port&nbsp;groups*,&nbsp;unless&nbsp;they&nbsp;are&nbsp;root&nbsp;switches,
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;which&nbsp;case&nbsp;the&nbsp;shouldn't&nbsp;have&nbsp;UP-going&nbsp;ports&nbsp;at&nbsp;all.
+<BR>&nbsp;&nbsp;-&nbsp;Switches&nbsp;of&nbsp;the&nbsp;same&nbsp;rank&nbsp;should&nbsp;have&nbsp;the&nbsp;same&nbsp;number
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;DOWN-going&nbsp;port&nbsp;groups,&nbsp;unless&nbsp;they&nbsp;are&nbsp;leaf&nbsp;switches.
+<BR>&nbsp;&nbsp;-&nbsp;Switches&nbsp;of&nbsp;the&nbsp;same&nbsp;rank&nbsp;should&nbsp;have&nbsp;the&nbsp;same&nbsp;number
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;ports&nbsp;in&nbsp;each&nbsp;UP-going&nbsp;port&nbsp;group.
+<BR>&nbsp;&nbsp;-&nbsp;Switches&nbsp;of&nbsp;the&nbsp;same&nbsp;rank&nbsp;should&nbsp;have&nbsp;the&nbsp;same&nbsp;number
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;ports&nbsp;in&nbsp;each&nbsp;DOWN-going&nbsp;port&nbsp;group.
+<BR>&nbsp;&nbsp;-&nbsp;All&nbsp;the&nbsp;CAs&nbsp;have&nbsp;to&nbsp;be&nbsp;at&nbsp;the&nbsp;same&nbsp;tree&nbsp;level&nbsp;(rank).
+
+If the root guid file is provided, the topology doesn't have to be pure
+fat-tree, and it should only comply with the following rules:
+<BR>&nbsp;&nbsp;-&nbsp;Tree&nbsp;rank&nbsp;should&nbsp;be&nbsp;between&nbsp;two&nbsp;and&nbsp;eight&nbsp;(inclusively)
+<BR>&nbsp;&nbsp;-&nbsp;All&nbsp;the&nbsp;Compute&nbsp;Nodes**&nbsp;have&nbsp;to&nbsp;be&nbsp;at&nbsp;the&nbsp;same&nbsp;tree&nbsp;level&nbsp;(rank).
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;Note&nbsp;that&nbsp;non-compute&nbsp;node&nbsp;CAs&nbsp;are&nbsp;allowed&nbsp;here&nbsp;to&nbsp;be&nbsp;at&nbsp;different
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;tree&nbsp;ranks.
+
+* ports that are connected to the same remote switch are referenced as
+'port group'.
+
+** list of compute nodes (CNs) can be specified by '-u' or '--cn_guid_file'
+OpenSM options.
+
+Topologies that do not comply cause a fallback to min hop routing.
+Note that this can also occur on link failures which cause the topology
+to no longer be &quot;pure&quot; fat-tree.
+
+Note that although fat-tree algorithm supports trees with non-integer CBB
+ratio, the routing will not be as balanced as in case of integer CBB ratio.
+In addition to this, although the algorithm allows leaf switches to have any
+number of CAs, the closer the tree is to be fully populated, the more
+effective the &quot;shift&quot; communication pattern will be.
+In general, even if the root list is provided, the closer the topology to a
+pure and symmetrical fat-tree, the more optimal the routing will be.
+
+The algorithm also dumps compute node ordering file (opensm-ftree-ca-order.dump)
+in the same directory where the OpenSM log resides. This ordering file provides
+the CN order that may be used to create efficient communication pattern, that
+will match the routing tables.
+
+Routing between non-CN nodes
+
+The use of the cn_guid_file option allows non-CN nodes to be located on different levels in the fat tree.
+In such case, it is not guaranteed that the Fat Tree algorithm will route between two non-CN nodes.
+To solve this problem, a list of non-CN nodes can be specified by '-G' or '--io_guid_file' option.
+Theses nodes will be allowed to use switches the wrong way round a specific number of times (specified by '-H' or '--max_reverse_hops'.
+With the proper max_reverse_hops and io_guid_file values, you can ensure full connectivity in the Fat Tree.
+
+Please note that using max_reverse_hops creates routes that use the switch in a counter-stream way.
+This option should never be used to connect nodes with high bandwidth traffic between them ! It should only be used
+to allow connectivity for HA purposes or similar.
+Also having routes the other way around can in theory cause credit loops.
+
+Use these options with extreme care !
+
+Activation through OpenSM
+
+Use '-R ftree' option to activate the fat-tree algorithm.
+Use '-a &lt;root_guid_file&gt;' to provide root nodes for ranking. If the `-a' option
+is not used, routing algorithm will detect roots automatically.
+Use '-u &lt;root_cn_file&gt;' to provide the list of compute nodes. If the `-u' option
+is not used, all the CAs are considered as compute nodes.
+
+Note: LMC &gt; 0 is not supported by fat-tree routing. If this is
+specified, the default routing algorithm is invoked instead.
+
+
+LASH Routing Algorithm
+
+LASH is an acronym for LAyered SHortest Path Routing. It is a
+deterministic shortest path routing algorithm that enables topology
+agnostic deadlock-free routing within communication networks.
+
+When computing the routing function, LASH analyzes the network
+topology for the shortest-path routes between all pairs of sources /
+destinations and groups these paths into virtual layers in such a way
+as to avoid deadlock.
+
+Note LASH analyzes routes and ensures deadlock freedom between switch
+pairs. The link from HCA between and switch does not need virtual
+layers as deadlock will not arise between switch and HCA.
+
+In more detail, the algorithm works as follows:
+
+1) LASH determines the shortest-path between all pairs of source /
+destination switches. Note, LASH ensures the same SL is used for all
+SRC/DST - DST/SRC pairs and there is no guarantee that the return
+path for a given DST/SRC will be the reverse of the route SRC/DST.
+
+2) LASH then begins an SL assignment process where a route is assigned
+to a layer (SL) if the addition of that route does not cause deadlock
+within that layer. This is achieved by maintaining and analysing a
+channel dependency graph for each layer. Once the potential addition
+of a path could lead to deadlock, LASH opens a new layer and continues
+the process.
+
+3) Once this stage has been completed, it is highly likely that the
+first layers processed will contain more paths than the latter ones.
+To better balance the use of layers, LASH moves paths from one layer
+to another so that the number of paths in each layer averages out.
+
+Note, the implementation of LASH in opensm attempts to use as few layers
+as possible. This number can be less than the number of actual layers
+available.
+
+In general LASH is a very flexible algorithm. It can, for example,
+reduce to Dimension Order Routing in certain topologies, it is topology
+agnostic and fares well in the face of faults.
+
+It has been shown that for both regular and irregular topologies, LASH
+outperforms Up/Down. The reason for this is that LASH distributes the
+traffic more evenly through a network, avoiding the bottleneck issues
+related to a root node and always routes shortest-path.
+
+The algorithm was developed by Simula Research Laboratory.
+
+
+Use '-R lash -Q ' option to activate the LASH algorithm.
+
+Note: QoS support has to be turned on in order that SL/VL mappings are
+used.
+
+Note: LMC &gt; 0 is not supported by the LASH routing. If this is
+specified, the default routing algorithm is invoked instead.
+
+For open regular cartesian meshes the DOR algorithm is the ideal
+routing algorithm. For toroidal meshes on the other hand there
+are routing loops that can cause deadlocks. LASH can be used to
+route these cases. The performance of LASH can be improved by
+preconditioning the mesh in cases where there are multiple links
+connecting switches and also in cases where the switches are not
+cabled consistently. An option exists for LASH to do this. To
+invoke this use '-R lash -Q --do_mesh_analysis'. This will
+add an additional phase that analyses the mesh to try to determine
+the dimension and size of a mesh. If it determines that the mesh
+looks like an open or closed cartesian mesh it reorders the ports
+in dimension order before the rest of the LASH algorithm runs.
+
+DOR Routing Algorithm
+
+The Dimension Order Routing algorithm is based on the Min Hop
+algorithm and so uses shortest paths.  Instead of spreading traffic
+out across different paths with the same shortest distance, it chooses
+among the available shortest paths based on an ordering of dimensions.
+Each port must be consistently cabled to represent a hypercube
+dimension or a mesh dimension.  Paths are grown from a destination
+back to a source using the lowest dimension (port) of available paths
+at each step.  This provides the ordering necessary to avoid deadlock.
+When there are multiple links between any two switches, they still
+represent only one dimension and traffic is balanced across them
+unless port equalization is turned off.  In the case of hypercubes,
+the same port must be used throughout the fabric to represent the
+hypercube dimension and match on both ends of the cable.  In the case
+of meshes, the dimension should consistently use the same pair of
+ports, one port on one end of the cable, and the other port on the
+other end, continuing along the mesh dimension.
+
+Use '-R dor' option to activate the DOR algorithm.
+
+
+Routing References
+
+To learn more about deadlock-free routing, see the article
+&quot;Deadlock Free Message Routing in Multiprocessor Interconnection Networks&quot;
+by William J Dally and Charles L Seitz (1985).
+
+To learn more about the up/down algorithm, see the article
+&quot;Effective Strategy to Compute Forwarding Tables for InfiniBand Networks&quot;
+by Jose Carlos Sancho, Antonio Robles, and Jose Duato at the
+Universidad Politecnica de Valencia.
+
+To learn more about LASH and the flexibility behind it, the requirement
+for layers, performance comparisons to other algorithms, see the
+following articles:
+
+&quot;Layered Routing in Irregular Networks&quot;, Lysne et al, IEEE
+Transactions on Parallel and Distributed Systems, VOL.16, No12,
+December 2005.
+
+&quot;Routing for the ASI Fabric Manager&quot;, Solheim et al. IEEE
+Communications Magazine, Vol.44, No.7, July 2006.
+
+&quot;Layered Shortest Path (LASH) Routing in Irregular System Area
+Networks&quot;, Skeie et al. IEEE Computer Society Communication
+Architecture for Clusters 2002.
+
+
+Modular Routine Engine
+
+Modular routing engine structure allows for the ease of
+&quot;plugging&quot; new routing modules.
+
+Currently, only unicast callbacks are supported. Multicast
+can be added later.
+
+One existing routing module is up-down &quot;updn&quot;, which may be
+activated with '-R updn' option (instead of old '-u').
+
+General usage is:
+$ opensm -R 'module-name'
+
+There is also a trivial routing module which is able
+to load LFT tables from a file.
+
+Main features:
+
+<BR>&nbsp;-&nbsp;this&nbsp;will&nbsp;load&nbsp;switch&nbsp;LFTs&nbsp;and/or&nbsp;LID&nbsp;matrices&nbsp;(min&nbsp;hops&nbsp;tables)
+<BR>&nbsp;-&nbsp;this&nbsp;will&nbsp;load&nbsp;switch&nbsp;LFTs&nbsp;according&nbsp;to&nbsp;the&nbsp;path&nbsp;entries&nbsp;introduced
+<BR>&nbsp;&nbsp;&nbsp;in&nbsp;the&nbsp;file
+<BR>&nbsp;-&nbsp;no&nbsp;additional&nbsp;checks&nbsp;will&nbsp;be&nbsp;performed&nbsp;(such&nbsp;as&nbsp;&quot;is&nbsp;port&nbsp;connected&quot;,
+<BR>&nbsp;&nbsp;&nbsp;etc.)
+<BR>&nbsp;-&nbsp;in&nbsp;case&nbsp;when&nbsp;fabric&nbsp;LIDs&nbsp;were&nbsp;changed&nbsp;this&nbsp;will&nbsp;try&nbsp;to&nbsp;reconstruct
+<BR>&nbsp;&nbsp;&nbsp;LFTs&nbsp;correctly&nbsp;if&nbsp;endport&nbsp;GUIDs&nbsp;are&nbsp;represented&nbsp;in&nbsp;the&nbsp;file
+<BR>&nbsp;&nbsp;&nbsp;(in&nbsp;order&nbsp;to&nbsp;disable&nbsp;this,&nbsp;GUIDs&nbsp;may&nbsp;be&nbsp;removed&nbsp;from&nbsp;the&nbsp;file
+<BR>&nbsp;&nbsp;&nbsp;&nbsp;or&nbsp;zeroed)
+
+The file format is compatible with output of 'ibroute' util and for
+whole fabric can be generated with dump_lfts.sh script.
+
+To activate file based routing module, use:
+
+<BR>&nbsp;&nbsp;opensm&nbsp;-R&nbsp;file&nbsp;-U&nbsp;\path\to\lfts_file
+
+If the lfts_file is not found or is in error, the default routing
+algorithm is utilized.
+
+The ability to dump switch lid matrices (aka min hops tables) to file and
+later to load these is also supported.
+
+The usage is similar to unicast forwarding tables loading from a lfts
+file (introduced by 'file' routing engine), but new lid matrix file
+name should be specified by -M or --lid_matrix_file option. For example:
+
+<BR>&nbsp;&nbsp;opensm&nbsp;-R&nbsp;file&nbsp;-M&nbsp;./opensm-lid-matrix.dump
+
+The dump file is named 'opensm-lid-matrix.dump' and will be generated
+in standard opensm dump directory (/var/log by default) when
+OSM_LOG_ROUTING logging flag is set.
+
+When routing engine 'file' is activated, but the lfts file is not specified
+or not cannot be open default lid matrix algorithm will be used.
+
+There is also a switch forwarding tables dumper which generates
+a file compatible with dump_lfts.sh output. This file can be used
+as input for forwarding tables loading by 'file' routing engine.
+Both or one of options -U and -M can be specified together with '-R file'.
+
+<A NAME="lbAL">&nbsp;</A>
+<h3>FILES</h3>
+
+<DL COMPACT>
+<DT><B>%ProgramFiles\WinOF\OpenSM\opensm.conf</B>
+
+<DD>
+default OpenSM config file.
+
+<DT><B>%ProgramFiles\WinOF\OpenSM\ib-node-name-map.conf</B><DD>
+default node name map file.  See ibnetdiscover for more information on format.
+
+<DT><B>%ProgramFiles\WinOF\OpenSM\partitions.conf</B>
+
+<DD>
+default partition config file
+
+<DT><B>%ProgramFiles\WinOF\OpenSM\qos-policy.conf</B>
+
+<DD>
+default QOS policy config file
+
+<DT><B>%ProgramFiles\WinOF\OpenSM\prefix-routes.conf</B>
+
+<DD>
+default prefix routes file.
+
+</DL>
+<h3>AUTHORS</h3>
+
+<DL COMPACT>
+<DT>Hal Rosenstock<DD>
+&lt;<I><A HREF="mailto:hal.rosenstock@gmail.com">hal.rosenstock@gmail.com</A></I>&gt;
+
+<DT>Sasha Khapyorsky<DD>
+&lt;<I><A HREF="mailto:sashak@voltaire.com">sashak@voltaire.com</A></I>&gt;
+
+<DT>Eitan Zahavi<DD>
+&lt;<I><A HREF="mailto:eitan@mellanox.co.il">eitan@mellanox.co.il</A></I>&gt;
+
+<DT>Yevgeny Kliteynik<DD>
+&lt;<I><A HREF="mailto:kliteyn@mellanox.co.il">kliteyn@mellanox.co.il</A></I>&gt;
+
+<DT>Thomas Sodring<DD>
+&lt;<I><A HREF="mailto:tsodring@simula.no">tsodring@simula.no</A></I>&gt;
+
+<DT>Ira Weiny<DD>
+&lt;<I><A HREF="mailto:weiny2@llnl.gov">weiny2@llnl.gov</A></I>&gt;
+
+<DT>Stan Smith<DD>
+&lt;<a href="mailto:weiny2@llnl.gov"><i>stan.smith</i></a><I><A HREF="mailto:weiny2@llnl.gov">@intel.com</A></I>&gt;</DL>
+
 <h4 align="left"><a href="#TOP"><font color="#000000">&lt;return-to-top&gt;</font></a></h4>\r
 <h3 align="left">&nbsp;</h3>\r
-<h3 align="left"><a name="osmtest"></a><br>\r
-Osmtest - Subnet Management Tests</h3>\r
-<p align="left">Invoke open subnet management tests. osmtest currently can not \r
+<h2 align="left"><a name="osmtest"></a><br>\r
+Osmtest - Subnet Management Tests</h2>\r
+<p align="left">osmtest - InfiniBand subnet manager and administration (SM/SA) \r
+test program<br>\r
+<br>\r
+osmtest currently can not \r
 run on the same HCA port which OpenSM is currently using.</p>\r
-<blockquote>\r
-       <p align="left">&nbsp;Usage: osmtest [options]</p>\r
-       <p align="left">Options:</p>\r
-       <blockquote>\r
-               <p align="left">&nbsp;-f &lt;c|a|v|s|e|f|m|q|t&gt;<br>\r
-               --flow &lt;c|a|v|s|e|f|m|q|t&gt;</p>\r
-\r
-                       <p align="left">This option directs osmtest to run a specific flow:</p>\r
-                       <p align="left">FLOW DESCRIPTIONS<br>\r
-                       c = create an inventory file with all nodes, ports &amp; paths.<br>\r
-                       a = run all validation tests (expecting an input inventory)<br>\r
-                       v = only validate the given inventory file.<br>\r
-                       s = run service registration, un-registration and lease.<br>\r
-                       e = run event forwarding test.<br>\r
-                       f = flood the SA with queries accoring to the stress mode.<br>\r
-                       m = multicast flow.<br>\r
-                       q = QoS info - VLArb and SLtoVL tables.<br>\r
-                       t = run trap 64/65 flow; requires running an external tool.<br>\r
-                       (default is all but QoS).</p>\r
-       \r
-               <p align="left">-w &lt;trap_wait_time&gt;<br>\r
-               --wait &lt;trap_wait_time&gt;</p>\r
-               <blockquote>\r
-                       <p align="left">This option specifies the wait time for trap 64/65 \r
-                       in seconds.<br>\r
-                       It is used only when running -f t - the trap 64/65 flow<br>\r
-                       (default to 10 sec).</p>\r
-               </blockquote>\r
-               <p align="left">-d &lt;number&gt;<br>\r
-               --debug &lt;number&gt;</p>\r
-               <blockquote>\r
-                       <p align="left">This option specifies a debug option.\r
-                       These options are not normally needed.<br>\r
-                       The number following -d selects the debug\r
-                       option to enable as follows:<br>\r
-                       OPT Description<br>\r
-                       --- -----------------<br>\r
-                       -d0 - Unused.<br>\r
-                       -d1 - Do not scan/compare path records.<br>\r
-                       -d2 - Force log flushing after each log message.<br>\r
-                       -d3 - Use mem tracking.<br>\r
-                       Without -d, no debug options are enabled.</p>\r
-               </blockquote>\r
-               <p align="left">-m &lt;LID in hex&gt;<br>\r
-               --max_lid &lt;LID in hex&gt;</p>\r
-               <blockquote>\r
-                       <p align="left">This option specifies the maximal LID number to be \r
-                       searched\r
-                       for during inventory file build (default to 100).</p>\r
-               </blockquote>\r
-               <p align="left">-g &lt;GUID in hex&gt;<br>\r
-               --guid &lt;GUID in hex&gt;</p>\r
-               <blockquote>\r
-                       <p align="left">This option specifies the local port GUID value\r
-                       with which osmtest should bind. osmtest may be\r
-                       bound to 1 port at a time.\r
-                       Without -g, osmtest displays a menu of possible\r
-                       port GUIDs and waits for user input.</p>\r
-               </blockquote>\r
-               <p align="left">-h<br>\r
-               --help</p>\r
-               <blockquote>\r
-                       <p align="left">Display this usage info then exit.</p>\r
-               </blockquote>\r
-               <p align="left">-i &lt;filename&gt;<br>\r
-               --inventory &lt;filename&gt;</p>\r
-               <blockquote>\r
-                       <p align="left">This option specifies the name of the inventory \r
-                       file.\r
-                       Normally, osmtest expects to find an inventory file,\r
-                       which osmtest uses to validate real-time information\r
-                       received from the SA during testing.\r
-                       If -i is not specified, osmtest defaults to the file\r
-                       'osmtest.dat'.<br>\r
-                       See the -c option for related information.</p>\r
-               </blockquote>\r
-               <p align="left">-s<br>\r
-               --stress</p>\r
-               <blockquote>\r
-                       <p align="left">This option runs the specified stress test instead \r
-                       of the normal test suite.<br>\r
-                       Stress test options are as follows:<br>\r
-                       OPT Description<br>\r
-                       --- -----------------<br>\r
-                       -s1 - Single-MAD response SA queries .<br>\r
-                       -s2 - Multi-MAD (RMPP) response SA queries.<br>\r
-                       -s3 - Multi-MAD (RMPP) Path Record SA queries.<br>\r
-                       Without -s, stress testing is not performed.</p>\r
-               </blockquote>\r
-               <p align="left">-M<br>\r
-               --Multicast_Mode</p>\r
-               <blockquote>\r
-                       <p align="left">This option specify length of Multicast test :<br>\r
-                       OPT Description<br>\r
-                       --- -----------------<br>\r
-                       -M1 - Short Multicast Flow (default) - single mode.<br>\r
-                       -M2 - Short Multicast Flow - multiple mode.<br>\r
-                       -M3 - Long Multicast Flow - single mode.<br>\r
-                       -M4 - Long Multicast Flow - multiple mode.<br>\r
-                       Single mode - Osmtest is tested alone , with no other <br>\r
-                       apps that interact vs. OpenSM MC.<br>\r
-                       Multiple mode - Could be run with other apps using MC vs.<br>\r
-                       OpenSM. Without -M, default flow testing is performed.</p>\r
-               </blockquote>\r
-               <p align="left">-t &lt;milliseconds&gt;</p>\r
-               <blockquote>\r
-                       <p align="left">This option specifies the time in milliseconds used \r
-                       for transaction timeouts.<br>\r
-                       Specifying -t 0 disables timeouts.<br>\r
-                       Without -t, osmtest defaults to a timeout value of 1 second.</p>\r
-               </blockquote>\r
-               <p align="left">-l<br>\r
-               --log_file</p>\r
-               <blockquote>\r
-                       <p align="left">This option defines the log to be the given file.<br>\r
-                       By default the log goes to stdout.</p>\r
-               </blockquote>\r
-               <p align="left">-v</p>\r
-               <blockquote>\r
-                       <p align="left">This option increases the log verbosity level. The \r
-                       -v option may be specified multiple times<br>\r
-                       to further increase the verbosity level. See the -vf option for more \r
-                       information about log verbosity.</p>\r
-               </blockquote>\r
-               <p align="left">-V</p>\r
-               <blockquote>\r
-                       <p align="left">This option sets the maximum verbosity level and \r
-                       forces log flushing.<br>\r
-                       The -V is equivalent to '-vf 0xFF -d 2'.<br>\r
-                       See the -vf option for more information about log verbosity.</p>\r
-               </blockquote>\r
-               <p align="left">-vf &lt;flags&gt;</p>\r
-               <blockquote>\r
-                       <p align="left">This option sets the log verbosity level. A flags \r
-                       field must follow the -vf option.<br>\r
-                       A bit set/clear in the flags enables/disables a specific log level \r
-                       as follows:<br>\r
-                       BIT LOG LEVEL ENABLED<br>\r
-                       ---- -----------------<br>\r
-                       0x01 - ERROR (error messages)<br>\r
-                       0x02 - INFO (basic messages, low volume)<br>\r
-                       0x04 - VERBOSE (interesting stuff, moderate volume)<br>\r
-                       0x08 - DEBUG (diagnostic, high volume)<br>\r
-                       0x10 - FUNCS (function entry/exit, very high volume)<br>\r
-                       0x20 - FRAMES (dumps all SMP and GMP frames)<br>\r
-                       0x40 - currently unused.<br>\r
-                       0x80 - currently unused.<br>\r
-                       Without -vf, osmtest defaults to ERROR + INFO (0x3).<br>\r
-                       Specifying -vf 0 disables all messages.<br>\r
-                       Specifying -vf 0xFF enables all messages (see -V).<br>\r
-                       High verbosity levels may require increasing<br>\r
-                       the transaction timeout with the -t option.</p>\r
-               </blockquote>\r
-       </blockquote>\r
-</blockquote>\r
-<h4 align="left"><a href="#TOP"><font color="#000000">&lt;return-to-top&gt;</font></a></h4>\r
-<h3 align="left">&nbsp;</h3>\r
+       <h3>SYNOPSIS</h3>\r
+       <b>osmtest</b> [-f(low) &lt;c|a|v|s|e|f|m|q|t&gt;] [-w(ait) &lt;trap_wait_time&gt;] [-d(ebug) \r
+       &lt;number&gt;] [-m(ax_lid) &lt;LID in hex&gt;] [-g(uid)[=]&lt;GUID in hex&gt;] [-p(ort)] [-i(nventory) \r
+       &lt;filename&gt;] [-s(tress)] [-M(ulticast_Mode)] [-t(imeout) &lt;milliseconds&gt;] [-l \r
+       | --log_file] [-v] [-vf &lt;flags&gt;] [-h(elp)] <a name="lbAD">&nbsp;</a> \r
+       <h3>DESCRIPTION</h3>\r
+       <p>osmtest is a test program to validate InfiniBand subnet manager and \r
+       administration (SM/SA). Default is to run all flows with the exception of \r
+       the QoS flow. osmtest provides a test suite for opensm. osmtest has the \r
+       following capabilities and testing flows: It creates an inventory file of \r
+       all available Nodes, Ports, and PathRecords, including all their fields. It \r
+       verifies the existing inventory, with all the object fields, and matches it \r
+       to a pre-saved one. A Multicast Compliancy test. An Event Forwarding test. A \r
+       Service Record registration test. An RMPP stress test. A Small SA Queries \r
+       stress test. It is recommended that after installing opensm, the user should \r
+       run &quot;osmtest -f c&quot; to generate the inventory file, and immediately \r
+       afterwards run &quot;osmtest -f a&quot; to test OpenSM. Another recommendation for \r
+       osmtest usage is to create the inventory when the IB fabric is stable, and \r
+       occasionally run &quot;osmtest -v&quot; to verify that nothing has changed.\r
+       <a name="lbAE">&nbsp;</a> </p>\r
+       <h3>OPTIONS</h3>\r
+       <dl compact>\r
+               <dt><b>-f</b>, <b>--flow</b> </dt>\r
+               <dd>This option directs osmtest to run a specific flow: <br>\r
+               &nbsp;FLOW&nbsp;&nbsp;DESCRIPTION <br>\r
+               &nbsp;c&nbsp;=&nbsp;create&nbsp;an&nbsp;inventory&nbsp;file&nbsp;with&nbsp;all&nbsp;nodes,&nbsp;ports&nbsp;and&nbsp;paths <br>\r
+               &nbsp;a&nbsp;=&nbsp;run&nbsp;all&nbsp;validation&nbsp;tests&nbsp;(expecting&nbsp;an&nbsp;input&nbsp;inventory) <br>\r
+               &nbsp;v&nbsp;=&nbsp;only&nbsp;validate&nbsp;the&nbsp;given&nbsp;inventory&nbsp;file <br>\r
+               &nbsp;s&nbsp;=&nbsp;run&nbsp;service&nbsp;registration,&nbsp;deregistration,&nbsp;and&nbsp;lease&nbsp;test <br>\r
+               &nbsp;e&nbsp;=&nbsp;run&nbsp;event&nbsp;forwarding&nbsp;test <br>\r
+               &nbsp;f&nbsp;=&nbsp;flood&nbsp;the&nbsp;SA&nbsp;with&nbsp;queries&nbsp;according&nbsp;to&nbsp;the&nbsp;stress&nbsp;mode <br>\r
+               &nbsp;m&nbsp;=&nbsp;multicast&nbsp;flow <br>\r
+               &nbsp;q&nbsp;=&nbsp;QoS&nbsp;info:&nbsp;dump&nbsp;VLArb&nbsp;and&nbsp;SLtoVL&nbsp;tables <br>\r
+               &nbsp;t&nbsp;=&nbsp;run&nbsp;trap&nbsp;64/65&nbsp;flow&nbsp;(this&nbsp;flow&nbsp;requires&nbsp;running&nbsp;of&nbsp;external&nbsp;tool)\r
+               <br>\r
+               &nbsp;(default&nbsp;is&nbsp;all&nbsp;flows&nbsp;except&nbsp;QoS) \r
+               </dd>\r
+               <dt><b>-w</b>, <b>--wait</b> </dt>\r
+               <dd>This option specifies the wait time for trap 64/65 in seconds It is \r
+               used only when running -f t - the trap 64/65 flow (default to 10 sec) \r
+               </dd>\r
+               <dt><b>-d</b>, <b>--debug</b> </dt>\r
+               <dd>This option specifies a debug option. These options are not normally \r
+               needed. The number following -d selects the debug option to enable as \r
+               follows: <br>\r
+               &nbsp;OPT&nbsp;&nbsp;&nbsp;Description <br>\r
+               &nbsp;---&nbsp;&nbsp;&nbsp;&nbsp;----------------- <br>\r
+               &nbsp;-d0&nbsp;&nbsp;-&nbsp;Ignore&nbsp;other&nbsp;SM&nbsp;nodes <br>\r
+               &nbsp;-d1&nbsp;&nbsp;-&nbsp;Force&nbsp;single&nbsp;threaded&nbsp;dispatching <br>\r
+               &nbsp;-d2&nbsp;&nbsp;-&nbsp;Force&nbsp;log&nbsp;flushing&nbsp;after&nbsp;each&nbsp;log&nbsp;message <br>\r
+               &nbsp;-d3&nbsp;&nbsp;-&nbsp;Disable&nbsp;multicast&nbsp;support \r
+               </dd>\r
+               <dt><b>-m</b>, <b>--max_lid</b> </dt>\r
+               <dd>This option specifies the maximal LID number to be searched for \r
+               during inventory file build (default to 100) \r
+               </dd>\r
+               <dt><b>-g</b>, <b>--guid</b> </dt>\r
+               <dd>This option specifies the local port GUID value with which OpenSM \r
+               should bind. OpenSM may be bound to 1 port at a time. If GUID given is \r
+               0, OpenSM displays a list of possible port GUIDs and waits for user \r
+               input. Without -g, OpenSM trys to use the default port. \r
+               </dd>\r
+               <dt><b>-p</b>, <b>--port</b> </dt>\r
+               <dd>This option displays a menu of possible local port GUID values with \r
+               which osmtest could bind \r
+               </dd>\r
+               <dt><b>-i</b>, <b>--inventory</b> </dt>\r
+               <dd>This option specifies the name of the inventory file Normally, \r
+               osmtest expects to find an inventory file, which osmtest uses to \r
+               validate real-time information received from the SA during testing If -i \r
+               is not specified, osmtest defaults to the file 'osmtest.dat' See -c \r
+               option for related information \r
+               </dd>\r
+               <dt><b>-s</b>, <b>--stress</b> </dt>\r
+               <dd>This option runs the specified stress test instead of the normal \r
+               test suite Stress test options are as follows: <br>\r
+               &nbsp;OPT&nbsp;&nbsp;&nbsp;&nbsp;Description <br>\r
+               &nbsp;---&nbsp;&nbsp;&nbsp;&nbsp;----------------- <br>\r
+               &nbsp;-s1&nbsp;&nbsp;-&nbsp;Single-MAD&nbsp;(RMPP)&nbsp;response&nbsp;SA&nbsp;queries <br>\r
+               &nbsp;-s2&nbsp;&nbsp;-&nbsp;Multi-MAD&nbsp;(RMPP)&nbsp;response&nbsp;SA&nbsp;queries <br>\r
+               &nbsp;-s3&nbsp;&nbsp;-&nbsp;Multi-MAD&nbsp;(RMPP)&nbsp;Path&nbsp;Record&nbsp;SA&nbsp;queries <br>\r
+               &nbsp;-s4&nbsp;&nbsp;-&nbsp;Single-MAD&nbsp;(non&nbsp;RMPP)&nbsp;get&nbsp;Path&nbsp;Record&nbsp;SA&nbsp;queries Without -s, \r
+               stress testing is not performed \r
+               </dd>\r
+               <dt><b>-M</b>, <b>--Multicast_Mode</b> </dt>\r
+               <dd>This option specify length of Multicast test: <br>\r
+               &nbsp;OPT&nbsp;&nbsp;&nbsp;&nbsp;Description <br>\r
+               &nbsp;---&nbsp;&nbsp;&nbsp;&nbsp;----------------- <br>\r
+               &nbsp;-M1&nbsp;&nbsp;-&nbsp;Short&nbsp;Multicast&nbsp;Flow&nbsp;(default)&nbsp;-&nbsp;single&nbsp;mode <br>\r
+               &nbsp;-M2&nbsp;&nbsp;-&nbsp;Short&nbsp;Multicast&nbsp;Flow&nbsp;-&nbsp;multiple&nbsp;mode <br>\r
+               &nbsp;-M3&nbsp;&nbsp;-&nbsp;Long&nbsp;Multicast&nbsp;Flow&nbsp;-&nbsp;single&nbsp;mode <br>\r
+               &nbsp;-M4&nbsp;&nbsp;-&nbsp;Long&nbsp;Multicast&nbsp;Flow&nbsp;-&nbsp;multiple&nbsp;mode Single mode - Osmtest is \r
+               tested alone, with no other apps that interact with OpenSM MC Multiple \r
+               mode - Could be run with other apps using MC with OpenSM. Without -M, \r
+               default flow testing is performed \r
+               </dd>\r
+               <dt><b>-t</b>, <b>--timeout</b> </dt>\r
+               <dd>This option specifies the time in milliseconds used for transaction \r
+               timeouts. Specifying -t 0 disables timeouts. Without -t, OpenSM defaults \r
+               to a timeout value of 200 milliseconds. \r
+               </dd>\r
+               <dt><b>-l</b>, <b>--log_file</b> </dt>\r
+               <dd>This option defines the log to be the given file. By default the log \r
+               goes to stdout. \r
+               </dd>\r
+               <dt><b>-v</b>, <b>--verbose</b> </dt>\r
+               <dd>This option increases the log verbosity level. The -v option may be \r
+               specified multiple times to further increase the verbosity level. See \r
+               the -vf option for more information about. log verbosity. \r
+               </dd>\r
+               <dt><b>-V</b> </dt>\r
+               <dd>This option sets the maximum verbosity level and forces log \r
+               flushing. The -V is equivalent to '-vf 0xFF -d 2'. See the -vf option \r
+               for more information about. log verbosity. \r
+               </dd>\r
+               <dt><b>-vf</b> </dt>\r
+               <dd>This option sets the log verbosity level. A flags field must follow \r
+               the -D option. A bit set/clear in the flags enables/disables a specific \r
+               log level as follows: <br>\r
+               &nbsp;BIT&nbsp;&nbsp;&nbsp;&nbsp;LOG&nbsp;LEVEL&nbsp;ENABLED <br>\r
+               &nbsp;----&nbsp;&nbsp;&nbsp;----------------- <br>\r
+               &nbsp;0x01&nbsp;-&nbsp;ERROR&nbsp;(error&nbsp;messages) <br>\r
+               &nbsp;0x02&nbsp;-&nbsp;INFO&nbsp;(basic&nbsp;messages,&nbsp;low&nbsp;volume) <br>\r
+               &nbsp;0x04&nbsp;-&nbsp;VERBOSE&nbsp;(interesting&nbsp;stuff,&nbsp;moderate&nbsp;volume) <br>\r
+               &nbsp;0x08&nbsp;-&nbsp;DEBUG&nbsp;(diagnostic,&nbsp;high&nbsp;volume) <br>\r
+               &nbsp;0x10&nbsp;-&nbsp;FUNCS&nbsp;(function&nbsp;entry/exit,&nbsp;very&nbsp;high&nbsp;volume) <br>\r
+               &nbsp;0x20&nbsp;-&nbsp;FRAMES&nbsp;(dumps&nbsp;all&nbsp;SMP&nbsp;and&nbsp;GMP&nbsp;frames) <br>\r
+               &nbsp;0x40&nbsp;-&nbsp;ROUTING&nbsp;(dump&nbsp;FDB&nbsp;routing&nbsp;information) <br>\r
+               &nbsp;0x80&nbsp;-&nbsp;currently&nbsp;unused. Without -vf, osmtest defaults to ERROR + INFO \r
+               (0x3) Specifying -vf 0 disables all messages Specifying -vf 0xFF enables \r
+               all messages (see -V) High verbosity levels may require increasing the \r
+               transaction timeout with the -t option \r
+               </dd>\r
+               <dt><b>-h</b>, <b>--help</b> </dt>\r
+               <dd>Display this usage info then exit. </dd>\r
+       </dl>\r
+       <h3>AUTHORS</h3>\r
+       <dl compact>\r
+               <dt>Hal Rosenstock </dt>\r
+               <dd>&lt;<i><a href="mailto:hal.rosenstock@gmail.com">hal.rosenstock@gmail.com</a></i>&gt; \r
+               </dd>\r
+               <dt>Eitan Zahavi </dt>\r
+               <dd>&lt;<i><a href="mailto:eitan@mellanox.co.il">eitan@mellanox.co.il</a></i>&gt; \r
+               </dd>\r
+       </dl>\r
+<p align="left"><a href="#TOP"><font color="#000000">&lt;return-to-top&gt;</font></a></p>\r
 <h3 align="left"><br>\r
 <BLOCKQUOTE></BLOCKQUOTE>\r
+       <h2>\r
 <a name="ibtrapgen"></a><br>\r
-ibtrapgen - Generate Infiniband subnet management traps</h3>\r
+ibtrapgen - Generate Infiniband subnet management traps</h2>\r
+       </h3>\r
 <p align="left">Usage: ibtrapgen -t|--trap_num &lt;TRAP_NUM&gt; -n|--number &lt;NUM_TRAP_CREATIONS&gt;<br>\r
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \r
 -r|--rate &lt;TRAP_RATE&gt; -l|--lid &lt;LIDADDR&gt; <br>\r
index 64c635d4eb009274bda6191cad96455572a4fc14..707d1b3f5d1f328d2c782a679643b48f319712d1 100644 (file)
@@ -197,7 +197,7 @@ BEGIN_C_DECLS
 * SYNOPSIS\r
 */\r
 #ifdef __WIN__\r
-#define OSM_DEFAULT_CACHE_DIR "%TEMP%\\"\r
+#define OSM_DEFAULT_CACHE_DIR "%ProgramFiles%\\WinOF\\OpenSM\\"\r
 #else\r
 #define OSM_DEFAULT_CACHE_DIR "/var/cache/opensm/"\r
 #endif\r
@@ -228,7 +228,7 @@ BEGIN_C_DECLS
 * SYNOPSIS\r
 */\r
 #ifdef __WIN__\r
-#define OSM_DEFAULT_CONFIG_FILE "%TEMP%\\opensm.conf"\r
+#define OSM_DEFAULT_CONFIG_FILE "%ProgramFiles%\\WinOF\\OpenSM\\opensm.conf"\r
 #elif defined(HAVE_DEFAULT_OPENSM_CONFIG_FILE)\r
 #define OSM_DEFAULT_CONFIG_FILE HAVE_DEFAULT_OPENSM_CONFIG_FILE\r
 #elif defined (OPENSM_CONFIG_DIR)\r
@@ -248,7 +248,7 @@ BEGIN_C_DECLS
 * SYNOPSIS\r
 */\r
 #ifdef __WIN__\r
-#define OSM_DEFAULT_PARTITION_CONFIG_FILE "%TEMP%\\osm-partitions.conf"\r
+#define OSM_DEFAULT_PARTITION_CONFIG_FILE "%ProgramFiles%\\WinOF\\OpenSM\\osm-partitions.conf"\r
 #elif defined(HAVE_DEFAULT_PARTITION_CONFIG_FILE)\r
 #define OSM_DEFAULT_PARTITION_CONFIG_FILE HAVE_DEFAULT_PARTITION_CONFIG_FILE\r
 #elif defined(OPENSM_CONFIG_DIR)\r
@@ -268,7 +268,7 @@ BEGIN_C_DECLS
 * SYNOPSIS\r
 */\r
 #ifdef __WIN__\r
-#define OSM_DEFAULT_QOS_POLICY_FILE "%TEMP%\\osm-qos-policy.conf"\r
+#define OSM_DEFAULT_QOS_POLICY_FILE "%ProgramFiles%\\WinOF\\OpenSM\\osm-qos-policy.conf"\r
 #elif defined(HAVE_DEFAULT_QOS_POLICY_FILE)\r
 #define OSM_DEFAULT_QOS_POLICY_FILE HAVE_DEFAULT_QOS_POLICY_FILE\r
 #elif defined(OPENSM_CONFIG_DIR)\r
@@ -288,7 +288,7 @@ BEGIN_C_DECLS
 * SYNOPSIS\r
 */\r
 #ifdef __WIN__\r
-#define OSM_DEFAULT_PREFIX_ROUTES_FILE "%TEMP%\\osm-prefix-routes.conf"\r
+#define OSM_DEFAULT_PREFIX_ROUTES_FILE "%ProgramFiles%\\WinOF\\OpenSM\\osm-prefix-routes.conf"\r
 #elif defined(HAVE_DEFAULT_PREFIX_ROUTES_FILE)\r
 #define OSM_DEFAULT_PREFIX_ROUTES_FILE HAVE_DEFAULT_PREFIX_ROUTES_FILE\r
 #elif defined(OPENSM_CONFIG_DIR)\r
index 4a6daf43faa5a9f2abf14ecb7b98ed1a9153605d..82d4fbaa9cd48211e86f6f08147e6080038b3e36 100644 (file)
@@ -30,7 +30,7 @@
 /* #undef ENABLE_OSM_PERF_MGR_PROFILE */\r
 \r
 /* Define a default node name map file */\r
-#define HAVE_DEFAULT_NODENAME_MAP "%TEMP%\\ib-node-name-map"\r
+#define HAVE_DEFAULT_NODENAME_MAP "%ProgramFiles%\\WinOF\\OpenSM\\ib-node-name.map"\r
 \r
 /* Define a default OpenSM config file */\r
 #undef HAVE_DEFAULT_OPENSM_CONFIG_FILE\r
index 5bcb43c60016ade90d288fb29e51e253da36d6be..4c7ff0ed25939010444257e73309c2288a033ec0 100644 (file)
@@ -98,8 +98,12 @@ getopt_long_only(int argc, char *const*argv,
 extern char *strdup_expand(const char *);\r
 \r
 /* The following defines replace syslog.h */\r
-#define openlog(a,b,c)\r
-#define closelog()\r
+\r
+void openlog(char *ident, int option, int facility);\r
+void closelog(void);\r
+#define LOG_CONS       (1<<0)\r
+#define LOG_PID                (1<<2)\r
+#define LOG_USER       (1<<3)\r
 \r
 void syslog(int priority, char *fmt, ... );\r
 \r
index b3e4e1217e466ad61b254998de6b814e6983f78b..67da8ea21c2bad6dc6d36bb2874148a6f0994735 100644 (file)
@@ -4,22 +4,69 @@
 #include <stdio.h>
 #include <io.h>
 #include <complib/cl_memory.h>
+#include <opensm/osm_base.h>
 
 #include <..\..\..\..\etc\user\inet.c>
 
 #define OSM_MAX_LOG_NAME_SIZE 512
 
+static char *syslog_fname;
+static FILE *syslog_file;
+static char *syslog_id;
+
+void openlog(char *ident, int option, int facility)
+{
+       if (!syslog_fname)
+               syslog_fname = strdup_expand(OSM_DEFAULT_TMP_DIR "osm.syslog"); 
+
+       if (!syslog_file) {
+               syslog_file = fopen(syslog_fname,"w");
+               if (syslog_file)
+                       syslog_id = strdup(ident);
+       }
+}
+
+void closelog(void)
+{
+       if (syslog_file) {
+               fprintf(syslog_file, "\n[%s] Closing syslog\n",syslog_id);
+               fflush(syslog_file);
+               fclose(syslog_file);
+               syslog_file = NULL;
+               if (syslog_id) {
+                       free((void*)syslog_id);
+                       syslog_id = NULL;
+               }
+               if (syslog_fname) {
+                       free((void*)syslog_fname);
+                       syslog_fname = NULL;
+               }
+       }
+}
+
 /* output to user-mode DebugView monitor if running */
  
 void syslog(int prio, char *fmt, ... )
 {
-       CHAR Buffer[1024];
-       va_list args;
+       char Buffer[1024];
+       SYSTEMTIME st;
+       uint32_t pid = GetCurrentThreadId();
+       va_list args;
 
        va_start(args,fmt);
        _vsnprintf(Buffer, 1024, (LPSTR)fmt, args); 
        va_end(args);
-       OutputDebugStringA(Buffer);
+
+       if (!syslog_file) {
+               OutputDebugStringA(Buffer);
+               return;
+       }
+
+       GetLocalTime(&st);
+       fprintf(syslog_file, "[%s][%02d:%02d:%02d:%03d][%04X] %s", syslog_id,
+               st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, pid,
+               Buffer);
+       fflush(syslog_file);
 }