<chapter id="fncpk"><title>Using InfiniBand Devices (Overview/Tasks)</title><highlights><para>InfiniBand (IB) is a new I/O technology based on switch fabrics introduced
in the Solaris 10 release. It provides high bandwidth, low latency interconnect
for attaching I/O devices to hosts and  for host-to-host communication.</para><para>This is a list of the overview information in this chapter.</para><itemizedlist><listitem><para><olink targetptr="eyant" remap="internal">Overview of InfiniBand Devices</olink></para>
</listitem><listitem><para><olink targetptr="eyaqo" remap="internal">Dynamically Reconfiguring IB Devices
(cfgadm)</olink></para>
</listitem>
</itemizedlist><para>For information on the procedures associated with using IB devices,
see the following:</para><itemizedlist><listitem><para><olink targetptr="eyarx" remap="internal">Dynamically Reconfiguring IB Devices
(Task Map)</olink></para>
</listitem><listitem><para><olink targetptr="eyasr" remap="internal">Using the uDAPL Application Interface
With InfiniBand Devices</olink></para>
</listitem>
</itemizedlist><para>For general information about dynamic reconfiguration and hot-plugging,
see <olink targetptr="devconfig2-1" remap="internal">Chapter&nbsp;6, Dynamically Configuring
Devices (Tasks)</olink>.</para>
</highlights><sect1 id="eyant"><title>Overview of InfiniBand Devices</title><para>IB devices are managed by the Solaris IB nexus driver. This driver supports
5 types of devices:</para><itemizedlist><listitem><para>IB Port devices</para>
</listitem><listitem><para>IB virtual physical point of attachment (VPPA) devices</para>
</listitem><listitem><para>IB HCA service (HCA_SVC) devices</para>
</listitem><listitem><para>Pseudo devices</para>
</listitem><listitem><para>I/O controller (IOC) devices</para>
</listitem>
</itemizedlist><para>The IB nexus driver queries the Solaris IB Device Manager (IBDM) for
services, referred in this guide as <emphasis>communication</emphasis> <emphasis>services</emphasis>, to enumerate the IB Port, HCA_SVC, and IB VPPA devices.</para><para>The Port devices bind a communication service to a given <literal>port#</literal> of
a Host Channel Adapter (HCA). The VPPA devices bind a communication service
to a <literal>port#, p_key#</literal> combination instead. The HCA_SVC devices
bind a communication service to a given HCA. Note that the Port devices and
the HCA_SVC devices always use a <literal>p_key</literal> (partition key)
whose value is zero. The Port, HCA_SVC, and VPPA devices are children of the
HCA and are enumerated through the <filename>ib.conf</filename> file. For
more information, see <olink targetdoc="refman7" targetptr="ib-7d" remap="external"><citerefentry><refentrytitle>ib</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para><para>The IOC devices are children of the IB nexus driver and are part of
an I/O unit. The pseudo devices are also children of the IB nexus driver and
refer to all other devices that provide their own configuration files to enumerate.
For more information, see <olink targetdoc="refman4" targetptr="ib-4" remap="external"><citerefentry><refentrytitle>ib</refentrytitle><manvolnum>4</manvolnum></citerefentry></olink>. </para><para>The possible IB device tree path name(s) are listed in the following
table.</para><informaltable frame="topbot"><tgroup cols="2" colsep="0" rowsep="0"><colspec colwidth="22.86*"/><colspec colwidth="77.14*"/><tbody><row><entry><para>IOC device</para>
</entry><entry><para><filename>/ib/ioc@1730000007F510C,173000007F50</filename></para>
</entry>
</row><row><entry><para>IB pseudo device</para>
</entry><entry><para><filename>/ib/&lt;driver>@&lt;unit-address></filename></para>
</entry>
</row><row><entry><para>IB VPPA device</para>
</entry><entry><para><filename>/pci@1f,2000/pci@1/pci15b3,5a44@0/ibport@&lt;port#>,&lt;p_key>,&lt;service></filename></para>
</entry>
</row><row><entry><para>IB HCA_SVC device</para>
</entry><entry><para><filename>/pci@1f,2000/pci@1/pci15bc,5a44@0/ibport@0,0,&lt;service></filename></para>
</entry>
</row><row><entry><para>IB Port device</para>
</entry><entry><para><filename>/pci@1f,2000/pci@1/pci15b3,5a44@0/ibport@&lt;port#>,0,&lt;service></filename></para>
</entry>
</row><row><entry><para>HCA</para>
</entry><entry><para><filename>/pci@1f,2000/pci@1/pci15b3,5a44@0</filename></para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable><para>Note that the IB HCA_SVC devices have zero as the <literal>port#</literal> and
the <literal>p_key</literal>.</para><para>The IB components in the preceding table are described as follows:</para><variablelist><varlistentry><term>&lt;<replaceable>services</replaceable>></term><listitem><para>Is a communication service. For example, <literal>ipib</literal> is
the communication service used by the <literal>ibd</literal> kernel client
driver.</para>
</listitem>
</varlistentry><varlistentry><term>&lt;<replaceable>p_key</replaceable>></term><listitem><para>Is the partition key value being used.</para>
</listitem>
</varlistentry><varlistentry><term>&lt;<replaceable>port</replaceable>></term><listitem><para>Is the port number.</para>
</listitem>
</varlistentry><varlistentry><term>&lt;<replaceable>unit-address</replaceable>></term><listitem><para>Refers to IB kernel client driver's property by this name
specified in its <filename>driver.conf</filename> file. For more information,
see <olink targetdoc="refman4" targetptr="driver.conf-4" remap="external"><citerefentry><refentrytitle>driver.conf</refentrytitle><manvolnum>4</manvolnum></citerefentry></olink>.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1><sect1 id="eyarx"><title>Dynamically Reconfiguring IB Devices (Task Map)</title><informaltable frame="all"><tgroup cols="3" colsep="1" rowsep="1"><colspec colname="colspec0" colwidth="33*"/><colspec colname="colspec1" colwidth="33*"/><colspec colname="colspec2" colwidth="33*"/><thead><row><entry><para>Task</para>
</entry><entry><para>Description</para>
</entry><entry><para>For Instructions</para>
</entry>
</row>
</thead><tbody><row><entry><para>Display IB device information.</para>
</entry><entry><para>Display information about the IB devices on your system.</para>
</entry><entry><para><olink targetptr="eyaqp" remap="internal">How to Display IB Device Information</olink></para>
</entry>
</row><row><entry rowsep="0"><para>Configure or unconfigure an IOC device.</para>
</entry><entry rowsep="0"><para>Select one of the following:</para>
</entry><entry rowsep="0"><para></para>
</entry>
</row><row><entry rowsep="0">
</entry><entry rowsep="0"><para>Unconfigure an IOC device.</para>
</entry><entry rowsep="0"><para><olink targetptr="eyaqq" remap="internal">How to Unconfigure an IOC Device</olink></para>
</entry>
</row><row><entry rowsep="1">
</entry><entry rowsep="1"><para>Configure an IOC device.</para>
</entry><entry rowsep="1"><para><olink targetptr="eyaqr" remap="internal">How to Configure an IOC Device</olink></para>
</entry>
</row><row><entry rowsep="0"><para>Configure or unconfigure a port or VPPA device.</para>
</entry><entry rowsep="0"><para>Select one of the following:</para>
</entry><entry rowsep="0"><para></para>
</entry>
</row><row><entry rowsep="0">
</entry><entry rowsep="0"><para>Unconfigure a port or a VPPA device.</para>
</entry><entry rowsep="0"><para><olink targetptr="eyaqs" remap="internal">How to Unconfigure an IB Port, HCA_SVC, or
a VPPA Device</olink></para>
</entry>
</row><row><entry rowsep="1">
</entry><entry rowsep="1"><para>Configure a port or a VPPA device.</para>
</entry><entry rowsep="1"><para><olink targetptr="eyaqt" remap="internal">How to Configure a IB Port, HCA_SVC, or a VPPA
Device</olink></para>
</entry>
</row><row><entry rowsep="0"><para>Configure or unconfigure an IB pseudo device.</para>
</entry><entry rowsep="0"><para>Select one of the following:</para>
</entry><entry rowsep="0"><para></para>
</entry>
</row><row><entry rowsep="0">
</entry><entry rowsep="0"><para>Unconfigure an IB pseudo device.</para>
</entry><entry rowsep="0"><para><olink targetptr="eyaqu" remap="internal">How to Unconfigure an IB Pseudo Device</olink></para>
</entry>
</row><row><entry rowsep="1">
</entry><entry rowsep="1"><para>Configure an IB pseudo device.</para>
</entry><entry rowsep="1"><para><olink targetptr="eyaqv" remap="internal">How to Configure an IB Pseudo Device</olink></para>
</entry>
</row><row><entry><para>Display kernel IB clients of an HCA.</para>
</entry><entry><para>You might need to display information about kernel IP clients of an
HCA, particularly if you're going to unconfigure an HCA.</para>
</entry><entry><para><olink targetptr="eyatt" remap="internal">How to Display Kernel IB Clients of  an HCA</olink></para>
</entry>
</row><row><entry rowsep="0"><para>Configure or unconfigure an IB HCA.</para>
</entry><entry rowsep="0"><para>Select one of the following:</para>
</entry><entry rowsep="0"><para></para>
</entry>
</row><row><entry rowsep="0">
</entry><entry rowsep="0"><para>Unconfigure IB devices that are connected to an HCA.</para>
</entry><entry rowsep="0"><para><olink targetptr="eyaqw" remap="internal">How to Unconfigure IB Devices Connected to
an HCA</olink></para>
</entry>
</row><row><entry rowsep="1">
</entry><entry rowsep="1"><para>Configure IB devices that are connected to an HCA.</para>
</entry><entry rowsep="1"><para><olink targetptr="eyatr" remap="internal">Configuring an IB HCA</olink></para>
</entry>
</row><row><entry><para>Update the IB p_key tables.</para>
</entry><entry><para>If the <literal>p_key</literal> table information of a HCA port changes,
IBTF and IBDM need to be notified so that their internal <literal>p_key</literal> databases
are updated.</para>
</entry><entry><para><olink targetptr="eyaqy" remap="internal">How to Update the IB p_key Tables</olink></para>
</entry>
</row><row><entry><para>Display IB communication services</para>
</entry><entry><para>Display the IB communication services that are currently in use by the
IBTF.</para>
</entry><entry><para><olink targetptr="eyaqz" remap="internal">How to Display IB Communication Services</olink></para>
</entry>
</row><row><entry rowsep="0"><para>Add or remove a VPPA communication service.</para>
</entry><entry rowsep="0"><para>Select one of the following:</para>
</entry><entry rowsep="0"><para></para>
</entry>
</row><row><entry rowsep="0">
</entry><entry rowsep="0"><para>Add a VPPA communication service.</para>
</entry><entry rowsep="0"><para><olink targetptr="eyarb" remap="internal">How to Add a VPPA Communication Service</olink></para>
</entry>
</row><row><entry rowsep="1">
</entry><entry rowsep="1"><para>Remove a VPPA communication service.</para>
</entry><entry rowsep="1"><para><olink targetptr="eyarc" remap="internal">How to Remove an Existing IB Port, HCA_SVC,
or a VPPA Communication Service</olink></para>
</entry>
</row><row><entry rowsep="0"><para>Update an IOC configuration.</para>
</entry><entry rowsep="0"><para>You can update the properties of all the IOC device nodes or update
a particular IOC <literal>Ap_Id</literal>.</para>
</entry><entry rowsep="0"><para><olink targetptr="eyarj" remap="internal">How to Update an IOC Configuration</olink></para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect1><sect1 id="eyaqo"><title>Dynamically Reconfiguring IB Devices (<command>cfgadm</command>)</title><para>One can configure or unconfigure an IB device from a running system
by using the <command>cfgadm</command> CLI only. This command also provides
a way to display the IB fabric, manage communication services, and update <literal>p_key</literal> table databases. For more information, see <olink targetdoc="refman1m" targetptr="cfgadm-ib-1m" remap="external"><citerefentry><refentrytitle>cfgadm_ib</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink>.</para><para>The <command>cfgadm</command> CLI manages dynamic reconfiguration, referred
to in this guide as DR, of the entire IB fabric as seen by a host. The <command>cfgadm</command> operations are supported on all the IB devices, such as Port, VPPA,
HCA_SVC, IOC, and pseudo devices.</para><para>The <command>cfgadm</command> command displays information about attachment
points (<literal>Ap_Id</literal>s), which are locations in the system where
DR operations can occur. For details on the <literal>Ap_Id</literal>s that <command>cfgadm</command> supports, see <literal>cfgadm_ib.1M</literal>. Note that
all IB <literal>Ap_Id</literal>s are shown as <literal>connected</literal>.</para><para>The <command>cfgadm</command> command provides the following IB device
status information.</para><informaltable frame="topbot"><tgroup cols="2" colsep="0" rowsep="0"><colspec colwidth="50*"/><colspec colwidth="50*"/><thead><row rowsep="1"><entry><para>Receptacle State</para>
</entry><entry><para>Description</para>
</entry>
</row>
</thead><tbody><row><entry><para> <literal>connected</literal>/<literal>configured</literal>/<literal>ok</literal> </para>
</entry><entry><para>The device is connected and available. The <literal>devinfo</literal> node
is present.</para>
</entry>
</row><row><entry><para><literal>connected</literal>/<literal>unconfigured</literal>/<literal>unknown</literal></para>
</entry><entry><para>The device is unavailable and no <literal>devinfo</literal> node or
device driver exists for this device. Or, the device was never configured
for use by <literal>ib</literal> nexus driver. The device might be known to
the IB Device Manager.</para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable><para>The following sections describe how to dynamically reconfigure (DR)
IB devices with the <command>cfgadm</command> command. All of the sample IB
device information in these sections has been truncated to focus on relevant
information.</para><task id="eyaqp"><title>How to Display IB Device Information</title><tasksummary><para>You can use the <command>prtconf</command> command to display general
information about IB devices. For example:</para><screen>$ <userinput>prtconf</userinput>
    pci, instance #0
        pci15b3,5a44, instance #0
             ibport, instance #253
             ibport, instance #254
             ibport, instance #255
    .
    .
    .
    ib, instance #0
        ioc, instance #243
        ioc, instance #244
        ioc, instance #245
        ioc, instance #246
        ioc, instance #247
        ioc, instance #248
        ibgen, instance #249</screen><para>In the preceding example,  <literal>pci15b3,5a44</literal> refers to
