Blob Blame History Raw
<?xml version="1.0" encoding="utf-8"?>
<Config>

<!-- Common FM configuration, applies to all FM instances/subnets -->
<Common>
  <!-- Various sets of Applications which may be used in Virtual Fabrics -->
  <!-- Applications defined here are available for use in all FM instances. -->
  <!-- Additional Applications may be defined here or per FM instance. -->
  <!-- Applications specified per FM instance will add to -->
  <!-- instead of replace these Application definitions. -->
  <Applications>
    <!-- Each Application can have one or more ServiceIDs and/or MGIDs. -->
    <!-- These will be matched against PathRecord and Multicast SA queries -->
    <!-- so that the returned SLID/DLID, PKey, SL, etc are appropriate for -->
    <!-- the Virtual Fabric(VF) which contains the application(s). -->

    <!-- Every Application must have a unique <Name> -->
    <!-- The name must be unique among all Application names within an -->
    <!-- FM instance. -->
    <!-- When defined at Common level must be unique within all instances. -->
    <!-- The name is limited to 64 characters and is case sensitive. -->

    <!-- ServiceIDs are 64 bit values which identify applications within the -->
    <!-- PathRecord query and are typically used within the InfiniBand -->
    <!-- Communication Manager (CM) protocol to identify the application for -->
    <!-- a connection request. -->
    <!-- In many ways ServiceIDs are IBs equivalent of TCP "socket ports". -->
    <!-- ServiceIDs can be specified in the following ways in the -->
    <!-- Application section: -->
    <!-- a single ServiceID: <ServiceID>0x1234567812345678</ServiceID> -->
    <!-- a range of ServiceIDs: -->
    <!---       <ServiceIDRange>0-0xffffffffffffffff</ServiceIDRange> -->
    <!-- a masked compare of ServiceID: -->
    <!---       <ServiceIDMasked>0x120003567*0xff000ffff</ServiceIDMasked> -->
    <!--        Matches ServiceIDs which when ANDed with 2nd value (the -->
    <!--        mask) match the 1st value -->
    <!-- all others not in any VF: <Select>UnmatchedServiceID</Select> -->
    <!--        UnmatchedServiceID matches all applications' ServiceIDs -->
    <!--        which match none of the Virtual Fabrics after filtering -->
    <!--        by src/dest/requester. -->
    <!--        Can be used as an easy catch-all. -->
    <!-- MGIDs (IB Multicast GIDs) are 128 bit values which identify -->
    <!-- multicast groups for Unreliable Datagram applications such as IPoIB -->
    <!-- MGIDs are represented as two 64 bit values separated by a colon (:) -->
    <!-- This way of representing 128 bit values is the same as used in  -->
    <!-- other FastFabric Tools such as opasaquery, opashowmc, etc. -->
    <!-- MGIDs can be specified in the following ways in the Application -->
    <!-- section: -->
    <!-- a single MGID: <MGID>0xabc:0x123567</MGID> -->
    <!-- a range of MGIDs: -->
    <!--        <MGIDRange>0:0-0xffffffffffffffff:0xffffffffffffffff</MGIDRange> -->
    <!-- a masked compare of MGID: -->
    <!--        <MGIDMasked>0xabc:0x120003567*0xfff:0xff000ffff</MGIDMasked> -->
    <!--        Matches MGIDs which when ANDed with 2nd value (the -->
    <!--        mask) match the 1st value. -->
    <!-- all others not in any VF: <Select>UnmatchedMGID</Select> -->
    <!--        UnmatchedMGID matches all applications' MGIDs which match -->
    <!--        none of the Virtual Fabrics after filtering by -->
    <!--        src/dest/requester. -->
    <!--        Can be used as an easy catch-all -->

    <!-- A special case is SA queries.  This special "application" allows -->
    <!-- SA query operations to be assigned to an appropriate VF.  -->
    <!-- SA queries must use the default Partition Key (0x7fff or 0xffff). -->
    <!-- However other aspects of SA access can be controlled (SL, etc). -->
    <!-- This syntax allows an Application to be specified which includes -->
    <!-- SA queries: <Select>SA</Select> -->

    <!-- In addition, an Application can include another Application via: -->
    <!-- <IncludeApplication>myapplication</IncludeApplication> -->
    <!-- This will include all the ServiceIDs and MGIDs in the given -->
    <!-- Application. -->
    <!-- Loops (including the parent Application) are not allowed. -->
    <!-- There is a nesting limit of 32. -->

    <!-- Some predefined Applications follow.  These are also a good set -->
    <!-- of examples to cut/paste to make other site specific applications: -->

    <!-- All Applications, can be used when per Application VFs not needed -->
    <Application>
      <Name>All</Name>
      <!-- Selects all service ID's -->
      <ServiceIDRange>0-0xffffffffffffffff</ServiceIDRange>
      <!-- selects all MGID's -->
      <MGIDRange>0:0-0xffffffffffffffff:0xffffffffffffffff</MGIDRange>
      <!-- these are redundant in this case, but don't hurt -->
      <Select>UnmatchedServiceID</Select>
      <Select>UnmatchedMGID</Select>
    </Application>

    <!-- An application just consisting of SA queries -->
    <Application>
      <Name>SA</Name>
      <Select>SA</Select>
    </Application>

    <!-- An application just consisting of PA queries -->
    <Application>
      <Name>PA</Name>
      <ServiceID>0x1100d03c34845555</ServiceID>
    </Application>

    <!-- An application just consisting of PM sweep traffic -->
    <Application>
      <Name>PM</Name>
      <Select>PM</Select>
    </Application>

    <!-- IPv4 over IB (IETF UD mode) for all partitions -->
    <Application>
      <Name>IPv4</Name>
      <!-- MGID = 0xffFS401bPPPP0000:00000000GGGGGGGG -->
      <!-- where F=flags, S=scope, P=PKey and G=IP Multicast Group -->
      <MGIDMasked>0xff00401b00000000:0*0xff00ffff0000ffff:0xffffffff00000000</MGIDMasked>
    </Application>

    <!-- Sample of IPv4 over IB (IETF UD mode) for PKey 0x8002/0x0002 -->
    <Application>
      <Name>IPv4_0002</Name>
      <!-- MGID = 0xffFS401bPPPP0000:00000000GGGGGGGG -->
      <!-- where F=flags, S=scope, P=PKey and G=IP Multicast Group -->
      <MGIDMasked>0xff00401b80020000:0*0xff00ffffffffffff:0xffffffff00000000</MGIDMasked>
    </Application>

    <!-- IPv6 over IB (IETF UD mode) for all partitions -->
    <Application>
      <Name>IPv6</Name>
      <!-- MGID = 0xffFS601bPPPPGGGG:GGGGGGGGGGGGGGGG -->
      <!-- where F=flags, S=scope, P=PKey and G=IP Multicast Group -->
      <MGIDMasked>0xff00601b00000000:0*0xff00ffff00000000:0</MGIDMasked>
    </Application>

    <!-- Sample of IPv6 over IB (IETF UD mode) for PKey 0x8002/0x0002 -->
    <Application>
      <Name>IPv6_0002</Name>
      <!-- MGID = 0xffFS601bPPPPGGGG:GGGGGGGGGGGGGGGG -->
      <!-- where F=flags, S=scope, P=PKey and G=IP Multicast Group -->
      <MGIDMasked>0xff00601b80020000:0*0xff00ffffffff0000:0</MGIDMasked>
    </Application>

    <!-- IPoIB Connected Mode (IPv4 and IPv6) -->
    <Application>
      <Name>IPoIBCM</Name>
      <!-- Unlike UD mode the ServiceID does not include PKey -->
      <!-- ServiceID = 0x1000000000XXXXXX where XXXXXX is QPN -->
      <ServiceIDMasked>0x1000000000000000*0xffffffffff000000</ServiceIDMasked>
    </Application>

    <!-- Reliable Datagram Service (RDS) (for Oracle) -->
    <Application>
      <Name>RDS</Name>
      <!-- ServiceID = 0x000000000106XXXX where XXXX is socket "port number" -->
      <ServiceIDRange>0x0000000001060000-0x000000000106ffff</ServiceIDRange>
    </Application>

    <!-- Unfortunately, none of the OFA Verbs MPIs use the SA nor CM. -->
    <!-- Hence to put an MPI job in its own Virtual Fabric, the PKey/SL of -->
    <!-- the desired Virtual fabric must be manually provided to the MPI run -->
    <Application>
      <Name>VerbsMPI</Name>
      <!-- <ServiceID>TBD</ServiceID> -->
    </Application>

    <!-- HPC Libraries (MPI, SHMEM, etc) which use PSM can query the SA and -->
    <!-- hence can use service IDs to select the desired Virtual Fabric. -->

    <!-- when separating PSM Control from Data Traffic: -->
    <!-- 1st Service ID in range is used for Control traffic. -->
    <!-- This will be the service ID used on the command line. -->
    <Application>
      <Name>PSM_Control</Name>
      <ServiceIDRange>0x1000117500000000-0x1000117500000007</ServiceIDRange>
      <!-- for simplicity, when serviceId is needed on mpirun command line -->
      <!-- we also allow serviceId 0x1 to 0x7. -->
      <ServiceIDRange>0x1-0x7</ServiceIDRange>
    </Application>

    <!-- when separating PSM Control from Data Traffic: -->
    <!-- Control Service ID +8 is used for Eager/Bulk traffic. -->
    <!-- Do NOT use this service ID on the command line. -->
    <Application>
      <Name>PSM_Data</Name>
      <ServiceIDRange>0x1000117500000008-0x100011750000000f</ServiceIDRange>
      <!-- for simplicity, when serviceId is needed on mpirun command line -->
      <!-- we also allow serviceId 0x9 to 0xf. -->
      <ServiceIDRange>0x9-0xf</ServiceIDRange>
    </Application>

    <!-- When not separating PSM Control from Data Traffic, map all -->
    <!-- PSM Service IDs as one application -->
    <Application>
      <Name>PSM</Name>
      <ServiceIDRange>0x1000117500000000-0x100011750000000f</ServiceIDRange>
      <!-- for simplicity, when serviceId is needed on mpirun command line -->
      <!-- we also allow serviceId 0x1 to 0xf -->
      <ServiceIDRange>0x1-0xf</ServiceIDRange>
    </Application>

    <Application>
      <Name>ibacm</Name>
      <!-- MGID = 0xff154001PPPP00RR:MM00000000000000 -->
      <!-- where  P=PKey, R=Rate and M=MTU -->
      <!-- Rate: 9 (75gb), 12 (50gb), 15 (25gb), 16 (100gb) -->
      <!-- MTU: 4 (2K), 5 (4K) -->
      <MGIDMasked>0xff15400100000000:0*0xffffffff0000ff00:0x00ffffffffffffff</MGIDMasked>
    </Application>

    <Application>
      <Name>iSER</Name>
      <!-- ServiceID = 0x000000000106XXXX where XXXX is socket "port number" -->
      <!-- <ServiceIDRange>0x0000000001060000-0x000000000106FFFF</ServiceIDRange> -->
      <!-- Default port 3260 = 0x0CBC -->
      <ServiceID>0x0000000001060CBC</ServiceID>
    </Application>

    <Application>
      <Name>Lustre</Name>
      <!-- ServiceID = 0x000000000106XXXX where XXXX is socket "port number" -->
      <!-- <ServiceIDRange>0x0000000001060000-0x000000000106FFFF</ServiceIDRange> -->
      <!-- Default port 987 = 0x03DB -->
      <ServiceID>0x00000000010603DB</ServiceID>
    </Application>

    <Application>
      <Name>RDMA_Apps</Name>
      <ServiceIDRange>0x0000000001000000-0x0000000001FFFFFF</ServiceIDRange>
    </Application>

    <!-- all the common networking protocols/applications -->
    <Application>
      <Name>Networking</Name>
      <IncludeApplication>IPv4</IncludeApplication>
      <IncludeApplication>IPv6</IncludeApplication>
      <IncludeApplication>IPoIBCM</IncludeApplication>
      <IncludeApplication>RDS</IncludeApplication>
    </Application>

    <!-- all the common storage protocols/applications -->
    <Application>
      <Name>Storage</Name>
      <IncludeApplication>iSER</IncludeApplication>
      <IncludeApplication>Lustre</IncludeApplication>
    </Application>

    <!-- all the common compute protocols/applications -->
    <Application>
      <Name>Compute</Name>
      <IncludeApplication>VerbsMPI</IncludeApplication>
      <IncludeApplication>PSM</IncludeApplication>
    </Application>

    <!-- default application used by VFs created by opafmvf tool -->                                                   <!--#SM_0_mt_enable#=-->
    <Application>                                                                                                      <!--#SM_0_mt_enable#=-->
      <Name>Tenant_Apps</Name>                                                                                         <!--#SM_0_mt_enable#=-->
      <IncludeApplication>Compute</IncludeApplication>                                                                 <!--#SM_0_mt_enable#=-->
    </Application>                                                                                                     <!--#SM_0_mt_enable#=-->
                                                                                                                       <!--#SM_0_mt_enable#=-->
    <!-- This is a catchall which can be used to identify all applications  -->
    <!-- which are not part of some other vFabric.  -->
    <Application>
      <Name>AllOthers</Name>
      <Select>UnmatchedServiceID</Select>
      <Select>UnmatchedMGID</Select>
    </Application>
  </Applications>

  <!-- Various Groups of Ports/Nodes which may be used in Virtual Fabrics    -->
  <!-- DeviceGroups defined here are available for use in all FM instances.  -->
  <!-- Additional DeviceGroups may be defined here or per FM instance.       -->
  <!-- DeviceGroups specified per FM instance will add to                    -->
  <!-- instead of replace these DeviceGroup definitions.                     -->
  <DeviceGroups>
    <!-- Each DeviceGroup can have one or more Nodes/Ports (e.g. Devices).   -->
    <!-- These will be matched against PathRecord and Multicast SA queries   -->
    <!-- so that the returned SLID/DLID, PKey, SL, etc are appropriate for   -->
    <!-- the Virtual Fabric(VF) which contains the Device(s).                -->
    <!-- Devices in a DeviceGroup but not found in the fabric are ignored.   -->

    <!-- Every DeviceGroup must have a unique <Name>                         -->
    <!-- The name must be unique among all DeviceGroup names within an       -->
    <!-- FM instance.                                                        -->
    <!-- When defined at Common level must be unique within all instances.   -->
    <!-- The name is limited to 64 characters and is case sensitive.         -->

    <!-- Devices can be explicitly specified in the following ways in the    -->
    <!-- DeviceGroup section:                                                -->
    <!-- A SystemImageGUID: <SystemImageGUID>0x123567</SystemImageGUID>      -->
    <!--        selects all nodes and ports in the system                    -->
    <!-- A NodeGUID: <NodeGUID>0x123567</NodeGUID>                           -->
    <!--        selects all ports in the node (a FI or SW is a single node)  -->
    <!-- A PortGUID: <PortGUID>0x123567</PortGUID>                           -->
    <!--        selects a specific port                                      -->
    <!-- A NodeDesc: <NodeDesc>Some Name</NodeDesc>                          -->
    <!--        selects all nodes exactly matching given name                -->
    <!--        typically will match exactly one, but multiple nodes with    -->
    <!--        same NodeDesc is possible.                                   -->
    <!-- Wild card rules that can be used in NodeDesc specification:         -->
    <!--        * Wild card is 0 or more of any combination of:              -->
    <!--             (A-Z)(a-z)(0-9) "-" "," "=" "." "_"                     -->
    <!--        ? Wild card is 0 or 1 of any combination of:                 -->
    <!--             (A-Z)(a-z)(0-9) "-" "," "=" "." "_"                     -->
    <!--        [##-##] can be used to specify a range of numbers            -->
    <!--             (ie: node[1-4] matches nodes named node1, node2,        -->
    <!--             node3, node4)                                           -->
    <!--             leading zeros may be specified and must match           -->
    <!--             (ie: node[06-10] matches nodes named node06, node07,    -->
    <!--             node08, node09, node10, but does not match node6)       -->
    <!--             more than one range can be specified                    -->
    <!--             (ie: rack[1-2]node[01-02] matches nodes named           -->
    <!--             rack1node01, rack1node02, rack2node01, rack2node02      -->
    <!--        :[##-##] can be used to specify a range of ports             -->
    <!--             (ie: switch:[2-4] would match node name "switch",       -->
    <!--             ports 2,3, and 4                                        -->
    <!-- Wild card Examples:                                                 -->
    <!--        <NodeDesc>SWITCH*</NodeDesc>                                 -->
    <!--        <NodeDesc>HFI?</NodeDesc>                                    -->
    <!--        <NodeDesc>HFI[1-4]</NodeDesc>                                -->
    <!--        <NodeDesc>?SWITCH[0-1]</NodeDesc>                            -->
    <!--        <NodeDesc>?SWITCH[0-1]:[2-3]</NodeDesc>                      -->
    <!--        <NodeDesc>SWITCH</NodeDesc>                                  -->

    <!-- Devices can be generically specified in the following ways in the   -->
    <!-- DeviceGroup section:                                                -->
    <!-- All FIs: <NodeType>FI</NodeType>                                    -->
    <!-- All Switches: <NodeType>SW</NodeType>                               -->
    <!-- The values above are case insensitive: FI, SW                       -->
    <!-- Each of the above selects all ports on the selected nodes.          -->
    <!-- The above can be combined as desired in the same DeviceGroup.       -->

    <!-- Some special types of Devices can be generically specified in       -->
    <!-- the following ways in the DeviceGroup section:                      -->
    <!-- All Devices: <Select>All</Select>                                   -->
    <!-- This FM Instance's Port: <Select>Self</Select>                      -->
    <!-- All HFIs directly connected: <Select>HFIDirectConnect</Select>      -->
    <!--        Both HFI ports which are directly connected to each other    -->
    <!--        with no switch. A typical back to back configuration         -->
    <!-- All TFIs: <Select>TFIs</Select>                                     -->
    <!--        A TFI is a passive device e.g. storage unit or gateway       -->
    <!--        which reports a Device Management Agent capability           -->
    <!--        This DeviceGroup will select all ports on all TFI devices    -->
    <!-- All Switch Enhanced Port 0s: <Select>SWE0</Select>                  -->
    <!--        All Switch Port 0 with Enhanced Port 0 in Capability Mask.   -->
    <!--        By definition will also include all Embedded SMs.            -->
    <!-- The values above are case insensitive:                              -->
    <!--      All, Self, SWE0, HFIDirectConnect, TFIs                -->
    <!-- The above can be combined as desired in the same DeviceGroup.       -->

    <!-- In addition, a DeviceGroup can include another DeviceGroup via:     -->
    <!-- <IncludeGroup>mygroup</IncludeGroup>                                -->
    <!-- This will include all the Devices in the given DeviceGroup.         -->
    <!-- It is valid to have more than 1 specification match the same device -->
    <!-- in which case the device is only included in the DeviceGroup once.  -->

    <!-- Some predefined DeviceGroups follow.  These are also a good set     -->
    <!-- of examples to cut/paste to make other site specific DeviceGroups:  -->

    <!-- All Nodes/Ports, can be used when Device specific VFs not needed    -->
    <DeviceGroup>
      <Name>All</Name>
      <Select>All</Select>
    </DeviceGroup>

    <!-- All Fabric Interfaces, includes HFIs and TFIs -->
    <DeviceGroup>
      <Name>AllFIs</Name>
      <NodeType>FI</NodeType>
    </DeviceGroup>

    <DeviceGroup>
      <Name>AllTFIs</Name>
      <Select>TFIs</Select>
    </DeviceGroup>

    <!-- All ports on all Switches -->
    <DeviceGroup>
      <Name>AllSWs</Name>
      <NodeType>SW</NodeType>
    </DeviceGroup>

    <!-- All Enhanced Port 0 ports on all Switches -->
    <DeviceGroup>
      <Name>AllSWE0s</Name>
      <Select>SWE0</Select>
    </DeviceGroup>

    <!-- All End-Nodes including Enhanced Port 0 ports on all Switches -->
    <DeviceGroup>
      <Name>AllEndNodes</Name>
      <IncludeGroup>AllFIs</IncludeGroup>
      <IncludeGroup>AllSWE0s</IncludeGroup>
    </DeviceGroup>

    <!-- Both ports in an HFI connected to HFI configuration -->
    <DeviceGroup>
      <Name>HFIDirectConnect</Name>
      <Select>HFIDirectConnect</Select>
    </DeviceGroup>

    <!-- All nodes which have MgmtAllowed set -->
    <DeviceGroup>
      <Name>AllMgmtAllowed</Name>
      <Select>AllMgmtAllowed</Select>
    </DeviceGroup>

    <!-- Just the port running this FM Instance -->
    <DeviceGroup>
      <Name>Self</Name>
      <Select>Self</Select>
    </DeviceGroup>

    <!-- Example using specific device selection -->
    <DeviceGroup>
      <Name>Example</Name>
      <SystemImageGUID>0x123567812345678</SystemImageGUID>
      <NodeGUID>0x123567812345678</NodeGUID>
      <PortGUID>0x123567812345678</PortGUID>
      <NodeDesc>Some Name</NodeDesc>
      <IncludeGroup>AllSWE0s</IncludeGroup>
    </DeviceGroup>

    <!-- Group for all nodes matching wild carded NodeDesc -->
    <DeviceGroup>
      <Name>Rack1DG</Name>
      <NodeDesc>*Rack1*</NodeDesc>
    </DeviceGroup>

                                                                                                                       <!--#SM_0_mt_enable#=-->
    <!-- DeviceGroups found in specified directory, added via opafmconfigpp -->                                        <!--#SM_0_mt_enable#=-->
    <!-- INCLUDE:DG_DIR=/etc/opa-fm/dgs -->                                                                            <!--#SM_0_mt_enable#=-->

  </DeviceGroups>

  <!-- Quality of Service Configuration                                      -->
  <!-- QOSGroups defined here are available for use in all FM instances      -->
  <!-- If any QOSGroup is Enabled, all Enabled VirtualFabrics must           -->
  <!-- specify a <QOSGroup>.                                                 -->
  <!-- Additional QOSGroups may be defined here or per FM instance.          -->
  <QOSGroups>
    <!-- Every QOSGroup must have a unique <Name>                            -->
    <!-- The name must be unique among all QOSGroup names within an          -->
    <!-- FM instance.                                                        -->
    <!-- When defined at Common level, must be unique within all instances.  -->
    <!-- The name is limited to 64 characters and is case sensitive.         -->
    <!-- Enable: <Enable>0</Enable>                                          -->
    <!--        To access a QOSGroup within a VirtualFabric, the QOSGroup    -->
    <!--        Must be enabled. QOSGroups default to Disabled.              -->
    <!-- The following QOS parameters are supported. See VirtualFabrics for  -->
    <!-- more information.                                                   -->
    <!-- High Priority: <HighPriority>0</HighPriority>                       -->
    <!-- Bandwidth Allocation: <Bandwidth>100%</Bandwidth>                   -->
    <!-- Packet Lifetime Multiplier: <PktLifeTimeMult>2</PktLifeTimeMult>    -->
    <!-- Base Service Level: <BaseSL>0</BaseSL>                              -->
    <!-- Multicast Service Level: <MulticastSL>1</MulticastSL>               -->
    <!-- FlowControlDisable: <FlowControlDisable>0</FlowControlDisable>      -->
    <!-- Preemption Rank: <PreemptRank>0</PreemptRank>                       -->
    <!-- HoqLife: <HoqLife>8ms</HoqLife>                                     -->
                                                                                                                       <!--#SM_0_mt_enable#=-->
    <!-- Example Low priority QOS configuration -->                                                                    <!--#SM_0_mt_enable#=-->
    <QOSGroup>                                                                                                         <!--#SM_0_mt_enable#=-->
      <Name>LowPriority</Name>                                                                                         <!--#SM_0_mt_enable#=-->
      <Enable>1</Enable>                                                                                               <!--#SM_0_mt_enable#=-->
      <!--<BaseSL>0</BaseSL> -->                                                                                       <!--#SM_0_mt_enable#=-->
    </QOSGroup>                                                                                                        <!--#SM_0_mt_enable#=-->
                                                                                                                       <!--#SM_0_mt_enable#=-->
    <!-- Example High priority QOS configuration -->                                                                   <!--#SM_0_mt_enable#=-->
    <QOSGroup>                                                                                                         <!--#SM_0_mt_enable#=-->
      <Name>HighPriority</Name>                                                                                        <!--#SM_0_mt_enable#=-->
      <Enable>0</Enable>                                                                                               <!--#SM_0_mt_enable#=-->
      <HighPriority>1</HighPriority>                                                                                   <!--#SM_0_mt_enable#=-->
    </QOSGroup>                                                                                                        <!--#SM_0_mt_enable#=-->
                                                                                                                       <!--#SM_0_mt_enable#=-->
    <!-- Example Networking QOS configuration -->                                                                      <!--#SM_0_mt_enable#=-->
    <QOSGroup>                                                                                                         <!--#SM_0_mt_enable#=-->
      <Name>Networking</Name>                                                                                          <!--#SM_0_mt_enable#=-->
      <Enable>0</Enable>                                                                                               <!--#SM_0_mt_enable#=-->
      <Bandwidth>10%</Bandwidth>                                                                                       <!--#SM_0_mt_enable#=-->
      <FlowControlDisable>0</FlowControlDisable>                                                                       <!--#SM_0_mt_enable#=-->
    </QOSGroup>                                                                                                        <!--#SM_0_mt_enable#=-->
                                                                                                                       <!--#SM_0_mt_enable#=-->
    <!-- default QOS used by VFs created by opafmvf tool -->                                                           <!--#SM_0_mt_enable#=-->
    <QOSGroup>                                                                                                         <!--#SM_0_mt_enable#=-->
      <Name>Tenant_QOS</Name>                                                                                          <!--#SM_0_mt_enable#=-->
      <Enable>1</Enable>                                                                                               <!--#SM_0_mt_enable#=-->
    </QOSGroup>                                                                                                        <!--#SM_0_mt_enable#=-->
  </QOSGroups>

  <!-- Virtual Fabric Configuration                                          -->
  <!-- VirtualFabrics defined here are available for use in all FM instances -->
  <!-- Additional VirtualFabrics may be defined here or per FM instance.     -->
  <!-- VirtualFabrics specified per FM instance will add to                  -->
  <!-- instead of replace these VirtualFabric definitions.                   -->
  <VirtualFabrics>
    <!-- Each VirtualFabric (VF) is comprised of:                            -->
    <!-- 1. one or more Groups of devices                                    -->
    <!-- 2. AND one or more sets of Applications                             -->
    <!-- 3. AND administrator policies                                       -->

    <!-- The Virtual Fabric will control the configuration of Security for   -->
    <!-- the given set of Devices and Applications in the overall Fabric.    -->
    <!-- Default for Security is 0(Off).                                     -->

    <!-- The Applications and DeviceGroups are matched against PathRecord and-->
    <!-- Multicast SA queries so that the returned SLID/DLID, PKey, SL, etc  -->
    <!-- are consistent with the policies established for the VirtualFabric. -->
    <!-- Devices in a DeviceGroup but not found in the fabric are ignored.   -->

    <!-- Every VirtualFabric must have a unique <Name>                       -->
    <!-- The name must be unique among all VirtualFabric names within an     -->
    <!-- FM instance.                                                        -->
    <!-- When defined at Common level must be unique within all instances.   -->
    <!-- The name is limited to 64 characters and is case sensitive.         -->

    <!-- Devices are specified by DeviceGroup Name in the following ways in  -->
    <!-- the VirtualFabric section:                                          -->
    <!-- As Full Members: <Member>group_name</Member>                        -->
    <!--        such devices may talk to any other Member or LimitedMember   -->
    <!-- As Limited Members: <LimitedMember>group_name</LimitedMember>       -->
    <!--        When Security is 1 (On), LimitedMembers are not permitted    -->
    <!--        to talk to other LimitedMembers.                             -->
    <!--        However LimitedMembers can always talk to Members.           -->
    <!--        If Security is 0 (Off) LimitedMembers are treated the same   -->
    <!--        as Members                                                   -->
    <!--        This allows the user to easily turn off Security for a       -->
    <!--        Virtual Fabric without changing the rest of the definition.  -->
    <!--        When Security is on, LimitedMembers will not be able to      -->
    <!--        join multicast groups in the VirtualFabric.                  -->
    <!-- Member and LimitedMember can each be specified more than once per   -->
    <!-- VirtualFabric if desired.                                           -->
    <!-- If a Device is in both the Members and LimitedMembers DeviceGroups, -->
    <!-- they will be treated as Members.                                    -->
    <!-- This allows All to be specified as a LimitedMember, then selected   -->
    <!-- Members can be specified.  Hence insuring the VirtualFabric         -->
    <!-- includes All devices while allowing a limited set of Members.       -->

    <!-- Applications are specified by Application Name via:                 -->
    <!-- <Application>application_name</Application>                         -->
    <!-- Application can be specified more than once per VirtualFabric if    -->
    <!-- desired.                                                            -->

    <!-- The following Administrator Policies and Controls can be specified: -->
    <!-- Enable/Disable: <Enable>1</Enable>                                  -->
    <!--        When Disabled (0) the VirtualFabric is ignored.              -->
    <!--        This allows the user to easily disable a VirtualFabric       -->
    <!--        without deleting it's definition.                            -->
    <!-- Security: <Security>1</Security>                                    -->
    <!--        When On (1) the FM will provide security within this VF      -->
    <!--        and between other VFs.                                       -->
    <!--        When On, LimitedMembers cannot talk to each other in the VF. -->
    <!--        When Off (0) the FM is free to manage Routes and PKeys as    -->
    <!--        it chooses and there are no guarantees.                      -->
    <!--        When Off (0) LimitedMembers can talk to each other in the VF.-->
    <!-- Partition Key: <PKey>0x1234</PKey>                                  -->
    <!--        By default the FM will pick an available PKey.               -->
    <!--        However if desired a user selected PKey can be specified.    -->
    <!--        Specification may be necessary such that it is known apriori -->
    <!--        for applications which do not use SA PathRecord queries,     -->
    <!--        such as MPIs which use non-OFA compliant mechanisms for job  -->
    <!--        startup.                                                     -->
    <!--        The PKey is a 15 bit value, ranging from 0x1 to 0x7fff.      -->
    <!--        The FM will use the appropriate high bit based on the        -->
    <!--        Security and Member/LimitedMember status per device.         -->
    <!-- Max MTU: <MaxMTU>2048</MaxMTU>                                      -->
    <!--        Maximum MTU for SM to return in any PathRecord or            -->
    <!--        Multicast group for the VirtualFabric.                       -->
    <!--        Actual values may be further reduced by Hardware             -->
    <!--        capabilities or if the PathRecord or Multicast group is      -->
    <!--        requested to have a smaller MTU.                             -->
    <!--        However, SM will consider it an error to create a Multicast  -->
    <!--        group with MTU larger than that of the VirtualFabric.        -->
    <!--        Value should be one of 2048, 4096, 8192, 10240, or Unlimited -->
    <!--        If not specified the default MaxMTU will be Unlimited.       -->
    <!-- Max Rate: <MaxRate>100g</MaxRate>                                   -->
    <!--        Maximum static rate for SM to return in any PathRecord or    -->
    <!--        Multicast group for the VirtualFabric.                       -->
    <!--        Similar behaviors to MaxMTU.                                 -->
    <!--        Value should be one of 25g, 50g, 75g, 100g, or Unlimited.    -->
    <!--        If not specified the default MaxRate will be Unlimited.      -->
    <!-- Active/Standby: <Standby>0</Standby>                                -->
    <!--        A Virtual Fabric in Standby cannot pass traffic.             -->
    <!--        The active/standby state of a Virtual Fabric can be          -->
    <!--        changed dynamically (without restarting the FM).             -->
    <!--        Defaults to active (0).                                      -->

    <!-- QOS settings                                                        -->
    <!-- QOS Enable: <QOS>0</QOS>                                            -->
    <!--        0=disable, 1=enable, if 0 the QOS settings are ignored       -->
    <!-- High Priority: <HighPriority>0</HighPriority>                       -->
    <!--        If set to one, this indicates high priority traffic which    -->
    <!--        does not require any bandwidth limiting. This would          -->
    <!--        typically include management or control traffic which is low -->
    <!--        bandwidth, but critical to process in a timely manner.       -->
    <!--        An example is PM traffic where there is no reason to         -->
    <!--        restrict bandwidth since it is low volume, but it needs to   -->
    <!--        be serviced at a high priority.                              -->
    <!--        When priority is set to High, any bandwidth allocation is    -->
    <!--        ignored for this Virtual Fabric.                             -->
    <!-- Bandwidth Allocation: <Bandwidth>100%</Bandwidth>                   -->
    <!--        0-100%   This is the minimum percentage of bandwidth which   -->
    <!--        should be given to this Virtual Fabric relative to other low -->
    <!--        priority Virtual Fabrics.  When there is no contention, this -->
    <!--        Virtual Fabric could get more than this amount.              -->
    <!--        If unspecified, the SM evenly distributes remaining          -->
    <!--        bandwidth among all the Virtual Fabrics with unspecified     -->
    <!--        Bandwidth.                                                   -->
    <!--        Total Bandwidth cannot exceed 95% for enabled Virtual        -->
    <!--        Fabrics with QoS enabled when there is at least 1            -->
    <!--        enabled VF with QoS disabled.                                -->
    <!--        Total Bandwidth cannot exceed 100% for enabled Virtual       -->
    <!--        Fabrics.  VFs with QoS disabled share at least 5% BW and     -->
    <!--        all QoS enabled VFs require at least 1% BW.                  -->
    <!--        If HighPriority is specified, this field is ignored.         -->
    <!-- Packet Lifetime Multiplier: <PktLifeTimeMult>2</PktLifeTimeMult>    -->
    <!--        Amount to multiply PktLifeTime by when reported by SM for    -->
    <!--        this Virtual Fabric.                                         -->
    <!--        This can permit PktLifeTime in PathRecords (and hence end to -->
    <!--        end timeouts) to account for delays in Low Priority Virtual  -->
    <!--        Fabrics which are given low bandwidth allocations.           -->
    <!--        Value will be rounded up to the next power of 2.             -->
    <!--        0 is invalid, default is 1                                   -->
    <!-- Service Levels:                                                     -->
    <!--        Up to 2 service levels can be specified per VF: BaseSL,      -->
    <!--        and MulticastSL. If the configuration does not include       -->
    <!--        either of these service levels, the SM will allocate         -->
    <!--        unique SLs from the unused SLs. The SM will only allocate    -->
    <!--        SLs required by the VF. If QoS is disabled on the VF, any    -->
    <!--        configured SLs will be ignored. All QoS disabled VFs share   -->
    <!--        the same SLs.                                                -->
    <!-- Base Service Level: <BaseSL>0</BaseSL>                              -->
    <!--        Used for unicast traffic, and multicast traffic              -->
    <!--        (if MulticastSL is not specified).                           -->
    <!--        Valid values: 0-15                                           -->
    <!-- Multicast Service Level: <MulticastSL>1</MulticastSL>               -->
    <!--        Used to isolate Multicast traffic from other traffic. Some   -->
    <!--        routing algorithms may require a separate MulticastSL for    -->
    <!--        VFs with multicast groups. Any SL used to isolate Multicast  -->
    <!--        cannot be used as a BaseSL in any VF.                        -->
    <!--        Valid values: 0-15                                           -->
    <!-- FlowControlDisable: <FlowControlDisable>0</FlowControlDisable>      -->
    <!--        By default, the fabric uses link level flow control.         -->
    <!--        When link layer flow control has been disabled, packets will -->
    <!--        be discarded by that VL when there are insufficient credits. -->
    <!--        Disabling flow control for a vFabric can affect traffic on   -->
    <!--        VLs shared with other vFabrics, so the user is generally     -->
    <!--        advised not to disable flow control without care.            -->
    <!-- Preemption Rank: <PreemptRank>0</PreemptRank>                       -->
    <!--        See SM Common / Instance - Fabric Programming for detailed   -->
    <!--        description of preemption configuration.                     -->
    <!--        Preemption capability can be configured per Virtual Fabric   -->
    <!--        in terms of a rank, which is a value ranging from 0 to 127.  -->
    <!--        Rank 0 indicates that this VF cannot preempt nor be          -->
    <!--        preempted.  Ranks of a higher value can preempt ranks of     -->
    <!--        a lower value (except ranks of 0)                            -->
    <!--        If QOS is disabled then preemption is disabled and the rank  -->
    <!--        is 0.                                                        -->
    <!-- HoqLife:                                                            -->
    <!--        This timeout is specified per SM instance and may be         -->
    <!--        overridden per Virtual Fabric.  See SM instance              -->
    <!--        representation for detailed configuration options. If not    -->
    <!--        specified per Virtual Fabric, default to the SM instance     -->
    <!--        values                                                       -->

    <!-- Alternatively, a VirtualFabric can specify a QOSGroup instead of    -->
    <!-- individual QOS parameters.                                          -->
    <!-- QOSGroup: <QOSGroup>LowPriority</QOSGroup>                          -->
    <!--        Specifies the name of the QOSGroup used by this VF.          -->
    <!--        If any QOSGroup is enabled, all VirtualFabrics must          -->
    <!--        specify a QOSGroup and no VirtualFabric may specify          -->
    <!--        any other QOS parameter.                                     -->
    <!--        If a VirtualFabric specifies a QOSGroup, it must             -->
    <!--        also specify a PKey.                                         -->

    <!-- OPA requires a "Admin" partition.                                   -->
    <!-- To meet this requirement there must be an enabled VirtualFabric:    -->
    <!-- *  with a PKey of 0x7fff (or 0xffff)                                -->
    <!-- *  it must include the SA Application                               -->
    <!-- *  it must be the only enabled VF which includes the SA Application -->
    <!-- *  it must have All as a Member or LimitedMember                    -->
    <!-- *  as desired it may have additional Applications                   -->
    <!-- *  as desired it may have additional DeviceGroups as Member         -->
    <!-- *  all other VF policies (Security, MTU ...) may be set as desired  -->

    <!-- Some predefined VirtualFabrics follow.  These are also a good set   -->
    <!-- of examples to cut/paste to make other site specific VFs:           -->

    <!-- An example networking VF.  When IPoIB runs, it will use the         -->
    <!-- 1st PKey on the given Port for the default (ib0 ...) network device -->
    <!-- Hence its best to place the Networking/IPoIB VF 1st.                -->
    <!-- For additional IPoIB subnets which a node participates in, the PKey -->
    <!-- needs to be manually specified to IPoIB as a "ipoib vlan"           -->
    <VirtualFabric>
      <Name>Networking</Name>
      <Enable>0</Enable>
      <PKey>0x0002</PKey>
      <Security>1</Security>
      <QOS>1</QOS>                                                                                                     <!--#SM_0_mt_enable#!-->
      <Bandwidth>10%</Bandwidth>                                                                                       <!--#SM_0_mt_enable#!-->
      <FlowControlDisable>0</FlowControlDisable>                                                                       <!--#SM_0_mt_enable#!-->
      <QOSGroup>Networking</QOSGroup>                                                                                  <!--#SM_0_mt_enable#=-->
      <Member>All</Member>   <!-- can use a smaller DeviceGroup if desired -->
      <!-- Since IPoIB uses Multicast, LimitedMembers wouldn't make sense -->
      <Application>Networking</Application>
    </VirtualFabric>
                                                                                                                       <!--#SM_0_mt_enable#!-->
    <!-- A default VF with all Devices and Applications -->                                                            <!--#SM_0_mt_enable#!-->
    <!-- This is the default Virtual Fabric config -->                                                                 <!--#SM_0_mt_enable#!-->
    <VirtualFabric>                                                                                                    <!--#SM_0_mt_enable#!-->
      <Name>Default</Name>                                                                                             <!--#SM_0_mt_enable#!-->
      <Enable>1</Enable>                                                                                               <!--#SM_0_mt_enable#!-->
      <PKey>0x0001</PKey>                                                                                              <!--#SM_0_mt_enable#!-->
      <Security>0</Security>                                                                                           <!--#SM_0_mt_enable#!-->
      <QOS>0</QOS>                                                                                                     <!--#SM_0_mt_enable#!-->
      <Member>All</Member>                                                                                             <!--#SM_0_mt_enable#!-->
      <Application>AllOthers</Application>                                                                             <!--#SM_0_mt_enable#!-->
      <MaxMTU>Unlimited</MaxMTU>                                                                                       <!--#SM_0_mt_enable#!-->
      <MaxRate>Unlimited</MaxRate>                                                                                     <!--#SM_0_mt_enable#!-->
    </VirtualFabric>                                                                                                   <!--#SM_0_mt_enable#!-->

    <!-- The Admin partition -->
    <!-- This gives non-SMs limited privileges -->
    <VirtualFabric>
      <Name>Admin</Name>
      <Enable>1</Enable>
      <PKey>0x7fff</PKey> <!-- must be OPA Management PKey -->
      <Security>1</Security>
      <QOS>0</QOS>                                                                                                     <!--#SM_0_mt_enable#!-->
      <!-- <HighPriority>1</HighPriority> can make admin High priority -->                                             <!--#SM_0_mt_enable#!-->
      <QOSGroup>LowPriority</QOSGroup>                                                                                 <!--#SM_0_mt_enable#=-->
      <!-- <QOSGroup>HighPriority</QOSGroup> can make admin High priority -->                                          <!--#SM_0_mt_enable#=-->
      <Member>HFIDirectConnect</Member> <!-- Both HFIs directly connected -->
      <Member>AllMgmtAllowed</Member>
      <Member>AllSWE0s</Member> <!-- so chassis CMU can access leafs & spines-->
      <!-- <Member>AdminNodes</Member> add more FF/admin nodes if desired -->
      <LimitedMember>All</LimitedMember>
      <Application>SA</Application>
      <Application>PA</Application>
      <Application>PM</Application>
      <!-- add other applications if desired -->
      <!-- <MaxMTU>2048</MaxMTU> can reduce MTU, SA only uses MADs -->
    </VirtualFabric>

    <!-- VirtualFabrics found in specified directory, added via opafmconfigpp -->                                      <!--#SM_0_mt_enable#=-->
    <!-- INCLUDE:VF_DIR=/etc/opa-fm/vfs -->                                                                            <!--#SM_0_mt_enable#=-->

    <!-- This vFabric can be used as a simple catchall.  When none of the -->                                          <!--#SM_0_mt_enable#!-->
    <!-- other enabled vFabrics include the "All" Application, this will -->                                           <!--#SM_0_mt_enable#!-->
    <!-- pick up the remaining applications.  This is also very useful when -->                                        <!--#SM_0_mt_enable#!-->
    <!-- uncertain about how to identify applications of interest such as -->                                          <!--#SM_0_mt_enable#!-->
    <!-- storage devices or file systems with undocumented Service IDs -->                                             <!--#SM_0_mt_enable#!-->
    <VirtualFabric>                                                                                                    <!--#SM_0_mt_enable#!-->
      <Name>AllOthers</Name>                                                                                           <!--#SM_0_mt_enable#!-->
      <Enable>0</Enable>                                                                                               <!--#SM_0_mt_enable#!-->
      <Security>1</Security>                                                                                           <!--#SM_0_mt_enable#!-->
      <QOS>1</QOS>                                                                                                     <!--#SM_0_mt_enable#!-->
      <Bandwidth>20%</Bandwidth>                                                                                       <!--#SM_0_mt_enable#!-->
      <Member>All</Member>    <!-- can be reduced in scope if desired -->                                              <!--#SM_0_mt_enable#!-->
      <Application>AllOthers</Application>                                                                             <!--#SM_0_mt_enable#!-->
    </VirtualFabric>                                                                                                   <!--#SM_0_mt_enable#!-->
                                                                                                                       <!--#SM_0_mt_enable#!-->
    <!-- a template for a storage Virtual Fabric -->                                                                   <!--#SM_0_mt_enable#!-->
    <!-- This vFabric can be used for Lustre traffic.  The PKey field should -->                                       <!--#SM_0_mt_enable#!-->
    <!-- be specified to map Lustre traffic.  The CMA in OFA currently -->                                             <!--#SM_0_mt_enable#!-->
    <!-- specifies the PKey and ServiceID in the path record query.  The CMA -->                                       <!--#SM_0_mt_enable#!-->
    <!-- requires that the PKey match the PKey for networking traffic -->                                              <!--#SM_0_mt_enable#!-->
    <!-- (IPoIB). When setting up this vFabric the PKey should be configured -->                                       <!--#SM_0_mt_enable#!-->
    <!-- to be identical to the PKey used for IPoIB.  For example if the -->                                           <!--#SM_0_mt_enable#!-->
    <!-- Default VF is used for IPoIB, the PKey of the Default VF and the -->                                          <!--#SM_0_mt_enable#!-->
    <!-- PKey of the Storage VF should match. In addition, either the -->                                              <!--#SM_0_mt_enable#!-->
    <!-- <Security> should be disabled OR the VF should be changed from -->                                            <!--#SM_0_mt_enable#!-->
    <!-- <LimitedMember> to <Member>. -->                                                                              <!--#SM_0_mt_enable#!-->
    <VirtualFabric>                                                                                                    <!--#SM_0_mt_enable#!-->
      <Name>Storage</Name>                                                                                             <!--#SM_0_mt_enable#!-->
      <Enable>0</Enable>                                                                                               <!--#SM_0_mt_enable#!-->
      <Security>1</Security>                                                                                           <!--#SM_0_mt_enable#!-->
      <QOS>1</QOS>                                                                                                     <!--#SM_0_mt_enable#!-->
      <Bandwidth>20%</Bandwidth>                                                                                       <!--#SM_0_mt_enable#!-->
      <!-- <Member>group_with_storage_targets</Member> -->                                                             <!--#SM_0_mt_enable#!-->
      <LimitedMember>All</LimitedMember>                                                                               <!--#SM_0_mt_enable#!-->
      <Application>Storage</Application>                                                                               <!--#SM_0_mt_enable#!-->
      <!-- <PreemptRank>1</PreemptRank> others can preempt this vf -->                                                 <!--#SM_0_mt_enable#!-->
    </VirtualFabric>                                                                                                   <!--#SM_0_mt_enable#!-->
                                                                                                                       <!--#SM_0_mt_enable#!-->
    <!-- a template for a compute Virtual Fabric -->                                                                   <!--#SM_0_mt_enable#!-->
    <!-- QOS is configured for utilization of 70% of the bandwidth for MPI -->                                         <!--#SM_0_mt_enable#!-->
    <VirtualFabric>                                                                                                    <!--#SM_0_mt_enable#!-->
      <Name>Compute</Name>                                                                                             <!--#SM_0_mt_enable#!-->
      <Enable>0</Enable>                                                                                               <!--#SM_0_mt_enable#!-->
      <PKey>0x0003</PKey> <!-- manually specify so can supply to MPI -->                                               <!--#SM_0_mt_enable#!-->
      <Security>1</Security>                                                                                           <!--#SM_0_mt_enable#!-->
      <QOS>1</QOS>                                                                                                     <!--#SM_0_mt_enable#!-->
      <Bandwidth>70%</Bandwidth>                                                                                       <!--#SM_0_mt_enable#!-->
      <!-- <Member>compute_nodes</Member> -->                                                                          <!--#SM_0_mt_enable#!-->
      <Member>All</Member>    <!-- can be reduced in scope if desired -->                                              <!--#SM_0_mt_enable#!-->
      <!-- if using the PSM vFabric examples below, use VerbsMPI not Compute -->                                       <!--#SM_0_mt_enable#!-->
      <Application>Compute</Application>                                                                               <!--#SM_0_mt_enable#!-->
      <!-- <Application>VerbsMPI</Application> -->                                                                     <!--#SM_0_mt_enable#!-->
      <!-- <PreemptRank>127</PreemptRank> can preempt all others -->                                                   <!--#SM_0_mt_enable#!-->
      <!-- <HoqLife>8ms</HoqLife> Override SM instance value -->                                                       <!--#SM_0_mt_enable#!-->
    </VirtualFabric>                                                                                                   <!--#SM_0_mt_enable#!-->
                                                                                                                       <!--#SM_0_mt_enable#!-->
    <!-- when using Intel OmniPath Fabric HFIs with PSM technology,-->                                                 <!--#SM_0_mt_enable#!-->
    <!-- there is no need to configure PKey nor SL. FM can freely select -->                                           <!--#SM_0_mt_enable#!-->
    <!-- since PSM will query the SA using the PSM ServiceIds when -->                                                 <!--#SM_0_mt_enable#!-->
    <!-- PSM_PATH_REC="opp" -->                                                                                        <!--#SM_0_mt_enable#!-->
    <VirtualFabric>                                                                                                    <!--#SM_0_mt_enable#!-->
      <Name>PSM_Compute</Name>                                                                                         <!--#SM_0_mt_enable#!-->
      <Enable>0</Enable>                                                                                               <!--#SM_0_mt_enable#!-->
      <Security>1</Security>                                                                                           <!--#SM_0_mt_enable#!-->
      <QOS>1</QOS>                                                                                                     <!--#SM_0_mt_enable#!-->
      <Bandwidth>70%</Bandwidth>                                                                                       <!--#SM_0_mt_enable#!-->
      <!-- <Member>compute_nodes</Member> -->                                                                          <!--#SM_0_mt_enable#!-->
      <Member>All</Member>    <!-- can be reduced in scope if desired -->                                              <!--#SM_0_mt_enable#!-->
      <Application>PSM</Application>                                                                                   <!--#SM_0_mt_enable#!-->
    </VirtualFabric>                                                                                                   <!--#SM_0_mt_enable#!-->
                                                                                                                       <!--#SM_0_mt_enable#!-->
    <!-- when using PSM, Control and Data traffic can be separated into -->                                            <!--#SM_0_mt_enable#!-->
    <!-- different vFabrics. -->                                                                                       <!--#SM_0_mt_enable#!-->
    <!-- To do this, PSM must be run with PSM_PATH_REC="opp" -->                                                       <!--#SM_0_mt_enable#!-->
    <!-- Then enable these two VFs instead of the MPI Compute ones above -->                                           <!--#SM_0_mt_enable#!-->
    <VirtualFabric>                                                                                                    <!--#SM_0_mt_enable#!-->
      <Name>PSM_Compute_Control</Name>                                                                                 <!--#SM_0_mt_enable#!-->
      <Enable>0</Enable>                                                                                               <!--#SM_0_mt_enable#!-->
      <Security>1</Security>                                                                                           <!--#SM_0_mt_enable#!-->
      <QOS>1</QOS>                                                                                                     <!--#SM_0_mt_enable#!-->
      <HighPriority>1</HighPriority> <!-- admin traffic is High priority -->                                           <!--#SM_0_mt_enable#!-->
      <!-- <Member>compute_nodes</Member> -->                                                                          <!--#SM_0_mt_enable#!-->
      <Member>All</Member>    <!-- can be reduced in scope if desired -->                                              <!--#SM_0_mt_enable#!-->
      <Application>PSM_Control</Application>                                                                           <!--#SM_0_mt_enable#!-->
    </VirtualFabric>                                                                                                   <!--#SM_0_mt_enable#!-->
                                                                                                                       <!--#SM_0_mt_enable#!-->
    <VirtualFabric>                                                                                                    <!--#SM_0_mt_enable#!-->
      <Name>PSM_Compute_Data</Name>                                                                                    <!--#SM_0_mt_enable#!-->
      <Enable>0</Enable>                                                                                               <!--#SM_0_mt_enable#!-->
      <Security>1</Security>                                                                                           <!--#SM_0_mt_enable#!-->
      <QOS>1</QOS>                                                                                                     <!--#SM_0_mt_enable#!-->
      <Bandwidth>70%</Bandwidth>                                                                                       <!--#SM_0_mt_enable#!-->
      <!-- <Member>compute_nodes</Member> -->                                                                          <!--#SM_0_mt_enable#!-->
      <Member>All</Member>    <!-- can be reduced in scope if desired -->                                              <!--#SM_0_mt_enable#!-->
      <Application>PSM_Data</Application>                                                                              <!--#SM_0_mt_enable#!-->
    </VirtualFabric>                                                                                                   <!--#SM_0_mt_enable#!-->
  </VirtualFabrics>

  <!-- PM Port Group Configuration -->
  <!-- PM Port Groups allow the PM to gather and consolidate statistics for -->
  <!-- the specified set of devices.  In addition, the PM will always have -->
  <!-- the All, HFIs and SWs groups. -->
  <!-- PM Port Groups defined here are available for use in all FM instances -->
  <!-- Additional PmPortGroups may be defined here or per FM instance. -->
  <!-- PmPortGroups specified per FM instance will add to -->
  <!-- instead of replace these PmPortGroup definitions. -->
  <PmPortGroups>
    <!-- Each PMPortGroup is comprised of: -->
    <!-- 1. a name -->
    <!-- 2. AND one or more sets of DeviceGroups to be monitored -->
    <!-- 3. AND an enable/disable flag -->

    <!-- All ports providing a Device Management Agent, typically IO devices -->
    <PmPortGroup>
      <Name>TFIs</Name>
      <Monitor>AllTFIs</Monitor>
      <Enable>0</Enable>
    </PmPortGroup>

    <!-- All ports on Fabric Interfaces, includes HFIs and TFIs -->
    <PmPortGroup>
      <Name>AllFIs</Name>
      <Monitor>AllFIs</Monitor>
      <Enable>0</Enable>
    </PmPortGroup>

    <!-- All ports in rack 1 as per DG -->
    <PmPortGroup>
      <Name>Rack1PG</Name>
      <Monitor>Rack1DG</Monitor>
      <Enable>0</Enable>
    </PmPortGroup>
  </PmPortGroups>

  <!-- Shared Common config, applies to all components: SM, PM and FE -->
  <!-- Most of the parameters below can also be set per component if needed -->
  <Shared>
    <!-- Configure maximum number of times an FM component can be restarted -->
    <!-- after running less then StartupStableWait minutes before terminating the opafm service. -->
    <StartupRetries>5</StartupRetries>
    <!-- Amount of time in minutes before an instance is considered -->
    <!-- successfully started and stable. -->
    <StartupStableWait>10</StartupStableWait>
    <!-- Max FI Ports, estimates switches assuming optimal Fat Tree. -->
    <!-- Increase if non-optimal Fat Tree. -->
    <!-- For ESM this will be automatically adjusted to ESM maximum -->
    <SubnetSize>9216</SubnetSize>                                                                                      <!--SUBNET_SIZE:dec-->

    <!-- Core file generation options to aid debug of Host FM crashes -->
    <!-- Max core size in bytes or unlimited,  Suffix of K, M or G should -->
    <!-- be used to define larger limits. -->
    <!-- values less than 8192 are treated as Megabytes -->
    <!-- This sets the linux core dump soft ulimit for the FM.  Hard ulimit -->
    <!-- for root user on system must be appropriately set to permit this. -->
    <!-- Default CoreDumpLimit is 10 GB -->
    <CoreDumpLimit>10G</CoreDumpLimit>
    <!-- Directory for Host FM core files -->
    <!-- Actual core filenames will be controlled by linux kernel config. -->
    <!-- The parent directory (/var/crash in default) must be pre-created. -->
    <CoreDumpDir>/var/crash/opafm</CoreDumpDir>

    <!-- Priority and Elevated Priority control failover for SM, PM. -->
    <!-- Priority is used during initial negotiation, higher Priority wins. -->
    <!-- ElevatedPriority is assumed by winning master, this can prevent -->
    <!-- fallback when previous master comes back on line.  -->
    <Priority>0</Priority> <!-- 0 to 15, higher wins -->
    <ElevatedPriority>0</ElevatedPriority> <!-- 0 to 15, higher wins -->

    <!-- Sets log level option for SM, PM and FE -->
    <!-- 0 = disable vast majority of logging output -->
    <!-- 1 = fatal, error, warn (syslog CRIT, ERR, WARN)-->
    <!-- 2 = +notice, progress (syslog NOTICE, INFO) -->
    <!-- 3 = +INFO (syslog DEBUG) -->
    <!-- 4 = +VERBOSE and some packet data (syslog DEBUG) -->
    <!-- 5 = debug1 and debug2 trace info (syslog DEBUG) -->
    <!-- 6 = debug3 and debug4 trace info (syslog DEBUG) -->
    <!-- 7 = +function trace info (syslog DEBUG) -->
    <!-- For ESM corresponding Chassis Logging must also be enabled -->
    <!-- and Sm config applies to all managers. -->
    <LogLevel>2</LogLevel>

    <!-- Sets log output location for SM, PM and FE -->
    <!-- By default log output is done via syslog.  However if a LogFile -->
    <!-- is specified, logging will be done to the given file. -->
    <!-- LogMode further controls logging -->
    <!-- ESM does not support LogFile -->
    <!-- <LogFile>/var/log/fm.log</LogFile> --> <!-- log for all instances -->

    <!-- Controls mode for logging by SM, PM and FE -->
    <!-- low 2 bits control logging as follows: -->
    <!-- Low Bit (0/1): -->
    <!--    0 - use normal logging levels -->
    <!--    1 - logging is quieted by downgrading the majority of -->
    <!--        fatal, error, warn and progress log messages to level -->
    <!--        3 (INFO) and only outputting user actionable events when -->
    <!--        LogLevel is 1 or 2. -->
    <!-- Next Bit (0/2) (only affects logging when LogFile specified): -->
    <!--    0 - user actionable events go to syslog and LogFile -->
    <!--    2 - when LogFile specified, nothing goes to syslog -->
    <!-- ESM does not support LogMode -->
    <LogMode>0</LogMode>                                                                                               <!--SYSLOG_MODE:dec-->

    <!-- Controls the Syslog Facility for SM, PM and FE -->
    <!-- Can be: auth, authpriv, cron, daemon, ftp, kern, local0-local7, -->
    <!-- lpr, mail, news, syslog, user, or uucp -->
    <!-- ESM does not support SyslogFacility, select via chassis Logging -->
    <SyslogFacility>local6</SyslogFacility>


    <!-- OpenSSL FE network security parameters  -->
    <SslSecurityEnable>1</SslSecurityEnable>                                                                           <!--FE_0_ssl_security_enable:dec==1-->
    <SslSecurityDir>/usr/local/ssl/opafm</SslSecurityDir>
    <SslSecurityFmCertificate>fm_cert.pem</SslSecurityFmCertificate>
    <SslSecurityFmPrivateKey>fm_key.pem</SslSecurityFmPrivateKey>
    <SslSecurityFmCaCertificate>fm_ca_cert.pem</SslSecurityFmCaCertificate>
    <SslSecurityFmCertChainDepth>1</SslSecurityFmCertChainDepth>
    <SslSecurityFmDHParameters>fm_dh_parms.pem</SslSecurityFmDHParameters>
    <SslSecurityFmCaCRLEnable>0</SslSecurityFmCaCRLEnable>
    <SslSecurityFmCaCRL>fm_ca_crl.pem</SslSecurityFmCaCRL>

    <!-- Additional parameters for debug/development use -->
    <Debug>0</Debug> <!-- debug mode for SM, PM and FE -->
    <RmppDebug>0</RmppDebug> <!-- RMPP debug messages for SA, PM and FE -->

    <!-- Alternative to use of LogLevel.  Use of LogLevel recommended. -->
    <!-- For each subsystem there can be a LogMask.  The mask selects -->
    <!-- severities of log messages to enable: --> 
    <!-- 0x1=fatal, 0x2=actionable error, 0x4=actionable warning, -->
    <!-- 0x8=actionable notice, 0x10=actionable info, 0x20=error, 0x40=warn, -->
    <!-- 0x80=notice, 0x100=progress, 0x200=info, 0x400=verbose, 0x800=data, -->
    <!-- 0x1000=debug1, 0x2000=debug2, 0x4000=debug3, 0x8000=debug4 -->
    <!-- 0x10000=func call, 0x20000=func args, 0x40000=func exit, -->
    <!-- For Host SM, the Linux syslog service will need to have an -->
    <!-- appropriate level of logging enabled. -->
    <!-- For ESM corresponding Chassis Logging must also be enabled -->
    <!-- and Sm config applies to all managers. -->
    <!-- <CS_LogMask>0x00000000</CS_LogMask> -->
    <!-- <MAI_LogMask>0x000001ff</MAI_LogMask> -->
    <!-- <CAL_LogMask>0x000001ff</CAL_LogMask> -->
    <!-- <DVR_LogMask>0x000001ff</DVR_LogMask> -->
    <!-- <IF3_LogMask>0x000001ff</IF3_LogMask> -->
    <!-- <SM_LogMask>0x000001ff</SM_LogMask> -->
    <!-- <SA_LogMask>0x000001ff</SA_LogMask> -->
    <!-- <PM_LogMask>0x000001ff</PM_LogMask> -->
    <!-- <PA_LogMask>0x000001ff</PA_LogMask> -->
    <!-- <FE_LogMask>0x000001ff</FE_LogMask> -->
    <!-- <APP_LogMask>0x000001ff</APP_LogMask> -->
    
    <!-- Controls the Configuration Consistency Check for SM, and PM -->
    <!-- Setting can be completely disabled, or can be set to take action -->
    <!-- by deactivating Standby SM or PM if configuration does not -->
    <!-- pass the consistency check criteria. The default level is 2 -->
    <!-- 1 = enable Configuration Consistency Checking without taking action -->
    <!--     only logs a message when a consistency mismatch is detected  -->
    <!--     this is a debug option not recommended for typical use -->
    <!-- 2 = enable Configuration Consistency Checking and take action -->
    <!--      (log message and move standby to inactive state) -->
    <!-- This parameter cannot be overridden in the SM or PM section. -->
    <!-- <ConfigConsistencyCheckLevel>2</ConfigConsistencyCheckLevel> -->
        
  </Shared>

  <!-- Common SM (Subnet Manager) attributes -->
  <Sm>
    <!-- ESM does not support Start via XML configuration. Use CLI commands -->
    <Start>1</Start> <!-- default SM startup for all instances -->
    <!-- SM restart parameters can be configured separately; overrides Common.Shared settings -->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
    <!-- *************** SM Redundancy **************************** -->
    <!-- MasterPingInterval is the interval secondary SM pings master. -->
    <!-- Ping must fail MasterPingMaxFail times before secondary takes over. -->
    <!-- Secondary SMs will synchronize their fabric database with the -->
    <!-- master at DbSyncInterval -->
    <MasterPingInterval>5</MasterPingInterval> <!-- in seconds -->                                                     <!--SM_0_master_ping_interval:dec-->
    <MasterPingMaxFail>3</MasterPingMaxFail>                                                                           <!--SM_0_master_ping_max_fail:dec-->
    <DbSyncInterval>15</DbSyncInterval> <!-- in minutes, 0-> off -->                                                   <!--SM_0_dbsync_interval:dec-->

    <!-- ********************* Fabric Routing **************************** -->
    <!-- The following Routing Algorithms are supported                    -->
    <!-- shortestpath - pick shortest path and balance lids on ISLs        -->
    <!-- fattree -  A variation of shortestpath with better balancing      -->
    <!--            and improved SM performance on fat tree-like fabrics.  -->
    <!--            See section <FatTreeTopology> below.                   -->
    <!-- dgshortestpath - A variation of shortestpath that uses the        -->
    <!--            RoutingOrder parameter to control the order in which   -->
    <!--            switch egress ports are assigned to LIDs being routed  -->
    <!--            through the fabric. This can provide a better balance  -->
    <!--            of traffic through fabrics with multiple types of end  -->
    <!--            nodes.                                                 -->
    <!--            See the <DGShortestPathTopology> section, below, for   -->
    <!--            more information.                                      -->
    <!-- dor -      Dimension ordered routing for use with mesh and torus  -->
    <!--            topologies cabled in port-to-dimension order.          -->
    <!--            See the <MeshTorusTopology> section below for more     -->
    <!--            information. (Intel Technical Preview)                 -->
    <!-- hypercube - A variation of dg shortest path for enhanced          -->
    <!--            hypercube and mesh topologies.  See section            -->
    <!--            <HypercubeTopology> below. (Supported via 3rd parties) -->
    <RoutingAlgorithm>shortestpath</RoutingAlgorithm>

    <!-- SpineFirstRouting - An option to avoid credit loops in complex    -->
    <!--            fabrics using Intel Switches.                          -->
    <!--            Given equal length routes, this option routes through  -->
    <!--            director class switches spine first. This avoids       -->
    <!--            credit loops caused by routing via edge/leaf switches  -->
    <!--            instead of spines.                                     -->
    <SpineFirstRouting>1</SpineFirstRouting>                                                                           <!--SM_0_spine_first_routing:dec-->

    <!-- LID Mask Control: The LMC parameter provides a method for assigning multiple -->
    <!-- LIDs to a single physical port, allowing the SM to configure the fabric with -->
    <!-- multiple routes between each end node port, it further helps applications to -->
    <!-- load balance traffic. This permits selected applications (such as MPIs using -->
    <!-- Intel(R) PSM) to optimize performance and/or resiliency by using dispersive  -->
    <!-- routing. Default 0 assigns 1 LID per HFI. LMC is used for Failover/Redundant -->
    <!-- Routing and for Dispersive Routing. -->
    <Lmc>0</Lmc>  <!-- assign 2^lmc LIDs to all FIs (Lmc can be 0-7) -->                                               <!--SM_0_lmc:dec-->
    <!-- LID Mask Control for Switch Port 0: Lmc for LID assignment to Switches with  -->
    <!-- an Enhanced Port 0 capability. LmcE0 and Lmc can be used for Failover/Redundant -->
    <!-- Routing especially when in-band ULPs (such as IPoIB) are run on enhanced port 0 -->
    <!-- of switch. LmcE0 cannot be used to enable/control Dispersive Routing, as its -->
    <!-- applicable only to hosts -->
    <LmcE0>0</LmcE0>  <!-- assign 2^lmce0 LIDs to all Enhanced SW port 0 -->                                           <!--SM_0_lmc_e0:dec-->

    <ForceRebalance>0</ForceRebalance>
    <!-- Toggle to force rebalancing routing every change -->

    <!-- ******************** Fat Tree Topology **************************** -->
    <!-- When the RoutingAlgorithm is set to fattree, the following section  -->
    <!-- is used to configure fat tree parameters.                           -->
    <!-- FatTreeTopology:                                                    -->
    <!--    To properly handle routing decisions, the SM needs to understand -->
    <!--    some fabric topology information.  Specifically, how many tiers  -->
    <!--    are in the fat tree and which tier a switch belongs to.  This is -->
    <!--    used to balance the tree and determine which links are up/down   -->
    <!--    for deadlock avoidance.                                          -->
    <!--    If all FIs are on the same tier, the SM can easily determine the -->
    <!--    fat tree topology and tier a given switch resides in. If they    -->
    <!--    are not, a list of CoreSwitches will be used to identify the     -->
    <!--    topology.  It is a good practice to specify the CoreSwitches     -->
    <!--    group explicitly and disable the FIsOnSameTier config, this will -->
    <!--    determine the proper layout of the fabric in the event that some -->
    <!--    of the HFIs are offline.                                         -->
    <FatTreeTopology>
      <!-- The number of tiers in the fat tree.                              -->
      <TierCount>3</TierCount>
      <!-- Fabric topology will be discovered using information that all     -->
      <!-- HFIs are on the same tier in the fat tree.                        -->
      <FIsOnSameTier>1</FIsOnSameTier>
      <!-- Fabric topology will be discovered based on the location of the   -->
      <!-- core/root switches.  The following must be setup if the HFIs are  -->
      <!-- not on the same tier.  It's also a good practice to use the core  -->
      <!-- switches group to discover the fabric topology (in the event      -->
      <!-- that HFIs are offline).  Note, FIsOnSameTier should be set to     -->
      <!-- zero when using the CoreSwitches discovery method.                -->
      <!-- <CoreSwitches>core_device_group</CoreSwitches>                    -->
      <!-- Nodes may be specified for exclusion from initial round-robin     -->
      <!-- to give better route balancing of remaining nodes.                -->
      <!-- This may be useful in asymmetric fat trees or to initially        -->
      <!-- balance across compute nodes in the tree.                         -->
      <!-- <RouteLast>hfi_device_group</RouteLast>                           -->
      <!-- The following can be enabled to setup routing with a simple       -->
      <!-- round robin.  Paths are selected without offsetting the start     -->
      <!-- such that the first HFI on a switch is routed through the first   -->
      <!-- ISL on the same tier, the second HFI on the second ISL, etc. in   -->
      <!-- a pass through type assignment.                                   -->
      <PassThrough>0</PassThrough>
      <!-- For 3-tier fat trees, converge routes at core to get optimal      -->
      <!-- balance when down routing.                                        -->
      <Converge>0</Converge>
    </FatTreeTopology>

    <!-- **************** DG ShortestPath Topology ************************* -->
    <!-- When the routing algorithm is set to "dgshortestpath" the following -->
    <!-- section is used to configure the algorithm.                         -->
    <!-- Overall, "dgshortestpath" routing is a form of "Min Hop" or         -->
    <!-- "Shortestpath" routing, except you can control the order in which   -->
    <!-- routes to end nodes are assigned. This can be used to ensure        -->
    <!-- diversity of routing within groups of devices as well as the entire -->
    <!-- fabric overall. End nodes that are not members of any listed groups -->
    <!-- will be routed last.                                                -->
    <DGShortestPathTopology>
        <!-- RoutingOrder lists the device groups in the order they should   -->
        <!-- be handled. Each device group must have been declared in the    -->
        <!-- DeviceGroups section.                                           -->
        <!-- <RoutingOrder> -->
            <!-- <DeviceGroup>Compute</DeviceGroup> -->
            <!-- <DeviceGroup>All</DeviceGroup> -->
            <!-- <DeviceGroup>Storage</DeviceGroup> -->
        <!-- </RoutingOrder> -->
    </DGShortestPathTopology>


    <!-- **************** Mesh/Torus Topology **************************** -->
    <!-- When the RoutingAlgorithm is set to dor, the following section is -->
    <!-- to configure Mesh/Torus parameters.                               -->
    <!-- MeshTorusTopology:                                                -->
    <!--    To properly handle fabric disruptions or installation mistakes -->
    <!--    the SM needs to understand which switch ports will be used for -->
    <!--    ISLs and which dimension each ISL is associated with.          -->
    <!--    The fabric must be constructed with all ISL connections in a   -->
    <!--    given dimension using consistent port numbers on each switch.  -->
    <!--    Also each dimension may be toroidal or non-toroidal.           -->
    <!--    For non-toroidal dimensions, the extra switch ports on the     -->
    <!--    edges of the mesh may be used for additional CAs.  If the      -->
    <!--    non-toroidal dimension is of length 2, the same port can be    -->
    <!--    used on either end of the link.                                -->
    <!--    The following Policies and Controls can be specified:          -->
    <!--    Dimension:                                                     -->
    <!--        Port pair:  <PortPair>i,j</PortPair>                       -->
    <!--              The ports on neighbor switches which will be         -->
    <!--              connected for ISLs in a given dimension.  There      -->
    <!--              should be 1 or more port pairs per dimension.        -->
    <!--              List one port pair per neighbor switch ISL           -->
    <!--        Toroidal:   <Toroidal>1</Toroidal>                         -->
    <!--           Indicates that the dimension is toroidal (closed loop)  -->
    <!--        Length:     <Length>n</Length>                             -->
    <!--           Indicates that the dimension is of length n.            -->
    <!--    RouteLast:                                                     -->
    <!--        Nodes may be specified for exclusion from initial routing  -->
    <!--        to give better route balancing of remaining nodes. This    -->
    <!--        may be useful for balancing first across compute nodes     -->
    <!--        followed by I/O nodes to achieve diversity of routing      -->
    <!--        within these groups of devices as well as the fabric       -->
    <!--        overrall.                                                  -->
    <!--    WarnThreshold:                                                 -->
    <!--        Maximum number of warnings to be logged for each set of    -->
    <!--        invalid ISL connections found.  ISL connections which are  -->
    <!--        in conflict with the Dimensions and PortPair definitions   -->
    <!--        specified in the MeshTorusTopology are considered invalid  -->
    <!--        and will be logged and ignored.                            -->
    <!--        Default value is 5. Max value is 255.                      -->

    <!-- Example of 2D (4x4) Torus with two ISLs in each dimension.        -->
    <!-- <MeshTorusTopology> -->
      <!-- <Dimension> -->
         <!-- <PortPair>1,2</PortPair> -->
         <!-- <PortPair>3,4</PortPair> -->
         <!-- <Toroidal>1</Toroidal> -->
         <!-- <Length>4</Length> -->
      <!-- </Dimension> -->
      <!-- <Dimension> -->
         <!-- <PortPair>5,6</PortPair> -->
         <!-- <PortPair>7,8</PortPair> -->
         <!-- <Toroidal>1</Toroidal> -->
         <!-- <Length>4</Length> -->
      <!-- </Dimension> -->
      <!-- <RouteLast>hfi_device_group</RouteLast>  -->
      <!-- <WarnThreshold>5</WarnThreshold> -->
    <!-- </MeshTorusTopology> -->

    <!-- ********************* Hypercube Topology ************************ -->
    <!-- Example of defining parameters for controlling the enhanced       -->
    <!-- hypercube routing algorithm. When the RoutingAlgorithm is set to  -->
    <!-- hypercube, this section is used to configure routing parameters.  -->
    <!-- EnhancedRoutingControl can be used to control the order that      -->
    <!-- ports are processed on a switch during routing through the use of -->
    <!-- virtual port numbers.  pPort represents a physical port number    -->
    <!-- for the Switch, whereas vPort represents a virtual number.  The   -->
    <!-- routing is setup in virtual port order, which by default is the   -->
    <!-- same as physical port order.  Any physical ports not listed will  -->
    <!-- get the next unused virtual port in increasing order.  In the     -->
    <!-- example below, the ports on switches in group SwitchDeviceGroup1  -->
    <!-- would be processed in the order 1 2 3 25 28 4 5 6 7 ...  If the   -->
    <!-- Switches device group is not included in the EnhancedRoutingCtl,  -->
    <!-- that defines a default ordering for all switches not explicitly   -->
    <!-- listed.  Also, a cost can be associated with a pPort.  By default -->
    <!-- the cost is defined with a base cost of 10.  But an override can  -->
    <!-- be installed by defining an explicit cost.  The shortest path is  -->
    <!-- actually the lowest cost path. If pPort is not specified, or      -->
    <!-- is 0, then that specifies that the cost is associated with all    -->
    <!-- ports for the Switches indicated in the device group (or for all  -->
    <!-- ports if the Switches device group is not specified).             -->
    <HypercubeTopology>
        <!-- <EnhancedRoutingCtrl> -->
            <!-- <Switches>SwitchDeviceGroup1</Switches> -->
            <!-- <PortData> -->
                <!-- <pPort>25</pPort> -->
                <!-- <vPort>4</vPort> -->
            <!-- </PortData> -->
            <!-- <PortData> -->
                <!-- <pPort>28</pPort> -->
                <!-- <vPort>5</vPort> -->
                <!-- <Cost>11</Cost> -->
            <!-- </PortData> -->
        <!-- </EnhancedRoutingCtrl> -->
        <!-- <EnhancedRoutingCtrl> -->
            <!-- <PortData> -->
                <!-- <Cost>12</Cost> -->
            <!-- </PortData> -->
        <!-- </EnhancedRoutingCtrl> -->

        <!-- Nodes may be specified for exclusion from initial round-robin -->
        <!-- to give better route balancing of remaining nodes.  This may  -->
        <!-- be useful to initially balance across compute nodes and then  -->
        <!-- over I/O nodes.                                               -->
        <!-- <RouteLast>hfi_device_group</RouteLast>                       -->
    </HypercubeTopology>

    <!-- **************** Pre-defined Topology Verification **************** -->
    <!-- The PreDefinedTopology section is used for verifying the layout of  -->
    <!-- the fabric against a topology input file of the expected layout.    -->
    <!-- There are three modes of handling mismatches: Disabled, Warn, and   -->
    <!-- Enabled. Disabled ignores any mismatches on that field, Warn prints -->
    <!-- a warning to the log file, and Enabled prints a warning to the log  -->
    <!-- file and quarantines the node from the fabric.                      -->
    <!-- Field Definitions:                                                  -->
    <!--     Enabled:                                                        -->
    <!--         Whether or not this feature is enabled.                     -->
    <!--     TopologyFilename:                                               -->
    <!--         Fully qualified filename of pre-defined input topology.     -->
    <!--     LogMessageThreshold: Number of warnings to output to log        -->
    <!--         Number of warnings to output to log file before suppressing -->
    <!--         further warnings and only printing a summary at the end of  -->
    <!--         a sweep. Entering 0 disables this threshold.                -->
    <!--     FieldEnforcement:                                               -->
    <!--         Per-field enforcement levels for mismatch handling.         -->
    <!-- Field comparison is done on a validation link. Validation links are -->
    <!-- found using (NodeGUID,PortNum) unless NodeGUID enforcement is       -->
    <!-- DISABLED, in which case (NodeDesc,PortNum) is used to find the      -->
    <!-- link. If there is more than one link matches by (NodeDesc,PortNum)  -->
    <!-- a log warning will be printed and false matches may occur.          -->
    <PreDefinedTopology>
        <LogMessageThreshold>100</LogMessageThreshold>
        <FieldEnforcement>
            <NodeDesc>Warn</NodeDesc>
            <NodeGUID>Warn</NodeGUID>
            <PortGUID>Warn</PortGUID>
            <UndefinedLink>Warn</UndefinedLink>
        </FieldEnforcement>
    </PreDefinedTopology>

    <!-- **************** Fabric Multicast **************************** -->
    <Multicast>
      <!-- OPA has a limitation in that the SM must make the realizable -->
      <!-- decision for a Multicast group at Multicast Join/Create time.  -->
      <!-- However later fabric changes (removal of links, loss of switches) -->
      <!-- could make the multicast group unrealizable, but there is no -->
      <!-- notice in OPA which the SM could send the end node. -->
      <!-- To address this situation, the SM performs stricter Multicast -->
      <!-- checking at Join/Create time.  This means a Multicast join/create -->
      <!-- is rejected if there are any Switch to Switch links which do -->
      <!-- not have at least the MTU or Rate requested for the Multicast -->
      <!-- group.  Hence reducing the chance that a simple fabric failure -->
      <!-- could make the group unrealizable.  -->
      <!-- When 1, this parameter disables the strict checking and accepts -->
      <!-- Join/Create for which at least 1 viable fabric path exists. -->
      <DisableStrictCheck>0</DisableStrictCheck>                                                                       <!--SM_0_disable_mcast_check:dec-->
      <!-- Number of Multicast LIDs available in fabric. -->
      <!-- Must be set <= smallest Multicast forwarding table size of all -->
      <!-- switches in fabric. -->
      <MLIDTableCap>8192</MLIDTableCap>                                                                                <!--SM_0_mcastMLidTableCap:dec-->
      <!-- Should multicast spanning tree be pruned to its minimal size. -->
      <!-- When disabled, multicast join and leave is optimized by -->
      <!-- building the spanning tree to include all switches, -->
      <!-- such that a HFI join/leave only requires a single switch update. -->
      <!-- When enabled, multicast traffic will only propagate through -->
      <!-- the minimal set of switches, reducing overhead in the fabric. -->
      <!-- Recommended to be disabled for typical fabrics where multicast -->
      <!-- is mainly used to support IPoIB ARP and DHCP. -->
      <EnablePruning>0</EnablePruning>

      <!-- Selecting root switch for Multicast Spanning Tree -->
      <!-- Following algorithms are supported -->
      <!--  LeastTotalCost - select switch with the least sum of costs to -->
      <!--                   all other switches. -->
      <!--  LeastWorstCaseCost - select switch with the least worst case -->
      <!--                       cost to other switches. -->
      <!--  SMNeighbor - select the switch next to the SM. -->
      <RootSelectionAlgorithm>LeastTotalCost</RootSelectionAlgorithm>
      <!-- After fabric changes, minimum cost improvement in percentage -->
      <!-- required to change multicast spanning tree root switch. -->
      <MinCostImprovement>50%</MinCostImprovement> 

      <!-- IPv6 (and possibly other applications) can create numerous -->
      <!-- Multicast groups. Each multicast group needs an MLID. -->
      <!-- In the case of IPv6, there is 1 Solicited-Node multicast group -->
      <!-- per FI port. -->
      <!-- This results in an excessively large number of multicast groups. -->
      <!-- Also in large fabrics, this quickly exceeds MLIDTableCap. -->
      <!-- To address this situation, the MLIDShare fields allow groups of -->
      <!-- Multicast GIDs to share a limited number of MLIDs. -->
      <!-- This can conserve the Hardware MLID tables so other uses of -->
      <!-- Multicast can be optimized/efficient. -->
      <!-- Allows specification of 32 separate groups of MGIDs. Each group -->
      <!-- of MGIDs are combined into it's own unique set of MLIDs. -->
      <!-- Each MGID is ANDed with MGIDMask then compared to MGIDValue. -->
      <!-- On a match the MGID will be given a MLID within a pool of -->
      <!-- MaxMLIDs. -->
      <!-- MGIDs are 128 bits specified as 2 colon separated 64 bit values -->
      <!-- MGIDs in the same MLIDShare group with the same PKey will never -->
      <!-- share MLIDs. -->
      <!-- <MaxMLIDsPerPKey> is an optional field that restricts the number of -->
      <!-- of MLIDs that any one PKey can consume. For example: in the following -->
      <!-- section, a maximum of 500 MLIDs can be shared, but can be restricted to -->
      <!-- allow sharing 4 MLIDs per PKey for matching MGIDs. -->
      <!-- This can be useful when a single partition creates a large number of MGIDs -->
      <!-- that may consume all available MLIDs, leaving another virtual partition -->
      <!-- without any MLIDs to allocate. Another case is when many VFs create MGIDs, -->
      <!-- some of them consuming the maximum allowed, leaving the remaining ones -->
      <!-- with no MLIDs to allocate. -->

      <!-- IPv6 Solicited-Node multicast combined to 500 MLIDs -->
      <MLIDShare>
        <Enable>1</Enable>
        <MGIDMask>0xffffffff0000ffff:0xffffffffff000000</MGIDMask>
        <MGIDValue>0xff12601b00000000:0x00000001ff000000</MGIDValue>
        <MaxMLIDs>500</MaxMLIDs>
        <!-- <MaxMLIDsPerPKey>4</MaxMLIDsPerPKey> -->
      </MLIDShare>

      <!-- Catch-all for MGIDs not matched by another MLIDShare group -->
      <MLIDShare>
        <Enable>0</Enable>                                                                                             <!--#SM_0_mt_enable#!-->
        <Enable>1</Enable>                                                                                             <!--#SM_0_mt_enable#=-->
        <MGIDMask>0x0000000000000000:0x0000000000000000</MGIDMask>
        <MGIDValue>0x0000000000000000:0x0000000000000000</MGIDValue>
        <MaxMLIDs>8000</MaxMLIDs>
        <MaxMLIDsPerPKey>8</MaxMLIDsPerPKey>
      </MLIDShare>

      <!-- *************************************************************** -->
      <!-- Pre-Created Multicast Groups -->
      <!-- These groups will be pre-created by the SM. -->
      <!-- OFA requires this for IPoIB, config can specify others as needed -->

      <!-- Every pre-created MulticastGroup can have one or more MGIDs. -->
      <!-- The MGID must be unique among all MulticastGroups within an -->
      <!-- FM instance. -->
      <!-- When defined at Common level must be unique within all instances. -->
      <!-- MGIDs are specified as two 64 bit values separated by a colon (:) -->
      <!-- MGIDs can be specified in the following ways in the -->
      <!-- MulticastGroup section: -->
      <!-- a single MGID: <MGID>0xabc:0x123567</MGID> -->
      <!-- If no MGIDs are specified, 4 IPv4 and/or 4 IPv6 multicast groups are -->
      <!-- created depending on which application is defined in the matching VF -->
      <!-- (Networking, IPv4 or IPv6) -->

      <!-- The following Policies and Controls can be specified -->
      <!-- Create: <Create>1</Create> -->
      <!--        When Disabled (0), the MulticastGroup is ignored. -->
      <!--        This allows the user to easily disable a MulticastGroup -->
      <!--        without editing its definition. -->
      <!-- Virtual Fabric: <VirtualFabric>name</VirtualFabric> -->
      <!--        This controls the virtual fabric for which the -->
      <!--        MulticastGroup is created. -->
      <!--        Alternatively a <PKey> may be specified.  -->
      <!--        If neither is specified, the MGID will be created for all -->
      <!--        Virtual Fabrics which contain the MGID as an Application -->
      <!-- Static Rate: <Rate>25g</Rate> specified in natural format -->
      <!--        e.g. one of '25g', '50g', '75g' or '100g'  -->
      <!-- MTU: <MTU>2048</MTU> specified in natural format -->
      <!--        e.g. one of '2048', '4096', '8192' or '10240' -->
      <!-- Service Level: <SL>0</SL> -->
      <!--        SL can be specified, but must match the MulticastSL -->
      <!--        (if present, otherwise the BaseSL) of the associated -->
      <!--        VirtualFabric.  -->
      <!-- QKey: <QKey>0x0</QKey> -->
      <!-- Traffic Class: <TClass>0x0</TClass> -->

      <!-- IPoIB IPv4 and IPv6 multicast for all VFs which have IPoIB -->
      <!-- as an application -->
      <MulticastGroup>
        <Create>1</Create>                                                                                             <!--SM_0_def_mc_create:dec-->
        <PKey>0x0001</PKey>                                                                                            <!--#SM_0_def_mc_pkey:hex-->
        <MTU>2048</MTU>                                                                                                <!--SM_0_def_mc_mtu:mtu-->
        <Rate>25g</Rate>                                                                                               <!--SM_0_def_mc_rate-->
        <!-- <SL>0</SL> -->                                                                                            <!--SM_0_def_mc_sl:dec-->
        <QKey>0x0</QKey>                                                                                               <!--SM_0_def_mc_qkey:hex-->
        <TClass>0x0</TClass>                                                                                           <!--SM_0_def_mc_tc:hex-->
      </MulticastGroup>

      <!-- Sample of IPoIB IPv4 and IPv6 multicast for 0x8002/0x0002 PKey -->
      <!-- This can be useful if there are multiple IPoIB vFabrics  -->
      <!-- and its desired to have different multicast parameters (Rate, -->
      <!-- MTU, etc) for each IPoIB vFabric. -->
      <!-- Since IPoIB MGID includes PKey, we specify PKey not VirtualFabric -->
      <!-- MGIDs specified must use the Full PKey (0x8000 bit set) -->
      <MulticastGroup>
        <Create>0</Create>
        <PKey>0x0002</PKey>
        <!-- PKey 0x8002/0x0002 is part of IPv4 MGID below -->
        <!-- MGID = 0xffFS401bPPPP0000:00000000GGGGGGGG -->
        <!-- where F=flags, S=scope, P=PKey and G=IP Multicast Group -->
        <MGID>0xff12401b80020000:0x00000000ffffffff</MGID> <!-- bcast -->
        <MGID>0xff12401b80020000:0x0000000000000001</MGID> <!-- all nodes -->
        <MGID>0xff12401b80020000:0x0000000000000002</MGID> <!-- all routers -->
        <MGID>0xff12401b80020000:0x00000000000000fb</MGID> <!-- all mDNS -->
        <!-- PKey 0x8002/0x0002 is part of IPv6 MGIDs below -->
        <!-- MGID = 0xffFS601bPPPPGGGG:GGGGGGGGGGGGGGGG -->
        <!-- where F=flags, S=scope, P=PKey and G=IP Multicast Group -->
        <MGID>0xff12601b80020000:0x0000000000000001</MGID> <!-- all nodes -->
        <MGID>0xff12601b80020000:0x0000000000000002</MGID> <!-- all routers -->
        <MGID>0xff12601b80020000:0x0000000000000016</MGID> <!-- all MLDV2 routers -->
        <MGID>0xff12601b80020000:0x00000000000000fb</MGID> <!-- all mDNS -->
        <MTU>2048</MTU>
        <Rate>100g</Rate>
        <QKey>0x0</QKey>
        <TClass>0x0</TClass>
      </MulticastGroup>
    </Multicast>

    <!-- **************** Fabric Programming **************************** -->
    <!-- SwitchLifetime, HoqLife, and VLStallCount can be used to relieve -->
    <!-- fabric congestion and avoid fabric deadlocks by discarding packets. -->
    <!-- Discards help prevent backpressure from propagating deep into the -->
    <!-- core of the fabric, however such discards will cause end nodes to -->
    <!-- need to timeout and retransmit. -->
    <!-- If a packet stays at the Head of a Switch Egress Port for more -->
    <!-- than HoqLife, it is discarded.  -->
    <!-- Similarly a packet queued in a switch for more than SwitchLifetime -->
    <!-- is discarded. -->
    <!-- Specified as integer time using ns, us, ms, or s as units. -->
    <!-- VLStallCount controls a second tier more aggressive discard.  -->
    <!-- If VLStallCount packets in a row are discarded due to HoqLife by a -->
    <!-- given VL on an egress port.  That egress port's VL enters the VL -->
    <!-- Stalled State and discards all that VL's egress packets -->
    <!-- for 8*HoqLife. -->
    <!-- Packets discarded for any of these reasons will be included in the -->
    <!-- TxDiscards counter which is query-able via FastFabric. -->

    <!-- HoqLife can be automatically adjusted based on -->
    <!-- Virtual Fabric configurations and preemption configurations -->
    <!-- This feature is called TimerScaling, and can be enabled below. -->
    <!-- Furthermore, HoqLife can be specified per -->
    <!-- Virtual Fabric, overriding the global definition below. --> 
    <!-- When HoqLife is specified at the Virtual Fabric -->
    <!-- level, the timeout scaling is automatically disabled for that VF -->

    <TimerScalingEnable>0</TimerScalingEnable>
    <SwitchLifetime>33ms</SwitchLifetime>                                                                              <!--SM_0_switchlifetime:2n-->
    <HoqLife>8ms</HoqLife>                                                                                             <!--SM_0_hoqlife:2n-->
    <VLStallCount>7</VLStallCount>                                                                                     <!--SM_0_vlstall:dec-->

    <!-- VL15FlowControlDisable can be used to turn off the link-level -->
    <!-- reliable transport flow control behavior on VL15. -->
    <!-- When reliable transport flow control has been disabled for a VL, -->
    <!-- packets will be discarded by that VL when the packet length is -->
    <!-- larger than the current available VL credit. -->
    <VL15FlowControlDisable>1</VL15FlowControlDisable>

    <!-- *************** Security Features ******************************-->
    <!-- VL15CreditRate: Rate at which to return credits to a non-mgmt HFI. -->
    <!-- Helps avoid VL15 Denial of Service attacks against the fabric -->
    <!-- The field is defined as 1/(2^X) of the normal return rate. For -->
    <!-- instance, if the field is set to 3, the credit return rate will be -->
    <!-- 1/(2^3) = 1/8 (one eighth) the normal credit return rate. -->
    <!-- Valid values are between 0 and 21, with 0 disabling the feature. -->
    <VL15CreditRate>18</VL15CreditRate>

    <!-- ******   VL Buffer Allocation Parameters   *****************-->
    <!-- VL Memory allocation can be fine tuned with the parameters -->
    <!-- specified below. Normally, parameters from the port info are used -->
    <!-- to drive the allocation according to a set of rules.  However, the -->
    <!-- parameters below can override the information returned from port -->
    <!-- info, and also can be used to modify the rules to allow for more or -->
    <!-- less dedicated memory / shared memory among the VLs. -->
    <!-- MinSharedVLMemory is an integer representing a percentage of -->
    <!--     overall Buffer memory that will be guaranteed to be shared -->
    <!--     among a port's VLs (provided that the port supports -->
    <!---    shared memory). If not specified, defaults to 0. -->
    <!-- DedicatedVLMemMulti is an integer multiplier in the -->
    <!--     range, 0 to 255 that can increase the -->
    <!--     amount of dedicated memory per VL.  It is specified in -->
    <!--     multiples of MTUs for that VL. -->
    <!--     If not specified, defaults to 1. -->
    <!-- WireDepthOverride is an integer value (in bytes) that overrides -->
    <!--     the wire depth returned in the port info. If not specified, -->
    <!--     defaults to -1. -->
    <!--     A value of -1 indicates to use the value from port info. -->
    <!--     A value of 0 means to ignore Wire Depth, and use Replay Depth. -->
    <!--     Any other value indicates a byte-value to use instead of wire -->
    <!--     depth from port info. -->
    <!-- ReplayDepthOverride is an integer value (in bytes) that overrides -->
    <!--     the buffer depth returned in the port info. If not specified, -->
    <!--     defaults to -1. Similar to WireDepthOverride as above. -->
    <!--     A value of -1 indicates to use the value from port info. -->
    <!--     A value of 0 means to ignore Replay Depth, and use Wire Depth. -->
    <!--     Any other value indicates a byte-value to use instead of -->
    <!--     replay depth from port info. -->
    <!-- If both ReplayDepthOverride and WireDepthOverride are 0, then no -->
    <!-- bytes are considered for data outstanding on the wire. -->
    <MinSharedVLMem>0</MinSharedVLMem>
    <DedicatedVLMemMulti>1</DedicatedVLMemMulti>
    <WireDepthOverride>-1</WireDepthOverride>
    <ReplayDepthOverride>-1</ReplayDepthOverride>

    <!-- **************Link Policy************** -->
    <!-- LinkPolicy -->
    <!-- There is a separate LinkPolicy for HFI and ISL             -->
    <!-- These settings set bounds on acceptable Link Width values. -->
    <!-- -->
    <!--    MaxDroppedLanes -->
    <!--        The link can chose to downgrade width by dropping lanes -->
    <!--        that are not performing adequately. The link will drop -->
    <!--        up to MaxDroppedLanes from the initial negotiated width. -->
    <!--        Example: If a link comes up through LNI with an active -->
    <!--            width of 4x and MaxDroppedLanes has a value of 1, the -->
    <!---           link will be allowed to downgrade to 3x but no lower. -->
    <!--        *Note: This setting is communicated to each SMA which is -->
    <!--            then responsible for performing the downgrades. This -->
    <!--            setting is independent of WidthPolicy discussed below -->
    <!--    WidthPolicy -->
    <!--        This enforces the initial negotiated width for the link. -->
    <!--        "Supported" - The SM will disable links whose initial width -->
    <!--                      is not widest width supported by the devices -->
    <!--        "2x" - disable any links initialized with less than 2 lanes-->
    <!--        "3x" - disable any links initialized with less than 3 lanes-->
    <!--        "4x" - disable any links initialized with less than 4 lanes-->
    <!-- *Note that the "Supported" link policy is implicitly enabled when -->
    <!-- using any of the available policies. -->
    
    <HFILinkPolicy>
        <MaxDroppedLanes>1</MaxDroppedLanes>
        <WidthPolicy>
            <Enable>1</Enable>
            <Policy>Supported</Policy>
        </WidthPolicy>
    </HFILinkPolicy>
    
    <ISLLinkPolicy>
        <MaxDroppedLanes>1</MaxDroppedLanes>
        <WidthPolicy>
            <Enable>1</Enable>
            <Policy>Supported</Policy>
        </WidthPolicy>
    </ISLLinkPolicy>

    <!-- Long Term Port Quarantine Configuration -->
    <!-- Port Quarantine allows the FM to minimize disruption from -->
    <!-- problematic ports over a period of time. -->
    <!--     -->
    <!--    Flapping -->
    <!--        Ports that are repeatedly bouncing are considered flapping -->
    <!--        The FM will monitor bouncing ports over a sliding window -->
    <!--        and quarantine them when bounce events exceeds the -->
    <!--        configured threshold. -->
    <!--        WindowSize -->
    <!--            Size in minutes of the sliding window bounce events -->
    <!--            are monitored over. A value of 0 disables flapping detection -->
    <!--        HighThreshold -->
    <!--            When bounce events equal or exceed high threshold, port will be -->
    <!--            quarantined --> 
    <!--        LowThreshold -->
    <!--            When bounce events is equal to or below low threshold, -->
    <!--            port will be removed from quarantine.  -->

    <LongTermPortQuarantine>
        <Enable>1</Enable>
        <Flapping>
            <WindowSize>15</WindowSize>
            <HighThreshold>25</HighThreshold>
            <LowThreshold>0</LowThreshold>
        </Flapping>
    </LongTermPortQuarantine>


    <!-- Preemption Configuration -->
    <!-- Preemption is based on packet size and a VL/VF Preemption matrix. -->
    <!-- Preemption allows a "small" packet to preempt a "large" packet to -->
    <!-- reduce latency. -->
    <!-- "Small" packets are expected to be latency sensitive packets; -->
    <!-- "Large" packets are expected to be less latency sensitive packets. -->
    <!--     NOTE: These sizes represent PACKET sizes including all HEADERS -->
    <!-- These sizes are configurable by the user: -->
    <!--   LargePacket:   The minimum size (in bytes) for a "Large" (and -->
    <!--                  therefore pre-emptible) packet. --> 
    <!--                  Range is 512 to 8192 in 512 byte increments. -->
    <!--                  HW may impose additional constraints. -->
    <!--                  May also specify "MIN" or "MAX". Defaults to 4096 -->
    <!--   SmallPacket:   The maximum size (in bytes), for a "Small" (and -->
    <!--                  therefore a candidate for a preempting packet). -->
    <!--                  Range is 32 to 8192 in 32 byte increments. -->
    <!--                  HW may impose additional constraints. -->
    <!--                  May also specify "MIN" or "MAX". Defaults to 256 -->
    <!--   PreemptLimit:  Limit of total bytes for all preempting packets -->
    <!--                  which may preempt a given packet.  Once limit is -->
    <!--                  reached no further packets may preempt the given -->
    <!--                  packet. -->
    <!--                  Range is 0 to 65024 in 256 byte increments. -->
    <!--                  HW may impose additional constraints. -->
    <!--                  May also specify "MIN", "MAX" or "INF" (infinite). -->
    <!--                  Defaults to 4096 bytes. -->
    <!-- Preemption capability can be configured (enabled, disabled, ranked) -->
    <!-- per Virtual Fabric via the PreemptRank parameter.--> 
    <!-- See Virtual Fabric configuration options for more info. -->
    <Preemption>
      <SmallPacket>256</SmallPacket>
      <LargePacket>4096</LargePacket>
      <PreemptLimit>4096</PreemptLimit>
    </Preemption>
    
    <!-- Configures support for OPA Congestion Control -->
    <CongestionControl>
      <!-- 1 = Enable, 0 = Disable -->
      <Enable>0</Enable>
      <!-- Turn on additional debug logging for CCA -->
      <!-- 1 = Enable, 0 = Disable -->
      <Debug>0</Debug>
      <!-- CC settings applicable to all switches. -->
      <!-- Default settings for switch are selected to provide the best -->
      <!-- congestion control for various traffic mixes but may require -->
      <!-- tuning for best performance -->
      <Switch>
        <!-- OPA CC SwitchCongestionSetting:Threshold -->
        <!-- A value in the range 0 to 15. Used to determine when       -->
        <!-- to use congestion marking. Higher values indicate more     -->
        <!-- aggressive congestion thresholds. 0 disables congestion    -->
        <!-- marking. Default is 8. -->
        <Threshold>8</Threshold>
        <!-- OPA CC SwitchCongestionSetting:Packet Size -->
        <!-- Minimum packet size to mark in 64 byte units. Packets      -->
        <!-- smaller than this size are ignored by congestion control.  -->
        <!-- Range is 0-162. -->
        <PacketSize>0</PacketSize>
        <!-- OPA CC SwitchCongestionSetting:Marking Rate                -->
        <!-- The average number of packets between packets that are     -->
        <!-- eligible to be marked with a Forward Explicit Congestion   -->
        <!-- Notification. Range is 0-65535. For Omni-Path Gen 1 switch -->
        <!-- hardware, this value will be capped at 255                 -->
        <MarkingRate>0</MarkingRate>
        <!-- OPA CC SwitchCongestionSetting: Victim Marking             -->
        <!-- Boolean value (0 or 1). A value of 0 will cause marking    -->
        <!-- of only sources of congestion. A value of 1 will cause     -->
        <!-- marking of both sources and victims of congestion          -->
        <VictimMarkingEnable>1</VictimMarkingEnable>
      </Switch>

      <!-- CC settings applicable to all fabric interfaces. -->
      <!-- Congestion Control may require tuning for best performance -->
      <!-- When using PSM, the CC settings for a given job -->
      <!-- can be overridden with the following environment variables -->
      <!-- PSM_DISABLE_CCA 0 -->
      <Fi>
        <!-- OPA CC FICongestionEntry:CCTI Increase                     -->
        <!-- The number to be added to the CCTI on the receipt of a BECN-->
        <!-- Range is 0-255. -->
        <Increase>5</Increase>
        <!-- OPA CC FICongestionEntry:CCTI Timer                        -->
        <!-- Determines the amount of time that must elapse before      -->
        <!-- reducing the CCTI. Measured in multiples of 1.024 uS.      -->
        <!-- Range is 0 to 65535. -->
        <Timer>10</Timer>
        <!-- OPA CC FICongestionEntry:Trigger Threshold                 -->
        <!-- When the CCTI is equal to this value, an event is logged   -->
        <!-- in the FI's congestion log. Range is 0-255.  -->
        <Threshold>8</Threshold>
        <!-- OPA CC FICongestionEntry:CCTI Min                          -->
        <!-- The minimum value for the CCTI, effective the minimum      -->
        <!-- injection rate delay for an SL or QP. Range is 0 to 255.   -->
        <Min>0</Min>
        <!-- OPA CC CongestionControlTable:CCTI Limit                   -->
        <!-- Maximum value for the CCTI. Range is 1-895.                -->
        <Limit>127</Limit>
        <!-- Maximum injection rate delay in ns -->
        <!-- The Congestion Control Table will be generated with Limit -->
        <!-- entries such that the final entry will result in -->
        <!-- DesiredMaxDelay for a maximum MTU packet. Value is in ns  -->
        <!-- and the range is 0 through (2^32)-1.                      -->
        <DesiredMaxDelay>8300</DesiredMaxDelay>
      </Fi>
    </CongestionControl>


    <!-- Configures support for AdaptiveRouting in Intel Switches -->
    <!-- Adaptive Routing monitors the performance of the possible paths between -->
    <!-- fabric endpoints and periodically rebalances the routes to reduce -->
    <!-- congestion and achieve a more balanced packet load -->
    <AdaptiveRouting>
      <!-- 1 = Enable, 0 = Disable -->
      <Enable>0</Enable>                                                                                               <!--SM_0_ar_enable:dec-->
      <!-- When set, only adjust routes when they are lost. -->
      <!-- If not set, adjust routes when they are lost and -->
      <!-- when congestion is indicated. -->
      <LostRouteOnly>0</LostRouteOnly>                                                                                 <!--SM_0_ar_lost_route_only:dec-->
      <!-- Algorithm the switch should use when selecting an egress port -->
      <!-- Algorithms are currently 0 = Random, 1 = Greedy and -->
      <!-- 2 = GreedyRandom. Default is 2. -->
      <Algorithm>2</Algorithm>
      <!-- Update Frequency: Specifies the minimum time between -->
      <!-- AR adjustments. Values range from 0 to 7 and are read as 2^n -->
      <!-- times 64 ms. Default is 0. -->
      <ARFrequency>0</ARFrequency>
      <!-- Congestion threshold above which switch uses adaptive routing. -->
      <!-- Congestion threshold is per-VL and measured by tag consumption percentage. -->
      <!-- Values range from 0 to 7. -->
      <!-- 7, 6, 5, 4 correspond to 55%, 60%, 65%, and 70%, respectively. -->
      <!-- 3, 2, 1 correspond to 80%, 90%, and 100%, respectively. -->
      <!-- 0 means "Use firmware default". Default is 3. -->
      <!-- Higher Percentage means higher congestion is required before Adaptive -->
      <!-- routing takes control. Higher Percentage is less sensitive, less adaptive. -->
      <Threshold>3</Threshold>
    </AdaptiveRouting>

    <SaRespTime>1s</SaRespTime> <!-- maximum anticipated SA response time -->                                          <!--SM_0_saRespTime:2n-->

    <!-- Normally if SA cannot process a request because resources are -->
    <!-- temporarily not available or an error is detected which may be -->
    <!-- resolved when an in progress sweep completes, a busy status is -->
    <!-- returned to the requester so the requester can delay and retry. -->
    <!-- Setting NoReplyIfBusy to 1 results in no response being returned. -->
    <!-- The default is 0, in which case the busy status will be returned. -->
    <NoReplyIfBusy>0</NoReplyIfBusy>

    <!-- Packet Lifetime Settings -->
    <!-- These control the PktLifetime reported in PathRecord queries. -->
    <!-- PktLifetime is used by OFA compliant applications to set the -->
    <!-- Queue Pair timeout and retry intervals.  Per the OPA/OFA algorithm -->
    <!-- the Queue Pair timeout will typically be 2x or 4x these values. -->
    <!-- When DynamicPacketLifetime is enabled, the PktLifetime reported -->
    <!-- will depend on number of switch hops. -->
    <!-- Hops01 is PktLifetime for 1 hop paths, Hops02 is 2 hop paths, etc. -->
    <!-- When DynamicPacketLifetime is disabled, the PacketLifetime is -->
    <!-- reported as the PKtLifetime for all paths. -->
    <PacketLifetime>1s</PacketLifetime>                                                                                <!--SM_0_saPacketLifetime:2n-->
    <DynamicPacketLifetime>
      <Enable>1</Enable>                                                                                               <!--SM_0_dynamicPlt:dec-->
      <Hops01>67ms</Hops01>                                                                                            <!--SM_0_dynamicPlt_01:2n-->
      <Hops02>134ms</Hops02>                                                                                           <!--SM_0_dynamicPlt_02:2n-->
      <Hops03>134ms</Hops03>                                                                                           <!--SM_0_dynamicPlt_03:2n-->
      <Hops04>268ms</Hops04>                                                                                           <!--SM_0_dynamicPlt_04:2n-->
      <Hops05>268ms</Hops05>                                                                                           <!--SM_0_dynamicPlt_05:2n-->
      <Hops06>268ms</Hops06>                                                                                           <!--SM_0_dynamicPlt_06:2n-->
      <Hops07>268ms</Hops07>                                                                                           <!--SM_0_dynamicPlt_07:2n-->
      <Hops08>536ms</Hops08>                                                                                           <!--SM_0_dynamicPlt_08:2n-->
      <Hops09>536ms</Hops09>                                                                                           <!--SM_0_dynamicPlt_09:2n-->
    </DynamicPacketLifetime>

    <!-- PathRecord path selection and ordering.  Most applications will -->
    <!-- use the first path or only the first few paths.  When LMC=0 this -->
    <!-- setting makes no difference because there is only 1 src/dst address -->
    <!-- per pair of ports.  However when LMC!=0, there can be N=(1<<LMC) -->
    <!-- addresses per port.  This means there are N^2 possible combinations -->
    <!-- of SLID and DLID which the SA could return in the Path Records. -->
    <!-- However there are really only N combinations which represent -->
    <!-- distinct outbound and return paths.  All other combinations are -->
    <!-- different mixtures of those N outbound and N return paths -->
    <!-- Also important to note is that LMC for all FIs are typically the -->
    <!-- same, while LMC for switches will be less.  Generally redundant -->
    <!-- paths and/or having a variety of paths is not critical for paths -->
    <!-- to switches, but can be important for applications talking FI to FI -->

    <!-- This parameter controls what combinations are returned and in what -->
    <!-- order.  For examples below lets assume SGID LMC=1 (2 LIDs) and -->
    <!-- DGID LMC=2 (4 LIDs) -->

    <!-- Minimal - return no more than 1 path per lid -->
    <!--           SLID1/DLID1, SLID2/DLID2   (since SGID has 2 lids stop) -->
    <!-- Pairwise - cover every lid on both sides at least once -->
    <!--           SLID1/DLID1, SLID2/DLID2, SLID1/DLID3, SLID2/DLID4 -->
    <!-- OrderAll - cover every combination, but start with pairwise set --> 
    <!--           SLID1/DLID1, SLID2/DLID2, SLID1/DLID3, SLID2/DLID4 -->
    <!--           SLID1/DLID2, SLID1/DLID4, SLID2/DLID1, SLID2/DLID3 -->
    <!-- SrcDstAll - cover every combination with simple all src, all dst -->
    <!--           SLID1/DLID1, SLID1/DLID2, SLID1/DLID3, SLID1/DLID4 -->
    <!--           SLID2/DLID1, SLID2/DLID2, SLID2/DLID3, SLID2/DLID4 -->
    <PathSelection>Minimal</PathSelection>

    <!-- When 1, this enables IBTA compliant SA query operation for -->
    <!-- GetTable(PathRecord).  As such a SGID and NumbPath is required -->
    <!-- When 0, this allows interop with some non-compliant OFA queries -->
    <!-- and permits GetTable(PathRecord) to specify either a SGID or SLID -->
    <!-- and defaults numbPath to 127 if not specified. -->
    <QueryValidation>0</QueryValidation>

    <!-- EnforceVFPathRecord is a parameter that controls the search -->
    <!--   scope for path records. It defaults to enabled (1), which -->
    <!--   limits the scope to Virtual Fabrics. When disabled (0),   -->
    <!--   the scope is restricted to pkey/partition boundaries      -->
    <EnforceVFPathRecord>1</EnforceVFPathRecord>

    <!-- These parameters tune how many concurrent SMA requests the SM -->
    <!-- can have in flight while programming the SMAs in the fabric. -->
    <SmaBatchSize>2</SmaBatchSize> <!-- max parallel requests to a given SMA -->                                       <!--SM_0_sma_batch_size:dec-->
    <MaxParallelReqs>3</MaxParallelReqs> <!-- total max req in parallel -->                                            <!--SM_0_max_parallel_reqs:dec-->

    <!-- SmaSpoofingCheck enables support for port level SMA security-->
    <!-- checking related features. -->
    <SmaSpoofingCheck>1</SmaSpoofingCheck>

    <!-- **************** Fabric Sweep **************************** -->
    <!-- The SM sweeps immediately upon fabric changes based on traps from -->
    <!-- the switches.  Since traps can be lost, the SM also has a slow -->
    <!-- periodic sweep at SweepInterval to verify fabric config. This -->
    <!-- interval can be zero (do not sweep) or between 3 and 86400 seconds. -->
    <SweepInterval>300</SweepInterval> <!-- max seconds between sweeps -->                                             <!--SM_0_timer:dec-->
    <IgnoreTraps>0</IgnoreTraps> <!-- don't sweep nor log when traps occur -->
    <TrapHoldDown>1</TrapHoldDown> <!-- seconds to delay sweep after trap -->
    <!-- When MinRespTimeout below is set to 0: -->
    <!-- The SM waits up to RespTimeout milliseconds for responses. -->
    <!-- the SM will retry the request, with the same timeout, up to -->
    <!-- MaxAttempts times before giving up. -->
    <!-- Otherwise: -->
    <!-- The SM will start with MinRespTimeout as the timeout value for -->
    <!-- requests and increase the timeout with each retry until -->
    <!-- MaxAttempts * RespTimeout amount of time has elapsed -->
    <!-- Note: Be aware that the SA will also use MaxAttempts to limit the -->
    <!-- number of RMPP retries -->
    <MaxAttempts>3</MaxAttempts>                                                                                       <!--SM_0_max_retries:dec-->
    <RespTimeout>250</RespTimeout> <!-- in milliseconds -->                                                            <!--SM_0_rcv_wait_msec:dec-->
    <MinRespTimeout>35</MinRespTimeout> <!-- in milliseconds -->

    <!-- The maximum time, in seconds, that the FM will spend waiting on -->
    <!-- timeouts during a sweep.  Beyond this limit, the FM will abandon -->
    <!-- the current sweep, temporarily quarantine any ports that timed -->
    <!-- out, and resweep.  This is intended to limit the amount of time -->
    <!-- the FM spends in any one sweep and increase responsiveness in -->
    <!-- the presence of disruptions. -->
    <CumulativeTimeoutLimit>300</CumulativeTimeoutLimit>

    <!-- When there are a large number of fabric changes at once, the SM -->
    <!-- could have lots of errors while attempting to access/program -->
    <!-- devices which disappeared mid-sweep.  If the SM has more than -->
    <!-- SweepErrorsThreshold in a given sweep, it will give up and start -->
    <!-- the sweep over.  Should SweepAbandonThreshold sweeps fail in a row -->
    <!-- the SM will will do its best to complete the sweep as is. -->
    <SweepErrorsThreshold>0</SweepErrorsThreshold>                                                                     <!--SM_0_topo_errors_threshold:dec-->
    <SweepAbandonThreshold>3</SweepAbandonThreshold>                                                                   <!--SM_0_topo_abandon_threshold:dec-->
    <!-- If a given port issues more than TrapThreshold traps/minute -->
    <!-- it will be disabled as an unstable port.  0 disables this feature. -->
    <!-- The traps managed by this threshold are Traps 129-131. -->
    <!-- These include traps for port Local Link Integrity threshold, -->
    <!-- Excessive Buffer Overrun, and Flow Control Update watchdog timer. -->
    <!-- Valid values to enable this feature are 10-100. -->
    <TrapThreshold>0</TrapThreshold>                                                                                   <!--SM_0_trap_threshold:dec-->
    <!-- TrapThresholdMinCount is minimum number of traps required -->
    <!-- to consider that TrapThreshold rate has been been reached. -->
    <!-- For example if TrapThreshold is set to 10 traps/minute and -->
    <!-- TrapThresholdMinCount is set to 5, the port will be disabled  -->
    <!-- after 5 traps are received at the rate of 10 traps per minute -->
    <!-- i.e. 5 traps in 30 seconds. -->
    <!-- This value must be greater than 2. Default is 10. Ignored if -->
    <!-- TrapThreshold is set to 0.-->
    <!-- Larger values will increase accuracy of detecting trap rate -->
    <!-- but also increase the time between a trap surge and the SM -->
    <!-- disabling a port. Very small values can lead to a port being -->
    <!-- disabled just after a few traps. -->
    <TrapThresholdMinCount>10</TrapThresholdMinCount>

    <!-- Multicast join/create/deletes result in a SM sweeps. -->
    <!-- A pathological node can cause a denial of service attack by  -->
    <!-- excessive creates and deletes of multicast groups.  The -->
    <!-- following limits the number of multicast Set/Delete sequences -->
    <!-- that a node can issue before the SM takes action to quiet  -->
    <!-- the node. --> 
    <!-- The number of deletes allowed within a given interval is limited -->
    <!-- by the following parameters.  -->
    <!-- When McDosThreshold is zero, monitoring of MC DOS is disabled. -->
    <McDosThreshold>0</McDosThreshold>
    <!-- Default interval is 60 seconds.  -->
    <McDosInterval>60</McDosInterval>
    <!-- McDosAction, the action to take if MC DOS is suspected. -->
    <!--    0 = Port will be disabled.  --> 
    <!--    1 = Port will be bounced.  --> 
    <McDosAction>0</McDosAction>

    <!-- Sometimes when a node is under heavy load, it may fail to respond -->
    <!-- to SMA queries for a while.  In order to prevent the SM from -->
    <!-- dropping such nodes from the fabric, the SM will allow a node to be -->
    <!-- non responsive for up to NonRespMaxCount sweeps and NonRespTimeout -->
    <!-- seconds before dropping it from the fabric. -->
    <NonRespTimeout>600</NonRespTimeout> <!-- in seconds -->                                                           <!--SM_0_non_resp_tsec:dec-->
    <NonRespMaxCount>3</NonRespMaxCount>                                                                               <!--SM_0_non_resp_max_count:dec-->
      
    <!-- **************** SM Logging/Debug **************************** -->
    <!-- When nodes appear or disappear from the fabric, a message is logged -->
    <!-- This can set a threshold on how many such messages to output per -->
    <!-- sweep.  Once NodeAppearanceMsgThreshold messages are logged in a -->
    <!-- given sweep, the remainder are output at a lower log level (INFO) -->
    <!-- Hence avoiding excessive log messages when significant -->
    <!-- fabric changes occur.  0 means no limit. -->
    <NodeAppearanceMsgThreshold>100</NodeAppearanceMsgThreshold>                                                       <!--SM_0_node_appearance_msg_thresh:dec-->
    <SmPerfDebug>0</SmPerfDebug> <!-- log additional SM sweep info -->                                                 <!--SM_0_sm_debug_perf:dec-->
    <SaPerfDebug>0</SaPerfDebug> <!-- log additional SA query info -->                                                 <!--SM_0_sa_debug_perf:dec-->
    <!-- <Debug>0</Debug> -->                                                                                          <!--#SM_0_debug:dec-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#SM_0_sa_debug_rmpp:dec-->

    <!-- **************** Miscellaneous **************************** -->
    <LID>0</LID> <!-- lid for this SM, 0=pick any available -->                                                        <!--SM_0_lid:dec-->

    <!-- The number of high order bits (set to one) used for multicast -->
    <!-- addresses when the address is greater than 16 bits. -->
    <MulticastMask>4</MulticastMask>

    <!-- How are unicast LIDs & LMCs assigned to end-ports -->
    <!-- Serial: iterate over unicast LID space and assign the next -->
    <!--  contiguous unassigned LID range large enough for the LMC -->
    <!--  settings in use. -->
    <!-- Topology: assign LID and LMC values from ports defined in -->
    <!--  ExpectedLinks in the topology file used by PreDefinedTopology -->
    <!--  Requires that PreDefinedTopology be enabled. With LidStrategy -->
    <!--  Topology, nodes not in the PreDefinedTopology file will not -->
    <!--  be activated -->
    <LidStrategy>Serial</LidStrategy>

    <!-- DSAP is part of job startup scalability improvements -->
    <!-- Refer to documentation for details on how to setup and use DSAP -->
    <DsapInUse>0</DsapInUse>

    <!-- Appliance nodes are nodes whose self-reported NodeGUIDs are -->
    <!-- expected not to match the NeighborNodeGUID on the appliance node's -->
    <!-- peer ports. SmAppliances is used to prevent these nodes from being -->
    <!-- quarantined by SM. -->
    <SmAppliances>
        <Enable>0</Enable> <!-- Disable(0) or enable(1) appliance checking. -->
        <!-- Add node GUID for appliance node as it will appear in appliance -->
        <!-- node's peer ports' NeighborNodeGUID.  Limited to five entries -->
        <!-- (Appliance01 to Appliance05) -->
        <!-- <Appliance01>0x001175010157e518</Appliance01> -->
        <!-- <Appliance02>0x001175010157e518</Appliance02> -->
        <!-- <Appliance03>0x001175010157e518</Appliance03> -->
        <!-- <Appliance04>0x001175010157e518</Appliance04> -->
        <!-- <Appliance05>0x001175010157e518</Appliance05> -->
    </SmAppliances>

    <!-- Force the resetting of all attributes (including LFTs) on a -->
    <!-- resweep. Can be used to force devices out of a bad state.   -->
    <ForceAttributeRewrite>0</ForceAttributeRewrite>

    <!-- Enables fabric activation optimization to reduce packet counts -->
    <!-- during fabric bring up. 0-Disable, 1-Switches only, 2-All devices -->
    <SwitchCascadeActivateEnable>1</SwitchCascadeActivateEnable>

    <!-- Number of times to retry activation upon detecting an armed port -->
    <!-- with a non-armed/active neighbor. -->
    <NeighborNormalRetries>10</NeighborNormalRetries>

    <!-- Number of port bounce events to log before suppressing the rest. -->
    <!-- 0 - No Limit, Any other number specifies exact number per sweep. -->
    <PortBounceLogLimit>0</PortBounceLogLimit>

    <!-- Overrides of the Common.Shared parameters if desired -->
    <!-- <Priority>0</Priority> --> <!-- 0 to 15, higher wins -->                                                      <!--#SM_0_priority:dec-->
    <!-- <ElevatedPriority>0</ElevatedPriority> --> <!-- 0 to 15, higher wins -->                                      <!--#SM_0_elevated_priority:dec-->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#SM_0_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#SM_0_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->

    <!-- Alternative to use of LogLevel.  Use of LogLevel recommended. -->
    <!-- for each subsystem there can be a LogMask.  The mask selects -->
    <!-- severities of log messages to enable: --> 
    <!-- 0x1=fatal, 0x2=actionable error, 0x4=actionable warning, -->
    <!-- 0x8=actionable notice, 0x10=actionable info, 0x20=error, 0x40=warn, -->
    <!-- 0x80=notice, 0x100=progress, 0x200=info, 0x400=verbose, 0x800=data, -->
    <!-- 0x1000=debug1, 0x2000=debug2, 0x4000=debug3, 0x8000=debug4 -->
    <!-- 0x10000=func call, 0x20000=func args, 0x40000=func exit, -->
    <!-- For Host SM, the Linux syslog service will need to have an -->
    <!-- appropriate level of logging enabled. -->
    <!-- For ESM corresponding Chassis Logging must also be enabled -->
    <!-- and Sm config applies to all managers. -->
    <!-- <CS_LogMask>0x00000000</CS_LogMask> -->
    <!-- <MAI_LogMask>0x000001ff</MAI_LogMask> -->
    <!-- <CAL_LogMask>0x000001ff</CAL_LogMask> -->
    <!-- <DVR_LogMask>0x000001ff</DVR_LogMask> -->
    <!-- <IF3_LogMask>0x000001ff</IF3_LogMask> -->
    <!-- <SM_LogMask>0x000001ff</SM_LogMask> -->
    <!-- <SA_LogMask>0x000001ff</SA_LogMask> -->
    <!-- <PM_LogMask>0x000001ff</PM_LogMask> -->
    <!-- <PA_LogMask>0x000001ff</PA_LogMask> -->
    <!-- <FE_LogMask>0x000001ff</FE_LogMask> -->
    <!-- <APP_LogMask>0x000001ff</APP_LogMask> -->

    <!-- ********************************************************************** -->	
    <!-- ***********Additional parameters for debug/development use************ -->
    <!-- ********************************************************************** -->    
    <!-- Default values are shown below -->

    <!-- <LoopTestOn>0</LoopTestOn> --> <!-- cable loop test -->                                                       <!--SM_0_loop_test_on:dec^=-->
    <!-- <LoopTestFastMode>0</LoopTestFastMode> -->
    <!-- <LoopTestPackets>5</LoopTestPackets> --> <!-- inject count -->                                                <!--SM_0_loop_test_packets:dec^=-->
    <!-- <LIDSpacing>0x0</LIDSpacing> --> <!-- spacing of LIDs to test LFT -->                                         <!--SM_0_topo_lid_offset:hex-->
    <!-- <SaRmppChecksum>0</SaRmppChecksum> --> <!-- RMPP internal checksum -->                                        <!--SM_0_sa_rmpp_checksum:dec-->
    <!-- <DynamicPortAlloc>1</DynamicPortAlloc> -->                                                                    <!--SM_0_dynamic_port_alloc:dec-->
    <!-- <CheckMftResponses>1</CheckMftResponses> -->
    <!-- <MonitorStandby>1</MonitorStandby> -->
    <!-- <UseCachedNodeData>0</UseCachedNodeData> -->
    <!-- If traps are received from the same port with in the below interval -->
    <!-- (in seconds) logging of traps from that port will be suppressed. -->
    <!-- Log suppression is disabled if set to 0. -->
    <!-- Default is log suppression enabled with interval set to 30 seconds. -->
    <!-- <TrapLogSuppressTriggerInterval>30</TrapLogSuppressTriggerInterval> -->
    <!-- <LoopbackMode>0</LoopbackMode> --> <!-- Enable to test HFIs operating in loopback mode. -->

    <!-- Bitmask controlling which kinds of errors will cause the device to bounce the link. -->
    <!-- 0x00000001:Reserved --> 
    <!-- 0x00000002:Illegal packet length in header -->
    <!-- 0x00000004:Packet longer than Length -->
    <!-- 0x00000008:Packet shorter than Length with normal tail -->
    <!-- 0x00000010:Illegal SLID (0, using multicast as SLID, does not include security validation of SLID) -->
    <!-- 0x00000020:Illegal DLID (0, doesn't match HFI) -->
    <!-- 0x00000040:Illegal L2 opcode -->
    <!-- 0x00000080:Unconfigured SC -->
    <!-- 0x00000100:Reserved -->
    <!-- 0x00000200:Body/Tail flit received without corresponding Head flit -->
    <!-- 0x00000400:Reserved -->
    <!-- 0x00000800:Preempting with same VL -->
    <!-- 0x00001000:Preempting a VL15 packet -->
    <!-- 0x00002000:VL marker for an unpreempted VL -->
    <!-- 0x00004000-0x00008000:Reserved -->
    <!-- 0x00010000:Distance violation between two head flits -->
    <!-- 0x00020000:Distance violation between two tail flits -->
    <!-- 0x00040000:Distance violation between two credit LF command flits -->
    <!-- 0x00080000:Credit return for unsupported VL -->
    <!-- 0x00100000:VL Marker received for unsupported VL or when VL marker not enabled for port -->
    <!-- 0x00200000:Exceeded the preemption nesting level -->
    <!-- 0x00400000:unknown or reserved control flit received -->
    <!-- 0x00800000:ExceedMulticastLimit -->
    <!-- 0x01000000-0x40000000:Reserved -->
    <!-- 0x80000000:Input buffer overrun by transmitting port -->
    <!-- Default bitmask is UnsupportedVLMarker | BadCtrlDist | BadTailDist | BadHeadDist | BadVLMarker -->
    <!-- <DefaultPortErrorAction>0x172000</DefaultPortErrorAction> -->

    <!-- A bitmask for SM to skip the writing of specified attributes -->
    <!-- <SkipAttributeWrite>0x1d74</SkipAttributeWrite> -->

    <!-- Storm Lake optimizations. -->
    <!-- <LftMultiblock>29</LftMultiblock> --> <!-- LFTs per MAD packet -->
    <!-- <UseAggregateMADs>1</UseAggregateMADs> --> <!-- Enable aggregate MADs -->

    <!-- Cable Info Caching Policy -->
    <!-- The SM can be configured to collect Cable Info data and make -->
    <!-- that data available via Cable Info SA queries.               -->
    <!-- This data can be collected either ByLink, ByPort or None     -->
    <!-- (disabled). The default is to collect the data ByLink, which -->
    <!-- means that the SM assumes that it is only necessary to query -->
    <!-- one end of each cable in the fabric. -->
    <!-- <CableInfoPolicy>ByLink</CableInfoPolicy> -->
    <!-- ********************************************************************** -->

  </Sm>

  <!-- Common FE (Fabric Executive) attributes -->
  <Fe>
    <!-- The FE is required by the Intel Omni-Path FM GUI. -->
    <!-- To enable the FE, configure the SslSecurity parameters in this file -->
    <!-- as desired. -->
    <!-- For Host FM then set Start to 1. -->
    <!-- For Embedded FM the Start parameter in this file is not used;  -->
    <!-- enable the FE via the smConfig and smPmStart chassis CLI commands. -->
    <Start>0</Start> <!-- default FE startup for all instances -->
    <!-- Overrides of the Common.Shared parameters if desired -->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#FE_0_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#FE_0_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
    <!-- <DefaultPKey>0xffff</DefaultPKey> -->                                                                         <!--#FE_0_default_pkey:hex-->

    <!-- Trap Subscriptions allow the FE to register for Traps that will be -->
    <!-- forwarded to an FE user with an open connection. "All" or 0xFFFF can -->
    <!-- be used to register to have the FE listen for all Traps. -->
    <!-- Default Traps are 64 and 65. -->
    <!-- <TrapSubscriptions> -->
    <!--   <TrapNumber>64</TrapNumber> --><!-- GID In Service (New Node) -->
    <!--   <TrapNumber>65</TrapNumber> --><!-- GID Out of Service (Node Disappears) -->
    <!-- </TrapSubscriptions> -->

    <!-- Time in microseconds between checking & attempting to reconnect to -->
    <!-- managers (SA/PM) that have become unreachable -->
    <!-- <ManagerCheckRate>60000000</ManagerCheckRate> -->

    <!-- Additional parameters for debug/development use -->
    <!-- <Debug>0</Debug> -->                                                                                          <!--#FE_0_debug:dec-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#FE_0_if3_debug_rmpp:dec-->

    <!-- Alternative to use of LogLevel.  Use of LogLevel recommended. -->
    <!-- for each subsystem there can be a LogMask.  The mask selects -->
    <!-- severities of log messages to enable: --> 
    <!-- 0x1=fatal, 0x2=actionable error, 0x4=actionable warning, -->
    <!-- 0x8=actionable notice, 0x10=actionable info, 0x20=error, 0x40=warn, -->
    <!-- 0x80=notice, 0x100=progress, 0x200=info, 0x400=verbose, 0x800=data, -->
    <!-- 0x1000=debug1, 0x2000=debug2, 0x4000=debug3, 0x8000=debug4 -->
    <!-- 0x10000=func call, 0x20000=func args, 0x40000=func exit, -->
    <!-- For Host SM, the Linux syslog service will need to have an -->
    <!-- appropriate level of logging enabled. -->
    <!-- For ESM corresponding Chassis Logging must also be enabled -->
    <!-- and Sm config applies to all managers. -->
    <!-- <CS_LogMask>0x00000000</CS_LogMask> -->
    <!-- <MAI_LogMask>0x000001ff</MAI_LogMask> -->
    <!-- <CAL_LogMask>0x000001ff</CAL_LogMask> -->
    <!-- <DVR_LogMask>0x000001ff</DVR_LogMask> -->
    <!-- <IF3_LogMask>0x000001ff</IF3_LogMask> -->
    <!-- <SM_LogMask>0x000001ff</SM_LogMask> -->
    <!-- <SA_LogMask>0x000001ff</SA_LogMask> -->
    <!-- <PM_LogMask>0x000001ff</PM_LogMask> -->
    <!-- <PA_LogMask>0x000001ff</PA_LogMask> -->
    <!-- <FE_LogMask>0x000001ff</FE_LogMask> -->
    <!-- <APP_LogMask>0x000001ff</APP_LogMask> -->
  </Fe>

  <!-- Common PM (Performance Manager) attributes -->
  <Pm>
    <!-- ESM does not support Start via XML configuration. Use CLI commands -->
    <Start>1</Start> <!-- default PM startup for all instances -->

    <ServiceLease>60</ServiceLease> <!-- ServiceRecord lease with SA seconds -->                                       <!--PM_0_timer:dec-->

    <!-- The PM constantly sweeps and computes fabric statistics -->
    <!-- The SweepInterval must be between 1 and 43200 seconds -->
    <SweepInterval>10</SweepInterval> <!-- time between sweeps in seconds -->                                          <!--PM_0_SweepInterval:dec-->

    <!-- The PM has a PA which supports client queries from tools such as -->
    <!-- opatop, opareport and the FE (for the Fabric Viewer). -->
    <!-- This sets the number of concurrent client queries allowed. -->
    <!-- The minimum setting for MaxClients is 3 -->
    <MaxClients>3</MaxClients>                                                                                         <!--PM_0_MaxClients:dec-->

    <!-- The PM can retain recent fabric topology and performance data. -->
    <!-- Each such dataset is referred to as an Image.  Images allow for -->
    <!-- access to recent history and/or Freeze Frame by clients -->
    <!-- However, each image consumes memory, so care must be taken not to -->
    <!-- take an excessive amount of memory, especially for larger fabrics -->
    <!-- FreezeFrameImages must be at least 2*MaxClients - 1, so minimum is 5 -->
    <!-- TotalImages must be at least FreezeFrameImages + 2. so minimum is 7 -->
    <TotalImages>10</TotalImages> <!-- total images for history and freeze -->                                         <!--PM_0_TotalImages:dec-->
    <FreezeFrameImages>5</FreezeFrameImages> <!-- max unique frozen images -->                                         <!--PM_0_FreezeFrameImages:dec-->
    <!-- If a PA client application hangs or dies, after this much time all -->
    <!-- its frozen images will be released -->
    <FreezeFrameLease>60</FreezeFrameLease> <!-- in seconds -->
    <!-- The MASTER PM sends copies of RAM-resident images to STANDBY PMs. -->
    <!-- ImageUpdateInterval is the minimum (fastest) interval, -->
    <!-- in seconds, at which the update will occur.  The MASTER will update -->
    <!-- all STANDBY PMs in the specified interval.  If ImageUpdateInterval -->
    <!-- is set to 0, no RAM-resident images will be copied, nor will -->
    <!-- short-term PA history files be copied to STANDBY PMs. -->
    <!-- This value must be less than PM SweepInterval. -->
    <ImageUpdateInterval>5</ImageUpdateInterval>                                                                       <!--PM_0_ImageUpdateInterval:dec-->

    <!-- Thresholds for the classes of error counters -->
    <!-- 0 causes given class of errors to be ignored -->
    <Thresholds>
        <Integrity>100</Integrity>
        <Congestion>100</Congestion>
        <SmaCongestion>100</SmaCongestion>
        <Bubble>100</Bubble>
        <Security>10</Security>
        <Routing>100</Routing>
    </Thresholds>
    <!-- maximum ports per PM Sweep to log if exceeded threshold -->
    <!-- for given class of error counters.  0 suppresses logging  -->
    <ThresholdsExceededMsgLimit>
        <Integrity>10</Integrity>                                                                                      <!--PM_0_ThresholdsExceededMsgLimit_Integrity:dec-->
        <Congestion>0</Congestion>
        <SmaCongestion>0</SmaCongestion>
        <Bubble>0</Bubble>
        <Security>10</Security>                                                                                        <!--PM_0_ThresholdsExceededMsgLimit_Security:dec-->
        <Routing>10</Routing>                                                                                          <!--PM_0_ThresholdsExceededMsgLimit_Routing:dec-->
    </ThresholdsExceededMsgLimit>

    <!-- Weight to use for each individual counter when computing Integrity -->
    <!-- 0 causes given counter to be ignored -->
    <IntegrityWeights>
        <LocalLinkIntegrityErrors>0</LocalLinkIntegrityErrors>
        <RcvErrors>100</RcvErrors>
        <ExcessiveBufferOverruns>100</ExcessiveBufferOverruns>
        <LinkErrorRecovery>0</LinkErrorRecovery>
        <LinkDowned>25</LinkDowned>
        <UncorrectableErrors>100</UncorrectableErrors>
        <FMConfigErrors>100</FMConfigErrors>
        <!-- LQI is first put through an equation before used in Integrity -->
        <!-- category calculation: 2^(5-LQI)-1 -->
        <LinkQualityIndicator>40</LinkQualityIndicator>
        <!-- The number of lanes down for this port: -->
        <!--  LinkWidth.Active - LinkWidthDowngrade.RxActive -->
        <LinkWidthDowngrade>100</LinkWidthDowngrade>
    </IntegrityWeights>

    <!-- Weight to use for each individual counter when computing Congestion -->
    <!-- Pct (Percentage) means the specified counter is divided by the -->
    <!-- appropriate data transfer counter, then normalized to a -->
    <!-- predetermined range, then weighted, and summed into the category -->
    <!-- 0 causes given counter to be ignored -->
    <CongestionWeights>
        <XmitWaitPct>0</XmitWaitPct> <!-- 0.01% to 1%-->
        <CongDiscards>100</CongDiscards>
        <RcvFECNPct>5</RcvFECNPct> <!-- 0.1% to 10%-->
        <RcvBECNPct>1</RcvBECNPct> <!-- 0.1% to 10%-->
        <XmitTimeCongPct>25</XmitTimeCongPct> <!-- 0.1% to 10%-->
        <MarkFECNPct>25</MarkFECNPct> <!-- 0.1% to 10%-->
    </CongestionWeights>

    <!-- Resolution determines the number of LocalLinkIntegrity or -->
    <!-- LinkErrorRecovery errors must occur before the PMA will -->
    <!-- include them in the ErrorCounterSummary. -->
    <Resolution>
        <LocalLinkIntegrity>10000</LocalLinkIntegrity>
        <LinkErrorRecovery>1024</LinkErrorRecovery>
    </Resolution>

    <!-- This controls when the PM clears PMA Error counters -->
    <!-- 0 = clear when non-zero -->
    <!-- 1 = clear when 1/8 of individual counters max -->
    <!-- 2 = clear when 2/8 of individual counters max -->
    <!-- 3 = clear when 3/8 of individual counters max -->
    <!-- 4 = clear when 4/8 of individual counters max -->
    <!-- 5 = clear when 5/8 of individual counters max -->
    <!-- 6 = clear when 6/8 of individual counters max -->
    <!-- 7 = clear when 7/8 of individual counters max -->
    <ErrorClear>7</ErrorClear>

    <!-- These control if the PM attempts to clear these counter types -->
    <ClearDataXfer>0</ClearDataXfer> <!-- Clear Data Transfer Counters -->
    <Clear64bit>0</Clear64bit> <!-- Clear 64-bit Error Counters -->
    <Clear32bit>1</Clear32bit> <!-- Clear 32-bit Error Counters -->
    <Clear8bit>1</Clear8bit> <!-- Clear 8-bit Error Counters -->

    <!-- These parameters provide control over how the PM accesses the -->
    <!-- PMAs on various devices. Devices may be avoided if they are -->
    <!-- known to not support a PMA. -->
    <ProcessHFICounters>1</ProcessHFICounters> <!-- process HFI Counters -->
    <ProcessVLCounters>1</ProcessVLCounters> <!-- process Per-VL Counters -->
    <ProcessErrorInfo>1</ProcessErrorInfo> <!-- process PMA Error Info -->

    <!-- These parameters tune how many concurrent PMA requests the PM -->
    <!-- can have in flight while querying the PMAs in the fabric. -->
    <PmaBatchSize>2</PmaBatchSize> <!-- max parallel requests to a given PMA -->
    <MaxParallelNodes>10</MaxParallelNodes> <!-- max devices in parallel -->

    <!-- The PM waits up to RespTimeout milliseconds for PMA responses. -->
    <!-- Upon a timeout, up to MaxAttempts are attempted for a given request -->
    <MaxAttempts>3</MaxAttempts>
    <RespTimeout>250</RespTimeout>
    <!-- PM will start with MinRespTimeout as the timeout value for requests -->
    <!-- and use multiples of this value for subsequent attempts if there is -->
    <!-- a timeout in the previous attempt. PM will keep retrying till -->
    <!-- cumulative sum of timeouts for retries is less than -->
    <!-- RespTimeout multiplied by MaxAttempts. -->
    <!-- If MinRespTimeout is set to 0, upon timeout, up to MaxAttempts -->
    <!-- are attempted with each attempt having a timeout of RespTimeout -->
    <MinRespTimeout>35</MinRespTimeout> <!-- in milliseconds -->

    <!-- This sets a limit on the number of PMA Node or Port warning log -->
    <!-- messages output per sweep -->
    <SweepErrorsLogThreshold>10</SweepErrorsLogThreshold>

    <!-- This sets a limit on the number of Port ErrorInfo register log -->
    <!-- messages per sweep.                                            -->
    <!--  A value of "0" will disable logging for the register          -->
    <!--  A value of "Unlimited" will not limit the output              -->
    <!-- Note: Requires ProcessErrorInfo set to 1                       -->
    <SweepErrorInfoLogThresholds>
        <Integrity>Unlimited</Integrity>
        <Security>10</Security>
        <Routing>10</Routing>
    </SweepErrorInfoLogThresholds>

    <!-- Short Term History will enable the PM to store an extended time -->
    <!-- period of history data on the disk. -->
    <!-- The data will be compressed before it is stored. -->
    <!-- StorageLocation is where the history files will be stored. -->
    <!--    It must be a full filepath, beginning with a '/' -->
    <!-- TotalHistory is the total number of hours of history that will be -->
    <!--    stored. This is a limit on the total amount of data stored, and -->
    <!--    not a limit on a file's age. PM downtime does not count towards -->
    <!--    the total time -->
    <!-- ImagesPerComposite determines how many images will be compounded -->
    <!--    into a single image as part of writing to the file. A higher -->
    <!--    number will save disk space but will result in a lower data -->
    <!--    granularity. Must not be 0. -->
    <!-- MaxDiskSpace puts a cap on how much disk space the short term -->
    <!--    history is allowed to use. If this size is exceeded, the oldest -->
    <!--    files will be deleted to save space. -->
    <!-- CompressionDivisions determines how many divisions will be used to -->
    <!--    concurrently compress or decompress data. Recommend less than -->
    <!--    or equal to number of processing cores of the management node, -->
    <!--    must not exceed 32 -->
    <ShortTermHistory>
        <Enable>1</Enable>
        <!-- <StorageLocation>/var/lib/opa-fm/pahistory</StorageLocation> --> <!-- must be absolute path -->
        <TotalHistory>24</TotalHistory> <!-- in hours -->
        <ImagesPerComposite>3</ImagesPerComposite>
        <MaxDiskSpace>1024</MaxDiskSpace> <!-- in MiB -->
        <CompressionDivisions>8</CompressionDivisions>
    </ShortTermHistory>

    <!-- Overrides of the Common.Shared parameters if desired -->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#PM_0_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#PM_0_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
    <!-- <Priority>0</Priority> --> <!-- 0 to 15, higher wins -->                                                      <!--#PM_0_priority:dec-->
    <!-- <ElevatedPriority>0</ElevatedPriority> --> <!-- 0 to 15, higher wins -->                                      <!--#PM_0_elevated_priority:dec-->
    <!-- <DefaultPKey>0xffff</DefaultPKey> -->                                                                         <!--#PM_0_default_pkey:hex-->

    <!-- Additional parameters for debug/development use -->
    <!-- <Debug>0</Debug> -->                                                                                          <!--#PM_0_debug:dec-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#PM_0_if3_debug_rmpp:dec-->

    <!-- Alternative to use of LogLevel.  Use of LogLevel recommended. -->
    <!-- for each subsystem there can be a LogMask.  The mask selects -->
    <!-- severities of log messages to enable: --> 
    <!-- 0x1=fatal, 0x2=actionable error, 0x4=actionable warning, -->
    <!-- 0x8=actionable notice, 0x10=actionable info, 0x20=error, 0x40=warn, -->
    <!-- 0x80=notice, 0x100=progress, 0x200=info, 0x400=verbose, 0x800=data, -->
    <!-- 0x1000=debug1, 0x2000=debug2, 0x4000=debug3, 0x8000=debug4 -->
    <!-- 0x10000=func call, 0x20000=func args, 0x40000=func exit, -->
    <!-- For Host SM, the Linux syslog service will need to have an -->
    <!-- appropriate level of logging enabled. -->
    <!-- For ESM corresponding Chassis Logging must also be enabled -->
    <!-- and Sm config applies to all managers. -->
    <!-- <CS_LogMask>0x00000000</CS_LogMask> -->
    <!-- <MAI_LogMask>0x000001ff</MAI_LogMask> -->
    <!-- <CAL_LogMask>0x000001ff</CAL_LogMask> -->
    <!-- <DVR_LogMask>0x000001ff</DVR_LogMask> -->
    <!-- <IF3_LogMask>0x000001ff</IF3_LogMask> -->
    <!-- <SM_LogMask>0x000001ff</SM_LogMask> -->
    <!-- <SA_LogMask>0x000001ff</SA_LogMask> -->
    <!-- <PM_LogMask>0x000001ff</PM_LogMask> -->
    <!-- <PA_LogMask>0x000001ff</PA_LogMask> -->
    <!-- <FE_LogMask>0x000001ff</FE_LogMask> -->
    <!-- <APP_LogMask>0x000001ff</APP_LogMask> -->
  </Pm>

</Common>

<!-- A single FM Instance/subnet - this is the only instance supported for ESM -->
<Fm>
  <!-- Additional Instance Specific sets of applications -->
  <Applications>
  </Applications>

  <!-- Additional Instance Specific groups of devices -->
  <DeviceGroups>
  </DeviceGroups>

  <!-- Additional Instance Specific Virtual Fabrics -->
  <VirtualFabrics>
  </VirtualFabrics>


  <!-- Shared Instance config, applies to all components: SM, PM and FE -->
  <Shared>
    <!-- Fm.Shared.Start controls overall startup of the Instance. -->
    <!-- If 0, none of the components in the Instance are started. -->
    <!-- If 1, instance is enabled and Fm.Sm.Start, Fm.Pm.Start, etc -->
    <!-- control startup of each manager.  The default for each manager -->
    <!-- is defined by Common.Sm.Start, Common.Pm.Start, etc -->
    <!-- ESM does not support Start via XML configuration. Use CLI commands -->
    <Start>1</Start>
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->

    <!-- Name, Hfi, Port, and PortGUID are ignored for ESM since they -->
    <!-- are automatically set -->
    <Name>fm0</Name> <!-- also for logging with _sm, _fe, _pm appended -->                                             <!--SM_0_name-->
    <Hfi>1</Hfi> <!-- local HFI to use for FM instance, 1=1st HFI -->                                                  <!--SM_0_device:plus-->
    <Port>1</Port> <!-- local HFI port to use for FM instance, 1=1st Port -->                                          <!--SM_0_port:dec-->
    <PortGUID>0x0000000000000000</PortGUID> <!-- local port to use for FM -->                                          <!--SM_0_portGuid-->
    <SubnetPrefix>0xfe80000000000000</SubnetPrefix> <!-- should be unique -->                                          <!--SM_0_gidprefix==0xfe80000000000000-->

    <!-- Overrides of the Common.Shared parameters if desired -->
    <!-- ESM does not support LogFile -->
    <!-- <LogFile>/var/log/fm0_log</LogFile> --> <!-- log for this instance -->
  </Shared>

  <!-- Instance Specific SM (Subnet Manager) attributes -->
  <Sm>
    <!-- Overrides of the Common.Shared, Common.Sm or Fm.Shared parameters -->
    <!-- ESM does not support Start via XML configuration. Use CLI commands -->
    <!-- <Start>1</Start> -->                                                                                          <!--#SM_0_start:dec==1-->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->

    <PreDefinedTopology>
        <Enable>0</Enable>
        <TopologyFilename>/etc/opa/topology.0:0.xml</TopologyFilename>
    </PreDefinedTopology>
  </Sm>

  <!-- Instance Specific FE (Fabric Executive Manager) attributes -->
  <Fe>
    <TcpPort>3245</TcpPort>  <!-- TCP socket to listen for FV on -->                                                   <!--FE_0_listen-->
    <!-- Overrides of the Common.Shared, Common.Fe or Fm.Shared parameters -->
    <!-- See Common.Fe for more information about enabling the FE -->
    <!-- <Start>0</Start> -->                                                                                          <!--#FE_0_start:dec==0-->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
  </Fe>

  <!-- Instance Specific PM (Performance Manager) attributes -->
  <Pm>
    <!-- Overrides of the Common.Shared, Common.Pm or Fm.Shared parameters -->
    <!-- ESM does not support Start via XML configuration. Use CLI commands -->
    <!-- <Start>1</Start> -->                                                                                          <!--#PM_0_start:dec==1-->
    <ShortTermHistory>
        <StorageLocation>/var/lib/opa-fm/pm0_pahistory</StorageLocation> <!-- must be absolute path -->
    </ShortTermHistory>
  </Pm>
</Fm>

<!-- A single FM Instance/subnet -->
<Fm>
  <!-- Additional Instance Specific sets of applications -->
  <Applications>
  </Applications>

  <!-- Additional Instance Specific groups of devices -->
  <DeviceGroups>
  </DeviceGroups>

  <!-- Additional Instance Specific Virtual Fabrics -->
  <VirtualFabrics>
  </VirtualFabrics>

  <!-- Shared Instance config, applies to all components: SM, PM and FE -->
  <Shared>
    <Start>0</Start> <!-- Overall Instance Startup, see fm0 for more info -->                                          <!--SM_1_start:dec-->
    <Name>fm1</Name> <!-- also for logging with _sm, _fe, _pm appended -->                                             <!--SM_1_name-->
    <Hfi>1</Hfi> <!-- local HFI to use for FM instance, 1=1st HFI -->                                                  <!--SM_1_device:plus-->
    <Port>2</Port> <!-- local HFI port to use for FM instance, 1=1st Port -->                                          <!--SM_1_port:dec-->
    <PortGUID>0x0000000000000000</PortGUID> <!-- local port to use for FM -->                                          <!--SM_1_portGuid-->
    <SubnetPrefix>0xfe80000000001001</SubnetPrefix> <!-- should be unique -->                                          <!--SM_1_gidprefix==0xfe80000000000000-->
    <!-- Overrides of the Common.Shared or Fm.Shared parameters if desired -->
    <!-- <LogFile>/var/log/fm1_log</LogFile> --> <!-- log for this instance -->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
  </Shared>

  <!-- Instance Specific SM (Subnet Manager) attributes -->
  <Sm>
    <!-- Overrides of the Common.Shared, Common.Sm or Fm.Shared parameters -->
    <!-- <Start>0</Start> -->                                                                                          <!--#SM_1_start:dec==0-->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
    <!-- <MasterPingInterval>5</MasterPingInterval> -->                                                                <!--#SM_1_master_ping_interval:dec-->
    <!-- <MasterPingMaxFail>3</MasterPingMaxFail> -->                                                                  <!--#SM_1_master_ping_max_fail:dec-->
    <!-- <DbSyncInterval>15</DbSyncInterval> -->                                                                       <!--#SM_1_dbsync_interval:dec-->
    <!-- <SpineFirstRouting>0</SpineFirstRouting> -->                                                                  <!--#SM_1_spine_first_routing:dec-->
    <!-- <Lmc>0</Lmc> -->                                                                                              <!--#SM_1_lmc:dec-->
    <Multicast>
      <!-- <DisableRateCheck>0</DisableRateCheck> -->                                                                  <!--#SM_1_disable_mcast_check:dec-->
      <!-- <MLIDTableCap>1024</MLIDTableCap> -->                                                                       <!--#SM_1_mcastMLidTableCap:dec-->
      <!-- Additional Instance Specific MLIDShare settings -->
      <!-- Additional Instance Specific MulticastGroup settings -->
    </Multicast>
    <!-- <SmKey>0x0</SmKey> -->                                                                                        <!--#SM_1_key:hex-->
    <!-- <MKey>0x0</MKey> -->                                                                                          <!--#SM_1_Mkey:hex-->
    <!-- <SwitchLifetime>33ms</SwitchLifetime> -->                                                                     <!--#SM_1_switchlifetime:2n-->
    <!-- <HoqLife>8ms</HoqLife> -->                                                                                    <!--#SM_1_hoqlife:2n-->
    <!-- <VLStallCount>7</VLStallCount> -->                                                                            <!--#SM_1_vlstall:dec-->

    <AdaptiveRouting>                                                                                                  <!--#SM_1_ar_enable#=-->
      <Enable>0</Enable>                                                                                               <!--#SM_1_ar_enable:dec^=-->
      <LostRouteOnly>0</LostRouteOnly>                                                                                 <!--#SM_1_ar_lost_route_only:dec^=-->
    </AdaptiveRouting>                                                                                                 <!--#SM_1_ar_enable#=-->
    <!-- <SaRespTime>1s</SaRespTime> -->                                                                               <!--#SM_1_saRespTime:2n-->
    <!-- <NoReplyIfBusy>0</NoReplyIfBusy> -->
    <!-- <PacketLifetime>1s</PacketLifetime> -->                                                                       <!--#SM_1_saPacketLifetime:2n-->
    <DynamicPacketLifetime>
      <!-- <Enable>0</Enable> -->                                                                                      <!--#SM_1_dynamicPlt:dec^=-->
      <!-- <Hops01>67ms</Hops01> -->                                                                                   <!--#SM_1_dynamicPlt_01:2n^=-->
      <!-- <Hops02>134ms</Hops02> -->                                                                                  <!--#SM_1_dynamicPlt_02:2n^=-->
      <!-- <Hops03>134ms</Hops03> -->                                                                                  <!--#SM_1_dynamicPlt_03:2n^=-->
      <!-- <Hops04>268ms</Hops04> -->                                                                                  <!--#SM_1_dynamicPlt_04:2n^=-->
      <!-- <Hops05>268ms</Hops05> -->                                                                                  <!--#SM_1_dynamicPlt_05:2n^=-->
      <!-- <Hops06>268ms</Hops06> -->                                                                                  <!--#SM_1_dynamicPlt_06:2n^=-->
      <!-- <Hops07>268ms</Hops07> -->                                                                                  <!--#SM_1_dynamicPlt_07:2n^=-->
      <!-- <Hops08>536ms</Hops08> -->                                                                                  <!--#SM_1_dynamicPlt_08:2n^=-->
      <!-- <Hops09>536ms</Hops09> -->                                                                                  <!--#SM_1_dynamicPlt_09:2n^=-->
    </DynamicPacketLifetime>
    <!-- <SmaBatchSize>2</SmaBatchSize> -->                                                                            <!--#SM_1_sma_batch_size:dec^=-->
    <!-- <MaxParallelReqs>3</MaxParallelReqs> -->                                                                      <!--#SM_1_max_parallel_reqs:dec^=-->
    <!-- <SweepInterval>300</SweepInterval> -->                                                                        <!--#SM_1_timer:dec-->
    <!-- <MaxAttempts>3</MaxAttempts> -->                                                                              <!--#SM_1_max_retries:dec-->
    <!-- <RespTimeout>250</RespTimeout> -->  <!-- in milliseconds -->                                                  <!--#SM_1_rcv_wait_msec:dec-->
    <!-- <SweepErrorsThreshold>0</SweepErrorsThreshold> -->                                                            <!--#SM_1_topo_errors_threshold:dec-->
    <!-- <SweepAbandonThreshold>3</SweepAbandonThreshold> -->                                                          <!--#SM_1_topo_abandon_threshold:dec-->
    <!-- <TrapThreshold>0</TrapThreshold> -->                                                                          <!--#SM_1_trap_threshold:dec-->
    <!-- <NonRespTimeout>600</NonRespTimeout> --> <!-- in seconds -->                                                  <!--#SM_1_non_resp_tsec:dec==600-->
    <!-- <NonRespMaxCount>3</NonRespMaxCount> -->                                                                      <!--#SM_1_non_resp_max_count:dec==3-->
    <!-- <NodeAppearanceMsgThreshold>0</NodeAppearanceMsgThreshold> -->                                                <!--#SM_1_node_appearance_msg_thresh:dec-->
    <!-- <SmPerfDebug>0</SmPerfDebug> --> <!-- log additional SM sweep info -->                                        <!--#SM_1_sm_debug_perf:dec-->
    <!-- <SaPerfDebug>0</SaPerfDebug> --> <!-- log additional SA query info -->                                        <!--#SM_1_sa_debug_perf:dec-->
    <!-- <Debug>0</Debug> -->                                                                                          <!--#SM_1_debug:dec-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#SM_1_sa_debug_rmpp:dec-->
    <!-- <LID>0</LID> -->                                                                                              <!--#SM_1_lid:dec-->
    <!-- <Priority>0</Priority> --> <!-- 0 to 15, higher wins -->                                                      <!--#SM_1_priority:dec-->
    <!-- <ElevatedPriority>0</ElevatedPriority> --> <!-- 0 to 15, higher wins -->                                      <!--#SM_1_elevated_priority:dec-->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#SM_1_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#SM_1_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
    <!-- <LoopTestOn>0</LoopTestOn> --> <!-- cable loop test -->                                                       <!--#SM_1_loop_test_on:dec-->
    <!-- <LoopTestPackets>20</LoopTestPackets> --> <!-- inject count -->                                               <!--#SM_1_loop_test_packets:dec==1-->
    <!-- <LIDSpacing>0x0</LIDSpacing> --> <!-- spacing of LIDs to test LFT -->                                         <!--#SM_1_topo_lid_offset:hex-->
    <!-- <SaRmppChecksum>0</SaRmppChecksum> --> <!-- RMPP internal checksum -->                                        <!--#SM_1_sa_rmpp_checksum:dec-->
    <!-- <DynamicPortAlloc>1</DynamicPortAlloc> -->                                                                    <!--#SM_1_dynamic_port_alloc:dec-->

    <PreDefinedTopology>
      <Enable>0</Enable>
      <TopologyFilename>/etc/opa/topology.1:2.xml</TopologyFilename>
    </PreDefinedTopology>
  </Sm>

  <!-- Instance Specific FE (Fabric Executive Manager) attributes -->
  <Fe>
    <TcpPort>3246</TcpPort>  <!-- TCP socket to listen for FV on -->                                                   <!--FE_1_listen-->
    <!-- Overrides of the Common.Shared, Common.Fe or Fm.Shared parameters -->
    <!-- See Common.Fe for more information about enabling the FE -->
    <!-- <Start>0</Start> -->                                                                                          <!--#FE_1_start:dec==0-->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
    <!-- <Debug>0</Debug> -->                                                                                          <!--#FE_1_debug:dec-->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#FE_1_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#FE_1_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
    <!-- <DefaultPKey>0xffff</DefaultPKey> -->                                                                         <!--#FE_1_default_pkey:hex-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#FE_1_if3_debug_rmpp:dec-->
  </Fe>

  <!-- Instance Specific PM (Performance Manager) attributes -->
  <Pm>
    <!-- Overrides of the Common.Shared, Common.Pm or Fm.Shared parameters -->
    <!-- <Start>0</Start> -->                                                                                          <!--#PM_1_start:dec==0-->
    <!-- <SweepInterval>10</SweepInterval> --> <!-- time between sweeps in seconds -->                                 <!--#PM_1_SweepInterval:dec-->
    <!-- <TotalImages>10</TotalImages> --> <!-- total images for history and freeze -->                                <!--#PM_1_TotalImages:dec-->
    <!-- <FreezeFrameImages>5</FreezeFrameImages> --> <!-- max unique frozen images -->                                <!--#PM_1_FreezeFrameImages:dec-->
    <ShortTermHistory>
        <StorageLocation>/var/lib/opa-fm/pm1_pahistory</StorageLocation> <!-- must be absolute path -->
    </ShortTermHistory>
    <!-- <Debug>0</Debug> -->                                                                                          <!--#PM_1_debug:dec-->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#PM_1_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#PM_1_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
    <!-- <Priority>0</Priority> --> <!-- 0 to 15, higher wins -->                                                      <!--#PM_1_priority:dec-->
    <!-- <ElevatedPriority>0</ElevatedPriority> --> <!-- 0 to 15, higher wins -->                                      <!--#PM_1_elevated_priority:dec-->
    <!-- <DefaultPKey>0xffff</DefaultPKey> -->                                                                         <!--#PM_1_default_pkey:hex-->
    <!-- <ServiceLease>60</ServiceLease>  --> <!-- in seconds -->                                                      <!--#PM_1_timer:dec-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#PM_1_if3_debug_rmpp:dec-->
  </Pm>
</Fm>

<!-- A single FM Instance/subnet -->
<Fm>
  <!-- Additional Instance Specific sets of applications -->
  <Applications>
  </Applications>

  <!-- Additional Instance Specific groups of devices -->
  <DeviceGroups>
  </DeviceGroups>

  <!-- Additional Instance Specific Virtual Fabrics -->
  <VirtualFabrics>
  </VirtualFabrics>

  <!-- Shared Instance config, applies to all components: SM, PM and FE -->
  <Shared>
    <Start>0</Start> <!-- Overall Instance Startup, see fm0 for more info -->                                          <!--SM_2_start:dec-->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
    <Name>fm2</Name> <!-- also for logging with _sm, _fe, _pm appended -->                                             <!--SM_2_name-->
    <Hfi>2</Hfi> <!-- local HFI to use for FM instance, 1=1st HFI -->                                                  <!--SM_2_device:plus-->
    <Port>1</Port> <!-- local HFI port to use for FM instance, 1=1st Port -->                                          <!--SM_2_port:dec-->
    <PortGUID>0x0000000000000000</PortGUID> <!-- local port to use for FM -->                                          <!--SM_2_portGuid-->
    <SubnetPrefix>0xfe80000000001002</SubnetPrefix> <!-- should be unique -->                                          <!--SM_2_gidprefix==0xfe80000000000000-->
    <!-- Overrides of the Common.Shared or Fm.Shared parameters if desired -->
    <!-- <LogFile>/var/log/fm2_log</LogFile> --> <!-- log for this instance -->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
  </Shared>

  <!-- Instance Specific SM (Subnet Manager) attributes -->
  <Sm>
    <!-- Overrides of the Common.Shared, Common.Sm or Fm.Shared parameters -->
    <!-- <Start>0</Start> -->                                                                                          <!--#SM_2_start:dec==0-->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
    <!-- <MasterPingInterval>5</MasterPingInterval> -->                                                                <!--#SM_2_master_ping_interval:dec-->
    <!-- <MasterPingMaxFail>3</MasterPingMaxFail> -->                                                                  <!--#SM_2_master_ping_max_fail:dec-->
    <!-- <DbSyncInterval>15</DbSyncInterval> -->                                                                       <!--#SM_2_dbsync_interval:dec-->
    <!-- <SpineFirstRouting>0</SpineFirstRouting> -->                                                                  <!--#SM_2_spine_first_routing:dec-->
    <!-- <Lmc>0</Lmc> -->                                                                                              <!--#SM_2_lmc:dec-->
    <Multicast>
      <!-- <DisableRateCheck>0</DisableRateCheck> -->                                                                  <!--#SM_2_disable_mcast_check:dec-->
      <!-- <MLIDTableCap>1024</MLIDTableCap> -->                                                                       <!--#SM_2_mcastMLidTableCap:dec-->
      <!-- Additional Instance Specific MLIDShare settings -->
      <!-- Additional Instance Specific MulticastGroup settings -->
    </Multicast>
    <!-- <SmKey>0x0</SmKey> -->                                                                                        <!--#SM_2_key:hex-->
    <!-- <MKey>0x0</MKey> -->                                                                                          <!--#SM_2_Mkey:hex-->
    <!-- <SwitchLifetime>33ms</SwitchLifetime> -->                                                                     <!--#SM_2_switchlifetime:2n-->
    <!-- <HoqLife>8ms</HoqLife> -->                                                                                    <!--#SM_2_hoqlife:2n-->
    <!-- <VLStallCount>7</VLStallCount> -->                                                                            <!--#SM_2_vlstall:dec-->

    <AdaptiveRouting>                                                                                                  <!--#SM_2_ar_enable#=-->
      <Enable>0</Enable>                                                                                               <!--#SM_2_ar_enable:dec^=-->
      <LostRouteOnly>0</LostRouteOnly>                                                                                 <!--#SM_2_ar_lost_route_only:dec^=-->
    </AdaptiveRouting>                                                                                                 <!--#SM_2_ar_enable#=-->

    <!-- <SaRespTime>1s</SaRespTime> -->                                                                               <!--#SM_2_saRespTime:2n-->
    <!-- <NoReplyIfBusy>0</NoReplyIfBusy> -->
    <!-- <PacketLifetime>1s</PacketLifetime> -->                                                                       <!--#SM_2_saPacketLifetime:2n-->
    <DynamicPacketLifetime>
      <!-- <Enable>0</Enable> -->                                                                                      <!--#SM_2_dynamicPlt:dec^=-->
      <!-- <Hops01>67ms</Hops01> -->                                                                                   <!--#SM_2_dynamicPlt_01:2n^=-->
      <!-- <Hops02>134ms</Hops02> -->                                                                                  <!--#SM_2_dynamicPlt_02:2n^=-->
      <!-- <Hops03>134ms</Hops03> -->                                                                                  <!--#SM_2_dynamicPlt_03:2n^=-->
      <!-- <Hops04>268ms</Hops04> -->                                                                                  <!--#SM_2_dynamicPlt_04:2n^=-->
      <!-- <Hops05>268ms</Hops05> -->                                                                                  <!--#SM_2_dynamicPlt_05:2n^=-->
      <!-- <Hops06>268ms</Hops06> -->                                                                                  <!--#SM_2_dynamicPlt_06:2n^=-->
      <!-- <Hops07>268ms</Hops07> -->                                                                                  <!--#SM_2_dynamicPlt_07:2n^=-->
      <!-- <Hops08>536ms</Hops08> -->                                                                                  <!--#SM_2_dynamicPlt_08:2n^=-->
      <!-- <Hops09>536ms</Hops09> -->                                                                                  <!--#SM_2_dynamicPlt_09:2n^=-->
    </DynamicPacketLifetime>
    <!-- <SmaBatchSize>2</SmaBatchSize> -->                                                                            <!--#SM_2_sma_batch_size:dec^=-->
    <!-- <MaxParallelReqs>3</MaxParallelReqs> -->                                                                      <!--#SM_2_max_parallel_reqs:dec^=-->
    <!-- <SweepInterval>300</SweepInterval> -->                                                                        <!--#SM_2_timer:dec-->
    <!-- <MaxAttempts>3</MaxAttempts> -->                                                                              <!--#SM_2_max_retries:dec-->
    <!-- <RespTimeout>250</RespTimeout> -->  <!-- in milliseconds -->                                                  <!--#SM_2_rcv_wait_msec:dec-->
    <!-- <SweepErrorsThreshold>0</SweepErrorsThreshold> -->                                                            <!--#SM_2_topo_errors_threshold:dec-->
    <!-- <SweepAbandonThreshold>3</SweepAbandonThreshold> -->                                                          <!--#SM_2_topo_abandon_threshold:dec-->
    <!-- <TrapThreshold>0</TrapThreshold> -->                                                                          <!--#SM_2_trap_threshold:dec-->
    <!-- <NonRespTimeout>600</NonRespTimeout> --> <!-- in seconds -->                                                  <!--#SM_2_non_resp_tsec:dec==600-->
    <!-- <NonRespMaxCount>3</NonRespMaxCount> -->                                                                      <!--#SM_2_non_resp_max_count:dec==3-->
    <!-- <NodeAppearanceMsgThreshold>0</NodeAppearanceMsgThreshold> -->                                                <!--#SM_2_node_appearance_msg_thresh:dec-->
    <!-- <SmPerfDebug>0</SmPerfDebug> --> <!-- log additional SM sweep info -->                                        <!--#SM_2_sm_debug_perf:dec-->
    <!-- <SaPerfDebug>0</SaPerfDebug> --> <!-- log additional SA query info -->                                        <!--#SM_2_sa_debug_perf:dec-->
    <!-- <Debug>0</Debug> -->                                                                                          <!--#SM_2_debug:dec-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#SM_2_sa_debug_rmpp:dec-->
    <!-- <LID>0</LID> -->                                                                                              <!--#SM_2_lid:dec-->
    <!-- <Priority>0</Priority> --> <!-- 0 to 15, higher wins -->                                                      <!--#SM_2_priority:dec-->
    <!-- <ElevatedPriority>0</ElevatedPriority> --> <!-- 0 to 15, higher wins -->                                      <!--#SM_2_elevated_priority:dec-->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#SM_2_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#SM_2_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
    <!-- <LoopTestOn>0</LoopTestOn> --> <!-- cable loop test -->                                                       <!--#SM_2_loop_test_on:dec-->
    <!-- <LoopTestPackets>20</LoopTestPackets> --> <!-- inject count -->                                               <!--#SM_2_loop_test_packets:dec==1-->
    <!-- <SaRmppChecksum>0</SaRmppChecksum> --> <!-- RMPP internal checksum -->                                        <!--#SM_2_sa_rmpp_checksum:dec-->
    <!-- <DynamicPortAlloc>1</DynamicPortAlloc> -->                                                                    <!--#SM_2_dynamic_port_alloc:dec-->

    <PreDefinedTopology>
      <Enable>0</Enable>
      <TopologyFilename>/etc/opa/topology.2:1.xml</TopologyFilename>
    </PreDefinedTopology>
  </Sm>

  <!-- Instance Specific FE (Fabric Executive Manager) attributes -->
  <Fe>
    <TcpPort>3247</TcpPort>  <!-- TCP socket to listen for FV on -->                                                   <!--FE_2_listen-->
    <!-- Overrides of the Common.Shared, Common.Fe or Fm.Shared parameters -->
    <!-- See Common.Fe for more information about enabling the FE -->
    <!-- <Start>0</Start> -->                                                                                          <!--#FE_2_start:dec==0-->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
    <!-- <Debug>0</Debug> -->                                                                                          <!--#FE_2_debug:dec-->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#FE_2_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#FE_2_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
    <!-- <DefaultPKey>0xffff</DefaultPKey> -->                                                                         <!--#FE_2_default_pkey:hex-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#FE_2_if3_debug_rmpp:dec-->
  </Fe>

  <!-- Instance Specific PM (Performance Manager) attributes -->
  <Pm>
    <!-- Overrides of the Common.Shared, Common.Pm or Fm.Shared parameters -->
    <!-- <Start>0</Start> -->                                                                                          <!--#PM_2_start:dec==0-->
    <!-- <SweepInterval>10</SweepInterval> --> <!-- time between sweeps in seconds -->                                 <!--#PM_2_SweepInterval:dec-->
    <!-- <TotalImages>10</TotalImages> --> <!-- total images for history and freeze -->                                <!--#PM_2_TotalImages:dec-->
    <!-- <FreezeFrameImages>5</FreezeFrameImages> --> <!-- max unique frozen images -->                                <!--#PM_2_FreezeFrameImages:dec-->
    <ShortTermHistory>
        <StorageLocation>/var/lib/opa-fm/pm2_pahistory</StorageLocation> <!-- must be absolute path -->
    </ShortTermHistory>
    <!-- <Debug>0</Debug> -->                                                                                          <!--#PM_2_debug:dec-->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#PM_2_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#PM_2_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
    <!-- <Priority>0</Priority> -->  <!-- 0 to 15, higher wins -->                                                     <!--#PM_2_priority:dec-->
    <!-- <ElevatedPriority>0</ElevatedPriority> --> <!-- 0 to 15, higher wins -->                                      <!--#PM_2_elevated_priority:dec-->
    <!-- <DefaultPKey>0xffff</DefaultPKey> -->                                                                         <!--#PM_2_default_pkey:hex-->
    <!-- <ServiceLease>60</ServiceLease>  --> <!-- in seconds -->                                                      <!--#PM_2_timer:dec-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#PM_2_if3_debug_rmpp:dec-->
  </Pm>
</Fm>

<!-- A single FM Instance/subnet -->
<Fm>
  <!-- Additional Instance Specific sets of Applications -->
  <Applications>
  </Applications>

  <!-- Additional Instance Specific groups of devices -->
  <DeviceGroups>
  </DeviceGroups>

  <!-- Additional Instance Specific Virtual Fabrics -->
  <VirtualFabrics>
  </VirtualFabrics>

  <!-- Shared Instance config, applies to all components: SM, PM and FE -->
  <Shared>
    <Start>0</Start> <!-- Overall Instance Startup, see fm0 for more info -->                                          <!--SM_3_start:dec-->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
    <Name>fm3</Name> <!-- also for logging with _sm, _fe, _pm appended -->                                             <!--SM_3_name-->
    <Hfi>2</Hfi> <!-- local HFI to use for FM instance, 1=1st HFI -->                                                  <!--SM_3_device:plus-->
    <Port>2</Port> <!-- local HFI port to use for FM instance, 1=1st Port -->                                          <!--SM_3_port:dec-->
    <PortGUID>0x0000000000000000</PortGUID> <!-- local port to use for FM -->                                          <!--SM_3_portGuid-->
    <SubnetPrefix>0xfe80000000001003</SubnetPrefix> <!-- should be unique -->                                          <!--SM_3_gidprefix==0xfe80000000000000-->
    <!-- Overrides of the Common.Shared or Fm.Shared parameters if desired -->
    <!-- <LogFile>/var/log/fm3_log</LogFile> --> <!-- log for this instance -->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
  </Shared>

  <!-- Instance Specific SM (Subnet Manager) attributes -->
  <Sm>
    <!-- Overrides of the Common.Shared, Common.Sm or Fm.Shared parameters -->
    <!-- <Start>0</Start> -->                                                                                          <!--#SM_3_start:dec==0-->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
    <!-- <MasterPingInterval>5</MasterPingInterval> -->                                                                <!--#SM_3_master_ping_interval:dec-->
    <!-- <MasterPingMaxFail>3</MasterPingMaxFail> -->                                                                  <!--#SM_3_master_ping_max_fail:dec-->
    <!-- <DbSyncInterval>15</DbSyncInterval> -->                                                                       <!--#SM_3_dbsync_interval:dec-->
    <!-- <SpineFirstRouting>0</SpineFirstRouting> -->                                                                  <!--#SM_3_spine_first_routing:dec-->
    <!-- <Lmc>0</Lmc> -->                                                                                              <!--#SM_3_lmc:dec-->
    <Multicast>
      <!-- <DisableRateCheck>0</DisableRateCheck> -->                                                                  <!--#SM_3_disable_mcast_check:dec-->
      <!-- <MLIDTableCap>1024</MLIDTableCap> -->                                                                       <!--#SM_3_mcastMLidTableCap:dec-->
      <!-- Additional Instance Specific MLIDShare settings -->
      <!-- Additional Instance Specific MulticastGroup settings -->
    </Multicast>
    <!-- <SmKey>0x0</SmKey> -->                                                                                        <!--#SM_3_key:hex-->
    <!-- <MKey>0x0</MKey> -->                                                                                          <!--#SM_3_Mkey:hex-->
    <!-- <SwitchLifetime>33ms</SwitchLifetime> -->                                                                     <!--#SM_3_switchlifetime:2n-->
    <!-- <HoqLife>8ms</HoqLife> -->                                                                                    <!--#SM_3_hoqlife:2n-->
    <!-- <VLStallCount>7</VLStallCount> -->                                                                            <!--#SM_3_vlstall:dec-->

    <AdaptiveRouting>                                                                                                  <!--#SM_3_ar_enable#=-->
      <Enable>0</Enable>                                                                                               <!--#SM_3_ar_enable:dec^=-->
      <LostRouteOnly>0</LostRouteOnly>                                                                                 <!--#SM_3_ar_lost_route_only:dec^=-->
    </AdaptiveRouting>                                                                                                 <!--#SM_3_ar_enable#=-->

    <!-- <SaRespTime>1s</SaRespTime> -->                                                                               <!--#SM_3_saRespTime:2n-->
    <!-- <NoReplyIfBusy>0</NoReplyIfBusy> -->
    <!-- <PacketLifetime>1s</PacketLifetime> -->                                                                       <!--#SM_3_saPacketLifetime:2n-->
    <DynamicPacketLifetime>
      <!-- <Enable>0</Enable> -->                                                                                      <!--#SM_3_dynamicPlt:dec^=-->
      <!-- <Hops01>67ms</Hops01> -->                                                                                   <!--#SM_3_dynamicPlt_01:2n^=-->
      <!-- <Hops02>134ms</Hops02> -->                                                                                  <!--#SM_3_dynamicPlt_02:2n^=-->
      <!-- <Hops03>134ms</Hops03> -->                                                                                  <!--#SM_3_dynamicPlt_03:2n^=-->
      <!-- <Hops04>268ms</Hops04> -->                                                                                  <!--#SM_3_dynamicPlt_04:2n^=-->
      <!-- <Hops05>268ms</Hops05> -->                                                                                  <!--#SM_3_dynamicPlt_05:2n^=-->
      <!-- <Hops06>268ms</Hops06> -->                                                                                  <!--#SM_3_dynamicPlt_06:2n^=-->
      <!-- <Hops07>268ms</Hops07> -->                                                                                  <!--#SM_3_dynamicPlt_07:2n^=-->
      <!-- <Hops08>536ms</Hops08> -->                                                                                  <!--#SM_3_dynamicPlt_08:2n^=-->
      <!-- <Hops09>536ms</Hops09> -->                                                                                  <!--#SM_3_dynamicPlt_09:2n^=-->
    </DynamicPacketLifetime>
    <!-- <SmaBatchSize>2</SmaBatchSize> -->                                                                            <!--#SM_3_sma_batch_size:dec^=-->
    <!-- <MaxParallelReqs>3</MaxParallelReqs> -->                                                                      <!--#SM_3_max_parallel_reqs:dec^=-->
    <!-- <SweepInterval>300</SweepInterval> -->                                                                        <!--#SM_3_timer:dec-->
    <!-- <MaxAttempts>3</MaxAttempts> -->                                                                              <!--#SM_3_max_retries:dec-->
    <!-- <RespTimeout>250</RespTimeout> -->  <!-- in milliseconds -->                                                  <!--#SM_3_rcv_wait_msec:dec-->
    <!-- <SweepErrorsThreshold>0</SweepErrorsThreshold> -->                                                            <!--#SM_3_topo_errors_threshold:dec-->
    <!-- <SweepAbandonThreshold>3</SweepAbandonThreshold> -->                                                          <!--#SM_3_topo_abandon_threshold:dec-->
    <!-- <TrapThreshold>0</TrapThreshold> -->                                                                          <!--#SM_3_trap_threshold:dec-->
    <!-- <NonRespTimeout>600</NonRespTimeout> --> <!-- in seconds -->                                                  <!--#SM_3_non_resp_tsec:dec==600-->
    <!-- <NonRespMaxCount>3</NonRespMaxCount> -->                                                                      <!--#SM_3_non_resp_max_count:dec==3-->
    <!-- <NodeAppearanceMsgThreshold>0</NodeAppearanceMsgThreshold> -->                                                <!--#SM_3_node_appearance_msg_thresh:dec-->
    <!-- <SmPerfDebug>0</SmPerfDebug> --> <!-- log additional SM sweep info -->                                        <!--#SM_3_sm_debug_perf:dec-->
    <!-- <SaPerfDebug>0</SaPerfDebug> --> <!-- log additional SA query info -->                                        <!--#SM_3_sa_debug_perf:dec-->
    <!-- <Debug>0</Debug> -->                                                                                          <!--#SM_3_debug:dec-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#SM_3_sa_debug_rmpp:dec-->
    <!-- <LID>0</LID> -->                                                                                              <!--#SM_3_lid:dec-->
    <!-- <Priority>0</Priority> --> <!-- 0 to 15, higher wins -->                                                      <!--#SM_3_priority:dec-->
    <!-- <ElevatedPriority>0</ElevatedPriority> --> <!-- 0 to 15, higher wins -->                                      <!--#SM_3_elevated_priority:dec-->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#SM_3_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#SM_3_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
    <!-- <LoopTestOn>0</LoopTestOn> --> <!-- cable loop test -->                                                       <!--#SM_3_loop_test_on:dec-->
    <!-- <LoopTestPackets>20</LoopTestPackets> --> <!-- inject count -->                                               <!--#SM_3_loop_test_packets:dec==1-->
    <!-- <LIDSpacing>0x0</LIDSpacing> --> <!-- spacing of LIDs to test LFT -->                                         <!--#SM_3_topo_lid_offset:hex-->
    <!-- <SaRmppChecksum>0</SaRmppChecksum> --> <!-- RMPP internal checksum -->                                        <!--#SM_3_sa_rmpp_checksum:dec-->
    <!-- <DynamicPortAlloc>1</DynamicPortAlloc> -->                                                                    <!--#SM_3_dynamic_port_alloc:dec-->

    <PreDefinedTopology>
      <Enable>0</Enable>
      <TopologyFilename>/etc/opa/topology.2:2.xml</TopologyFilename>
    </PreDefinedTopology>
  </Sm>

  <!-- Instance Specific FE (Fabric Executive Manager) attributes -->
  <Fe>
    <TcpPort>3248</TcpPort>  <!-- TCP socket to listen for FV on -->                                                   <!--FE_3_listen-->
    <!-- Overrides of the Common.Shared, Common.Fe or Fm.Shared parameters -->
    <!-- See Common.Fe for more information about enabling the FE -->
    <!-- <Start>0</Start> -->                                                                                          <!--#FE_3_start:dec==0-->
    <!-- <StartupRetries>5</StartupRetries> -->
    <!-- <StartupStableWait>10</StartupStableWait> -->
    <!-- <Debug>0</Debug> -->                                                                                          <!--#FE_3_debug:dec-->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#FE_3_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#FE_3_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
    <!-- <DefaultPKey>0xffff</DefaultPKey> -->                                                                         <!--#FE_3_default_pkey:hex-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#FE_3_if3_debug_rmpp:dec-->
  </Fe>

  <!-- Instance Specific PM (Performance Manager) attributes -->
  <Pm>
    <!-- Overrides of the Common.Shared, Common.Pm or Fm.Shared parameters -->
    <!-- <Start>0</Start> -->                                                                                          <!--#PM_3_start:dec==0-->
    <!-- <SweepInterval>10</SweepInterval> --> <!-- time between sweeps in seconds -->                                 <!--#PM_3_SweepInterval:dec-->
    <!-- <TotalImages>10</TotalImages> --> <!-- total images for history and freeze -->                                <!--#PM_3_TotalImages:dec-->
    <!-- <FreezeFrameImages>5</FreezeFrameImages> --> <!-- max unique frozen images -->                                <!--#PM_3_FreezeFrameImages:dec-->
    <ShortTermHistory>
        <StorageLocation>/var/lib/opa-fm/pm3_pahistory</StorageLocation> <!-- must be absolute path -->
    </ShortTermHistory>
    <!-- <Debug>0</Debug> -->                                                                                          <!--#PM_3_debug:dec-->
    <!-- <LogLevel>2</LogLevel> -->                                                                                    <!--#PM_3_log_level:dec-->
    <!-- <LogFile></LogFile> -->                                                                                       <!--#PM_3_log_file-->
    <!-- <SyslogFacility>Local6</SyslogFacility> -->
    <!-- <Priority>0</Priority> --> <!-- 0 to 15, higher wins -->                                                      <!--#PM_3_priority:dec-->
    <!-- <ElevatedPriority>0</ElevatedPriority> --> <!-- 0 to 15, higher wins -->                                      <!--#PM_3_elevated_priority:dec-->
    <!-- <DefaultPKey>0xffff</DefaultPKey> -->                                                                         <!--#PM_3_default_pkey:hex-->
    <!-- <ServiceLease>60</ServiceLease>  --> <!-- in seconds -->                                                      <!--#PM_3_timer:dec-->
    <!-- <RmppDebug>0</RmppDebug> -->                                                                                  <!--#PM_3_if3_debug_rmpp:dec-->
  </Pm>
</Fm>

</Config>