===============================================
Configuring iSCSI interface and offload support
===============================================

Compute supports open-iscsi iSCSI interfaces for offload cards.  Offload
hardware must be present and configured on every compute node where offload is
desired. Once an open-iscsi interface is configured, the iface name
(``iface.iscsi_ifacename``) should be passed to libvirt via the ``iscsi_iface``
parameter for use.  All iSCSI sessions will be bound to this iSCSI interface.

Currently supported transports (``iface.transport_name``) are ``be2iscsi``,
``bnx2i``, ``cxgb3i``, ``cxgb4i``, ``qla4xxx``, ``ocs``.  Configuration changes
are required on the compute node only.

iSER is supported using the separate iSER LibvirtISERVolumeDriver and will be
rejected if used via the ``iscsi_iface`` parameter.

iSCSI iface configuration
~~~~~~~~~~~~~~~~~~~~~~~~~

* Note the distinction between the transport name (``iface.transport_name``)
  and iface name (``iface.iscsi_ifacename``). The actual iface name must be
  specified via the iscsi_iface parameter to libvirt for offload to work.

* The default name for an iSCSI iface (open-iscsi parameter
  ``iface.iscsi_ifacename``) is in the format transport_name.hwaddress when
  generated by ``iscsiadm``.

* ``iscsiadm`` can be used to view and generate current iface configuration.
  Every network interface that supports an open-iscsi transport can have one or
  more iscsi ifaces associated with it. If no ifaces have been configured for a
  network interface supported by an open-iscsi transport, this command will
  create a default iface configuration for that network interface. For example
  :

  .. code-block:: console

     # iscsiadm -m iface
     default tcp,<empty>,<empty>,<empty>,<empty>
     iser iser,<empty>,<empty>,<empty>,<empty>
     bnx2i.00:05:b5:d2:a0:c2 bnx2i,00:05:b5:d2:a0:c2,5.10.10.20,<empty>,<empty>

  The output is in the format::

    iface_name transport_name,hwaddress,ipaddress,net_ifacename,initiatorname

* Individual iface configuration can be viewed via

  .. code-block:: console

     # iscsiadm -m iface -I IFACE_NAME
     # BEGIN RECORD 2.0-873
     iface.iscsi_ifacename = cxgb4i.00:07:43:28:b2:58
     iface.net_ifacename = <empty>
     iface.ipaddress = 102.50.50.80
     iface.hwaddress = 00:07:43:28:b2:58
     iface.transport_name = cxgb4i
     iface.initiatorname = <empty>
     # END RECORD

  Configuration can be updated as desired via

  .. code-block:: console

     # iscsiadm -m iface-I IFACE_NAME--op=update -n iface.SETTING -v VALUE

* All iface configurations need a minimum of ``iface.iface_name``,
  ``iface.transport_name`` and ``iface.hwaddress`` to be correctly configured
  to work. Some transports may require ``iface.ipaddress`` and
  ``iface.net_ifacename`` as well to bind correctly.

  Detailed configuration instructions can be found at:
  https://github.com/open-iscsi/open-iscsi/blob/master/README