an IB HCA.</para><para>Use the following steps to display specific IB device information.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>Display IB fabric information.</para><para>For example:</para><screen># <userinput>cfgadm -a</userinput>
Ap_Id                       Type       Receptacle Occupant   Condition
ib                          IB-Fabric  connected  configured   ok
hca:1730000008070           IB-HCA     connected  configured   ok
ib::1730000007F5198         IB-IOC     connected  configured   ok
ib::1730000007F5199         IB-IOC     connected  configured   ok
ib::1730000008070,0,hnfs    IB-HCA_SVC connected  configured   ok
ib::1730000008071,0,sdp     IB-PORT    connected  configured   ok
ib::1730000008072,0,sdp     IB-PORT    connected  configured   ok
ib::1730000008071,8001,ipib IB-VPPA    connected  configured   ok
ib::1730000008072,8001,ipib IB-VPPA    connected  configured   ok
ib::ibgen,0                 IB-PSEUDO  connected  configured   ok
#</screen><para>In the preceding example output, the components are described as follows:</para><variablelist><varlistentry><term><literal>Ap_Id ib::1730000008072,0,sdp</literal></term><listitem><para>Identifies an IB Port device that is connected to port 2 and
is bound to the <literal>sdp</literal> service.</para>
</listitem>
</varlistentry><varlistentry><term><literal>Ap_Id ib::1730000008072,8001,ipib</literal></term><listitem><para>Identifies an IB VPPA device that is connected to port 2,
using a <literal>p_key</literal> value of <literal>0x8001</literal>, and is
bound to the <literal>ibd</literal> service.</para>
</listitem>
</varlistentry><varlistentry><term><literal>Ap_Id ib:: 1730000008070,0,hnfs</literal></term><listitem><para>Identifies an IB HCA_SVC device bound to the <literal>hnfs</literal> service.</para>
</listitem>
</varlistentry><varlistentry><term><literal>Ap_Id ib::1730000007F5198</literal></term><listitem><para>Identifies an IOC device.</para>
</listitem>
</varlistentry><varlistentry><term><literal>Ap_Id ib::ibgen,0</literal></term><listitem><para>Identifies a pseudo device.</para>
</listitem>
</varlistentry>
</variablelist>
</step><step><para>Display specific IB device information.</para><para>For example,
for an IB VPPA device:</para><screen># <userinput>cfgadm -al -s "cols=ap_id:info" ib::1730000008072,8001,ipib</userinput>
Ap_Id                          Information
ib::1730000008072,8001,ipib    ipib
# </screen><para>For example, for an IB HCA device:</para><screen># <userinput>cfgadm -al -s "cols=ap_id:info" hca::1730000008070</userinput>
Ap_Id                          Information
hca::1730000008070             VID: 0x15b3, PID: 0x5a44, #ports: 0x2, 
port1 GUID: 0x1730000008071, port2 GUID: 0x1730000008072
# </screen><para>The preceding output displays the number of ports and their GUIDs.</para>
</step>
</procedure>
</task><task id="eyaqq"><title>How to Unconfigure an IOC Device</title><tasksummary><para>You can unconfigure an IB device that is still physically connected
to the system, but a driver will never attach to it.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>Unconfigure the IB device.</para><para>For example:</para><screen># <userinput>cfgadm -c unconfigure ib::1730000007F5198</userinput>
Unconfigure the device: /devices/ib:fabric::1730000007F5198
This operation will suspend activity on the IB device
Continue (yes/no)? <userinput>y</userinput>
#</screen>
</step><step><para>Verify that the device is unconfigured.</para><para>For example:</para><screen># <userinput>cfgadm -a ib::1730000007F5198</userinput>
ib::1730000007F5198         IB-IOC     connected  unconfigured unknown
#</screen>
</step>
</procedure>
</task><task id="eyaqr"><title>How to Configure an IOC Device</title><procedure><step><para>Become superuser.</para>
</step><step><para>Configure a IB device.</para><para>For example:</para><screen># <userinput>cfgadm -yc configure ib::1730000007F5198</userinput></screen>
</step><step><para>Verify that the IB device is configured.</para><para>For example:</para><screen># <userinput>cfgadm -al ib::1730000007F5198</userinput>
Ap_Id                Type    Receptacle  Occupant    Condition
ib::1730000007F5198  IB-IOC  connected   configured  ok</screen>
</step>
</procedure>
</task><task id="eyaqs"><title>How to Unconfigure an IB Port, HCA_SVC, or a VPPA
Device</title><tasksummary><para>Use the following steps if you want to remove an IB Port, HCA_SVC, or
a VPPA device from the system.</para><para>The example below illustrates how to unconfigure a VPPA device, but
the same procedure applies to Port and HCA_SVC devices as well.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>Unconfigure the IB VPPA device.</para><para>For example:</para><screen># <userinput>cfgadm -c unconfigure ib::1730000007F51,8001,ipib</userinput>
Unconfigure the device: /devices/ib:fabric::1730000007F51,8001,ipib
This operation will suspend activity on the IB device
Continue (yes/no)? <userinput>Y</userinput>
#</screen>
</step><step><para>Verify that the device is disconnected.</para><para>For example:</para><screen># <userinput>cfgadm -a ib::1730000007F51,8001,ipib</userinput>
Ap_Id                       Type    Receptacle Occupant     Condition
ib::1730000007F51,8001,ipib IB-VPPA connected  unconfigured unknown
#</screen>
</step>
</procedure>
</task><task id="eyaqt"><title>How to Configure a IB Port, HCA_SVC, or a VPPA Device</title><tasksummary><para>Use the following steps if you want to configure an IB Port, HCA_SVC,
or a VPPA device on the system.</para><para>The example below illustrates how to configure a VPPA device, but similar
steps can be used to configure Port and HCA_SVC devices as well.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>Configure the IB VPPA device.</para><para>For example:</para><screen># <userinput>cfgadm -c configure ib::1730000007F51,8001,ipib</userinput></screen>
</step><step><para>Verify that the device is connected.</para><para>For example:</para><screen># <userinput>cfgadm -a ib::1730000007F51,8001,ipib</userinput>   
Ap_Id                       Type     Receptacle Occupant   Condition
ib::1730000007F51,8001,ipib IB-VPPA  connected  configured ok</screen><note><para>A <command>cfgadm</command> based configure or unconfigure operation
of IB Port and HCA_SVC  devices is similar to the preceding examples for an
IB VPPA device.</para>
</note>
</step>
</procedure>
</task><task id="eyaqu"><title>How to Unconfigure an IB Pseudo Device</title><tasksummary><para>Use the following steps if you want to remove an IB pseudo device from
the system.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>Unconfigure the IB pseudo device.</para><para>For example:</para><screen># <userinput>cfgadm -c unconfigure ib::ibgen,0</userinput>
Unconfigure the device: /devices/ib:fabric::ibgen,0
This operation will suspend activity on the IB device
Continue (yes/no)? <userinput>Y</userinput>
#</screen>
</step><step><para>Verify that the device is disconnected.</para><screen># <userinput>cfgadm -a ib::ibgen,0</userinput>
Ap_Id                  Type      Receptacle Occupant     Condition
ib::ibgen,0            IB-PSEUDO connected  unconfigured unknown</screen>
</step>
</procedure>
</task><task id="eyaqv"><title>How to Configure an IB Pseudo Device</title><tasksummary><para>Use the following steps to configure an IB pseudo device.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>Configure the IB pseudo device.</para><para>For example:</para><screen># <userinput>cfgadm -yc configure ib::ibgen,0</userinput></screen>
</step><step><para>Verify that the device is connected.</para><para>For example:</para><screen># <userinput>cfgadm -a ib::ibgen,0</userinput>
Ap_Id                  Type       Receptacle Occupant   Condition
ib::ibgen,0            IB-PSEUDO  connected  configured ok</screen>
</step>
</procedure>
</task><task id="eyatt"><title>How to Display Kernel IB Clients of  an HCA</title><tasksummary><para>The following IB <command>cfgadm</command> plugin command can be invoked
to list kernel IB clients using this HCA. Note that the last column would
show a &ldquo;yes&rdquo; if a kernel IB client uses another HCA. IB Managers
and kernel clients that do not use the HCA are shown with an <literal>Ap_Id</literal> of &ldquo;-&rdquo;.</para>
</tasksummary><procedure remap="single-step"><step><para>Display kernel IB clients of  an HCA.</para><para>For example:</para><screen>$ <userinput>cfgadm -x list_clients hca:173000007F50</userinput>   
Ap_Id                       IB Client         Alternate HCA
ib::1730000007F51D0            ibgen              no
ib::1730000007F51D1            ibgen              no
ib::1730000007F51,8001,ipib    ibd                no
ib::ibgen,0                    ibgen              no
-                              ibdm               no
-                              ibmf               no
-                              nfs/ib             no
$</screen>
</step>
</procedure>
</task><task id="eyaqw"><title>How to Unconfigure IB Devices Connected to an HCA</title><tasksummary><para>An actual DR of an HCA is beyond the scope of the IB <command>cfgadm</command> plugin.
Although DR of an HCA can be achieved by using the plugin of the underlying
bus. For example, a PCI based HCA can use the <command>cfgadm_pci</command> command.
For more information, see <olink targetdoc="refman1m" targetptr="cfgadm-pci-1m" remap="external"><citerefentry><refentrytitle>cfgadm_pci</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink>.</para><para>However, the IB <command>cfgadm</command> plugin assists in the HCA
DR by listing its kernel IB clients as illustrated in steps below.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>List the kernel IB clients of the HCA.</para><para>For example:</para><screen># <userinput>cfgadm -x list_clients hca:173000007F50</userinput>   
Ap_Id                       IB Client         Alternate HCA
ib::1730000007F51D0            ibgen              no
ib::1730000007F51D1            ibgen              no
ib::1730000007F51,8001,ipib    ibd                no
ib::ibgen,0                    ibgen              no
-                              ibdm               no
-                              ibmf               no
-                              nfs/ib             no</screen>
</step><step><para>Unconfigure kernel IB clients, such as Port, VPPA, HCA_SVC, or
IOC devices, that do not have alternate HCAs present.</para><para>For example:</para><screen># <userinput>cfgadm -x unconfig_clients hca:1730000008070</userinput>
Unconfigure Clients of HCA /devices/ib:1730000008070
This operation will unconfigure IB clients of this HCA
Continue (yes/no)? <userinput>y</userinput></screen>
</step><step><para>Verify that the kernel IB clients of the HCA are unconfigured.</para><screen># <userinput>cfgadm -x list_clients hca:173000007F50</userinput>   
Ap_Id                       IB Client         Alternate HCA
-                              ibdm               no
-                              ibmf               no
-                              nfs/ib             no
#</screen>
</step>
</procedure>
</task><sect2 id="eyatr"><title>Configuring an IB HCA</title><para>Invoke the bus-specific <command>cfgadm</command> plugin to configure
the HCA.  The exact details are beyond the scope of this chapter.</para>
</sect2><task id="eyaqy"><title>How to Update the IB <literal>p_key</literal> Tables</title><tasksummary><para>If the <literal>p_key</literal> table information of an HCA ports changes,
for example, additional <literal>p_key</literal>s are enabled or disabled,
InfiniBand Transport Framework (IBTF) and IBDM need to be notified so that
their internal <literal>p_key</literal> databases are updated. The <command>cfgadm</command> command helps update the <literal>p_key</literal> databases of
IBTF and IBDM. For more information, see <olink targetdoc="refman7" targetptr="ibtl-7d" remap="external"><citerefentry><refentrytitle>ibtl</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink> and <olink targetdoc="refman7" targetptr="ibdm-7d" remap="external"><citerefentry><refentrytitle>ibdm</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>Update the <literal>p_key</literal> tables.</para><para>For example:</para><screen># <userinput>cfgadm -x update_pkey_tbls -y ib</userinput></screen>
</step>
</procedure>
</task><task id="eyaqz"><title>How to Display IB Communication Services</title><tasksummary><para>Use the following steps to display the communication services that are
currently in use by the IBTF.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>Display IB communication services.</para><para>For example:</para><screen># <userinput>cfgadm -x list_services ib</userinput>
Port communication services:
                srp
VPPA communication services:
                ibd
HCA_SVC communication services:
                hnfs</screen>
</step>
</procedure>
</task><task id="eyarb"><title>How to Add a VPPA Communication Service</title><tasksummary><para>Use the following steps to add a new VPPA communication service.</para><para>Similar steps can be used to add a new HCA_SVC or a port communication
service.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>Add a new VPPA communication service.</para><para>For example:</para><screen># <userinput>cfgadm -o comm=vppa,service=new -x add_service ib</userinput></screen>
</step><step><para>Verify that the new service has been added.</para><para>For example:</para><screen># <userinput>cfgadm -x list_services ib</userinput>
Port communication services:
                srp
VPPA communication services:
                ibd
                new
HCA_SVC communication services:
                nfs_service
#</screen>
</step>
</procedure>
</task><task id="eyarc"><title>How to Remove an Existing IB Port, HCA_SVC, or a VPPA
Communication Service</title><tasksummary><para>Use the following steps to delete an existing IB Port, HCA_SVC, or a
VPPA communication service.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>Remove a VPPA communication service.</para><para>For example:</para><screen># <userinput>cfgadm -o comm=vppa,service=new -x delete_service ib</userinput></screen>
</step><step><para>Verify that the communication service has been removed.</para><para>For
example:</para><screen># <userinput>cfgadm -x list_services ib</userinput>
Port communication services:
                srp
VPPA communication services:
                ibd
HCA_SVC communication services:
                hnfs
#</screen>
</step>
</procedure>
</task><task id="eyarj"><title>How to Update an IOC Configuration</title><tasksummary><para>Use the following steps to update properties of all the IOC device nodes
or for a particular IOC <literal>Ap_Id</literal>. The properties that can
get updated are as follows:</para><itemizedlist><listitem><para><literal>port-list</literal></para>
</listitem><listitem><para><literal>port-entries</literal></para>
</listitem><listitem><para><literal>service-id</literal></para>
</listitem><listitem><para><literal>service-name</literal></para>
</listitem>
</itemizedlist><para>For more information on these properties, see <olink targetdoc="refman7" targetptr="ib-7d" remap="external"><citerefentry><refentrytitle>ib</refentrytitle><manvolnum>7D</manvolnum></citerefentry></olink>.</para><para>Note that these properties may not get updated if there is no configuration
change. The following example describes how to update a particular IOC's configuration.
If you need to update the configuration of all the IOCs, then specify the
static <literal>ib</literal> <literal>Ap_Id</literal> instead of the particular
IOC <literal>Ap_Id</literal>.</para>
</tasksummary><procedure><step><para>Become superuser.</para>
</step><step><para>Update the configuration of an IOC.</para><para>For example:</para><screen># <userinput>cfgadm -x update_ioc_conf ib::1730000007F5198</userinput>
This operation can update properties of IOC devices.
Continue (yes/no)? <userinput>y</userinput>
#</screen>
</step><step><para>Verify that the properties have been updated by running <command>prtconf
-v</command>.</para>
</step>
</procedure>
</task>
</sect1><sect1 id="eyasr"><title>Using the uDAPL Application Interface With InfiniBand
Devices</title><para>User Direct Access Programming Library (uDAPL) is a standard API that
promotes data center application data messaging performance, scalability,
and reliability over Remote Direct Memory Access (RDMA) capable interconnects
such as InfiniBand. The uDAPL interface is defined by the DAT collaborative.
For more information about the DAT collaborative, go to the following site:</para><para><ulink url="http://www.datcollaborative.org" type="url">http://www.datcollaborative.org</ulink></para><para>The Solaris release provides the following uDAPL features:</para><itemizedlist><listitem><para>A standard DAT registry library, <filename>libdat</filename>.
For more information, see <olink targetdoc="refman3f" targetptr="libdat-3lib" remap="external"><citerefentry><refentrytitle>libdat</refentrytitle><manvolnum>3LIB</manvolnum></citerefentry></olink>.</para>
</listitem><listitem><para>A standard service provider registration file, <filename>dat.conf</filename>. For more information, see <olink targetdoc="refman4" targetptr="dat.conf-4" remap="external"><citerefentry><refentrytitle>dat.conf</refentrytitle><manvolnum>4</manvolnum></citerefentry></olink>.</para>
</listitem><listitem><para>Support for multiple service providers so that each provider
specifies their own uDAPL library path, version number, and so on, in
their own <filename>service_provider.conf</filename> file. For more information,
see, <olink targetdoc="refman4" targetptr="service-provider.conf-4" remap="external"><citerefentry><refentrytitle>service_provider.conf</refentrytitle><manvolnum>4</manvolnum></citerefentry></olink>.</para>
</listitem><listitem><para>An administrative tool, the <command>datadm</command> command,
to configure <filename>dat.conf</filename>. For more information, see <olink targetdoc="refman1m" targetptr="datadm-1m" remap="external"><citerefentry><refentrytitle>datadm</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink>.</para>
</listitem><listitem><para>A new resource control property, <literal>project.max-device-locked-memory</literal>, to regulate the amount of locked down physical memory.</para>
</listitem><listitem><para>A naming scheme that uses either IPv4 or IPv6 addresses that
leverage the IP infrastructure, such as ARP in IPv4 and neighbor discovery
in IPv6, for address resolution. The Solaris uDAPL Interface Adapter directly
maps to an IPoIB device instance.      </para>
</listitem><listitem><para>Support for the standard Address Translation Scheme that is
used by the DAT collaborative community.</para>
</listitem><listitem><para>A uDAPL service provider library to support the Mellanox Tavor
Host Channel Adapter with automatic registration to the <filename>dat.conf</filename> registration
file.</para>
</listitem><listitem><para>Supports both SPARC platform and x86 platforms.</para>
</listitem>
</itemizedlist><task id="eyank"><title>How to Enable uDAPL</title><procedure id="eyanl"><step><para>Become superuser.</para>
</step><step><para>Confirm that the following packages are installed. Or, install
them, if needed.</para><itemizedlist><listitem><para><literal>SUNWib</literal> &ndash; Sun InfiniBand Framework</para>
</listitem><listitem><para><literal>SUNWtavor</literal> &ndash; Sun Tavor HCA  Driver</para>
</listitem><listitem><para><literal>SUNWipoib</literal> &ndash; Sun IP over InfiniBand</para>
</listitem><listitem><para><literal>SUNWudaplr</literal> &ndash; Direct Access Transport
(DAT) registry package (root)</para>
</listitem><listitem><para><literal>SUNWudaplu</literal> &ndash; Direct Access Transport
(DAT) registry packages (usr)</para>
</listitem><listitem><para><literal>SUNWudapltr</literal> &ndash; Service Provider for
Tavor packages (root)</para>
</listitem><listitem><para><literal>SUNWudapltu</literal> &ndash; Service Provider for
Tavor packages (usr)</para>
</listitem>
</itemizedlist>
</step><step id="eyann"><para>Select one of the following to plumb the IPoIB interfaces.</para><itemizedlist><listitem><para>Manually plumb the interfaces with the <command>ifconfig</command> and <command>datadm</command> commands.</para><para>For example:</para><screen># <userinput>ifconfig ibd1 plumb</userinput>
# <userinput>ifconfig ibd1 192.168.0.1/24 up</userinput>
# <userinput>datadm -a /usr/share/dat/SUNWudaplt.conf</userinput></screen>
</listitem><listitem><para>Automatically plumb the interfaces by doing the following:</para><itemizedlist><listitem><para>Create the following file with the appropriate IP address.</para><screen>/etc/hostname.ibd1</screen>
</listitem><listitem><para>Reboot the system.</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</step>
</procedure>
</task><sect2 id="eyanu"><title>Updating the DAT Static Registry</title><para>You can use the <command>datadm</command> command to maintain the DAT
static registry, the <filename>dat.conf</filename> file. For more information
about this file, see <olink targetdoc="refman4" targetptr="dat.conf-4" remap="external"><citerefentry><refentrytitle>dat.conf</refentrytitle><manvolnum>4</manvolnum></citerefentry></olink>.</para><para>The <command>datadm</command> command can also be used to register or
unregister a service provider to the <filename>dat.conf</filename> file. For
more information, see <olink targetdoc="refman1m" targetptr="datadm-1m" remap="external"><citerefentry><refentrytitle>datadm</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink>.</para><para>When IPoIB interface adapters are added or removed, run the <command>datadm</command> command to  update the <filename>dat.conf</filename> file to reflect
the current state of the system. A new set of interface adapters for all the
service providers that are currently installed will be regenerated.</para><task id="eyanp"><title>How to Update the DAT Static Registry</title><procedure id="eyano"><step><para>Become superuser.</para>
</step><step id="eyanq"><para>Update the DAT static registry after you add or remove
IPoIP interface adapters from the system.</para><screen># <userinput>datadm -u</userinput></screen>
</step><step id="eyanv"><para>Display the updated DAT static registry.</para><screen># <userinput>datadm</userinput></screen>
</step>
</procedure>
</task><task id="ezswe"><title>How to Register a Service Provider in the DAT Static
Registry</title><procedure><step><para>Become superuser.</para>
</step><step><para>Update the DAT static registry after you add Sun's service provider
for the Mellanox Tavor Host Channel Adapter.</para><screen># <userinput>datadm -a /usr/share/dat/SUNWudaplt.conf</userinput></screen>
</step><step><para>Display the updated DAT static registry.</para><screen># <userinput>datadm -v</userinput></screen>
</step>
</procedure>
</task><task id="faaoy"><title>How to Unregister a Service Provider from the DAT
Static Registry</title><procedure><step><para>Become superuser.</para>
</step><step><para>Update the DAT static registry after you remove Sun's service
provider for the Mellanox Tavor Host Channel Adapter from the system.</para><screen># <userinput>datadm -r /usr/share/dat/SUNWudaplt.conf</userinput></screen>
</step><step><para>Display the updated DAT static registry.</para><screen># <userinput>datadm -v</userinput></screen>
</step>
</procedure>
</task>
</sect2>
</sect1>
</chapter>