Lpfc - LightPulse Linux HBA Driver
Version 4.10n
Chapter 1 - Introduction
Audience
This document provides the information needed to use the Emulex LightPulse Fibre
Channel host bus adapter (HBA) device driver, known as lpfcdd. For system
administrators, this document includes information about the configuration files, how to
install the driver and how to boot the system with the driver installed.
At the very least, system administrators should be familiar with Linux and have access to
standard system documentation. Anyone working with this product should have some
familiarity with the nature and use of Fibre Channel.
Typographic Conventions
Bold face is used to highlight cautions and other important points.
Italics are used to mark the first occurrences of words that will subsequently be explained
or defined.
Cross-references are underlined.
Command syntax, file names, command output, and similar items are placed in
courier font.
Fibre Channel, In Brief
Fibre Channel is a general-purpose, high-throughput, low-latency interconnect. It
employs serial bit transmission over copper media, short-wave and long-wave optical
media. Cable distances may range up to 30 meters for copper media and up to 10
kilometers for optical media. Transmission speeds currently range up to 2 gigabaud, or
roughly 200 megabytes per second. Fibre Channel transmission protocols provide high
reliability, with bit error rates less than 1 in 10-12. Interconnects may be configured as
point-to-point, loop, or fabric (network switch).
The Fibre Channel specifications provide for the emulation of two traditional protocols:
SCSI and IP. For storage, Fibre Channel provides an emulation of SCSI; this emulation
is dubbed FCP, short for Fibre Channel Protocol – a confusing acronym, in that it refers
specifically to SCSI-on-Fibre Channel rather than to the lower-level protocols by which
Fibre Channel itself operates. Throughout this document, we generally refer to FCP;
when we mention SCSI, we are referring to the particular SCSI properties within FCP, or
to the original SCSI protocol. For networking, Fibre Channel provides an encapsulation
of IP (Internet Protocol), referred to in this document simply as IP.
General Description of the Device Driver
A device driver acts as a translator between an operating system and the hardware so that
the operating system‟s kernel need not know the specifics of the device it uses. A device
driver contains all of the code specific to operating a device and provides an input/output
(I/O) interface to the rest of the system.
The Emulex LightPulse HBA device drivers for Linux (lpfcdd lpfndd and lpfcdfc),
simultaneously support three functions: FCP and IP over Fibre Channel and a diagnostic
interface. The FCP function provides access to Fibre Channel disk and tape drives. The
IP function provides peer-to-peer networking, such as TCP or UDP, between Fibre
Channel hosts. The diagnostic function provides an interface to the lputil utility for
adapter maitenance. The section of the driver that handles FCP is lpfcdd; the section that
handles IP is lpfndd; the section that handles diagnostics is lpfcdfc. In this document,
unless otherwise specified, lpfcdd also refers to the driver as a whole.
Both the IP and FCP functions sit on top of common code in the driver that interfaces to
the LightPulse adapter and handles Fibre Channel issues. The driver can be loaded
dynamically, at any time (with insmod), although typically the driver is loaded when the
host boots. The IP and FCP functions can be loaded separately.
The following diagram shows the software stack for network operations and SCSI
operations from the standpoint of a Linux host.
Application Application
Kernel Kernel
Protocol Stack Linux Common SCSI
(TCP/IP) Framework for HBAs
Network interface - lpfn SCSI target driver
LightPulse IP HBA LightPulse FCP/SCSI
driver, lpfndd HBA Driver, lpfcdd
Common Driver
Code
lpfcdd
Emulex LightPulse Host
Bus Adapter (HBA)
Fibre Channel Interconnect
The FCP part of the driver is implemented within the Linux common SCSI framework,
which defines the driver‟s expected behaviors and entry points from Linux. (Recall that
FCP emulates SCSI.) The SCSI target driver generates SCSI commands for each device
in use, sending those commands to the lpfcdd HBA driver, which in turn has the job of
transporting those commands to the device itself.
The IP part of the driver, lpfndd, uses the Linux Network driver interface which defines
the driver‟s expected behaviors, entry points from Linux and allows multiple processes
to open the device. The lpfndd driver is dependent on the lpfcdd driver being loaded first.
The diagnostic part of the driver, lpfcdfc, uses the Linux ioctl interface which defines the
entry points from Linux and allows multiple processes to open the device through a
special file /dev/lpfcdfc. The lpfcdfc functionality is integrated into the lpfcdd driver.
Chapter 2 - Specifics of the Device Driver
This chapter lays out the specifics of the device driver: what operating systems it
supports, what hardware it supports, and what files and variables you may need to
modify. It also discusses aspects of the driver‟s behavior that you must consider to
successfully install and boot the system with the driver included.
Supported Operating Systems
The lpfcdd device driver supports an open source release that should run on any version
version of the LINUX kernel after 2.2.14.
Supported Hardware
On the hardware side, the lpfcdd driver supports Intel x86 platforms with Peripheral
Component Interconnect (PCI) host bus subsystems.
The lpfcdd driver supports the Emulex LightPulse Family of Fibre Channel PCI host
adapters, including the LightPulse 7000, LightPulse 8000, LightPulse 850, LightPulse
9000, and LightPulse950.
On all platforms, lpfcdd should be run with a minimum of 64 megabytes of host memory.
Important Files
You need to be aware of the following files because you may need to modify them after
installing the driver. You might also need to modify one or more of these files if your
hardware configuration changes, e.g., by adding additional disk drives to the Fibre
Channel interface.
/etc/conf.modules or /etc/modules.conf
Configuration file specifying alias for SCSI and IP drivers
/etc/lilo.conf
Configuration file specifying boot image parameters
/etc/sysconfig/network-scripts/ifcfg-lpfn
Configuration files specifying adapters for use with IP networking. For each
LightPulse adapter involved in networking, there must be a ifcfg-lpfn file
containing the host’s name on that network and other network specific information.
Note that this file need not be present if the driver is only being used for SCSI
support.
Configuring these files is discussed in greater detail in the following sections.
Configuration
The installation procedure for lpfcdd handles common cases but your hardware setup may
require additional configuration changes beyond the common case. Ideally, you will
make these changes when you install the driver and before you reboot the machine.
Device Numbering
When configuring the driver, there are various configuration parameters that rely upon
device numbers. This section will attempt to explain the two different levels of device
numbering and how they apply to specific configuration parameters.
There are two different levels of device numbering. The first level of device numbering is
the driver instance number. This is the number that gets displayed in log messages to
syslog or the console, e.g. lpfcX. Typically the driver instance number is equal to the
adapter number.
The second level of numbering is the SCSI device number. This number is assigned by
the system for each SCSI target it detects. It is the typically in the special files created to
access each SCSI device, e.g. /dev/sd[a-d][a-z]. Linux supports a total of 128 SCSI
devices per system. Thus, a host could support disk devices from /dev/sda through
/dev/sddx.
Once these numbers get assigned, they will stay the same between reboots if there are no
hardware changes to the system or Fibre Channel network.
lpfcdd Configuration
All the variables that control driver initialization are set to their default values. The
administrator can change these values by editing the lpfc.conf.c file as described during
driver installation.
The variables described in this section are the ones a system administrator is most likely
to be concerned with. The table that follows summarizes the variables in this section. It is
not a substitute for reading the remainder of this section.
Important: These values are set per adapter; e.g., setting lpfc_num_iocbs to 1000
allocates 1000 I/O control blocks for every LightPulse present in the host machine.
Configuration parameters effect all LightPulse adapters in the system. Currently there is
no way to change the configuration of individual adapters.
In the descriptions below, the annotation (F) means that the variable only has meaning
when FCP functionality is enabled in lpfcdd; the annotation (I) means that the variable
only has meaning when IP functionality is enabled in lpfcdd. Variables lacking either
annotation have meaning for the entire driver, regardless of which specific functionality is
enabled. A Boolean variable should be set to either 0 (FALSE) or 1 (TRUE), although
any non-zero value will suffice for TRUE. The infinity symbol, , denotes the largest
possible unsigned integer value (e.g., 232-1). NI means not implemented yet.
Variable Default Min Max Comments
lpfc_ack0support 0 0 1 Use ACK0 for Class 2
lpfc_automap 1 0 3 Automatically assign SCSI
IDs to FCP targets detected.
lpfc_dqfull_throttle_up 1 0 128 Amount to increment LUN
_inc queue depth each time
lpfc_dqfull_throttle_up 1 0 30 Time interval, in secs, to
_time increment LUN queue depth
lpfc_check_cond_err 1 0 1 (Boolean) Treat certain FCP
Check conditions as FCP RSP
errors.
lpfc_delay_rsp_err 1 0 1 (Boolean) Treat FCP RSP errs
like no-device-delay.
lpfc_fcp_bind_WWNN Inactive N/A N/A Bind specific SCSI IDs to
targets based on Fibre
Channel WWNN.
lpfc_fcp_bind_WWPN Inactive N/A N/A Bind specific SCSI IDs to
targets based on Fibre
Channel WWPN.
lpfc_fcp_bind_DID Inactive N/A N/A Bind specific SCSI IDs to
targets based on Fibre
Channel Port ID.
lpfc_bind_entries 0 0 512 Number of entries in the
lpfc_fcp_bind_XXX array
lpfc_fcp_class 3 2 3 Fibre Channel class for FCP
data transmission.
lpfc_fcpfabric_tmo 0 0 255 Extra FCP cmd timeout when
connected to a fabric (in secs).
lpfc_ip_class 3 2 3 Fibre Channel class for IP
data transmission
Variable Default Min Max Comments
lpfc_linkdown_tmo 30 0 255 (seconds) How long driver
waits before deciding FC link
is down
lpfc_link_speed 0 0 2 Set the link speed: auto
detect, 1G, 2G
lpfc_lun_queue_depth 30 1 128 Default max commands sent
to a single logical unit(disk)
lpfc_network_on 1 0 1 (Boolean) Turn on IP
networking.
lpfc_no_device_delay 1 0 30 Sec delay to fail back an I/O
lpfc_nodev_holdio 0 0 1 (Boolean) Hold I/O err if
device disappears
lpfc_nodev_tmo 0 0 255 (seconds) to hold I/O if device
disappears
lpfc_num_bufs 2048 64 4,096 ELS and misc data buffers
lpfc_num_iocbs 2048 128 10,240 Adapter command/response
structures
lpfc_scandown 2 0 2 Select method for ALPA to
SCSI ID mapping
lpfc_tgt_queue_depth 0 0 10240 Default max commands sent
to a single target
lpfc_topology 0x04 N/A N/A Fibre Channel link topology
(defaults to arbitrated loop)
lpfc_use_adisc 0 0 1 (Boolean) Send ADISC
instead of PLOGI for device
discovery or RSCN
lpfc_log_only 0 0 1 (Boolean) Logging to log file
only
lpfc_log_verbose 0 0 0xff (bit mask) Extra activity
logging
lpfc_post_ip_buf 128 64 1024 Buffers to post to IP ring
Variable Default Min Max Comments
lpfc_xmt_que_size 256 128 10,240 Transmit queue length for
mbufs
lpfc_zone_rscn 0 0 1 (Boolean) Check NameServer
for RSCNs
lpfc_ack0support
If ack0 is 1, the adapter will try to use ACK0 when running Class 2 traffic to a device. If
the device doesn‟t support ACK0, then the adapter will use ACK1. If ack0 is 0, only
ACK1 will be used when running Class2 traffic.
lpfc_automap (F)
If automap is 1, SCSI IDs for all FCP nodes without persistent bindings will be
automatically generated. If FCP devices are added to or removed from the Fibre Channel
network when the system is down, there is no guarantee that these SCSI IDs will remain
the same when the system is booted again. If one of the FCP binding methods below is
specified, then automap devices will use the same mapping method to try to preserve
SCSI IDs between link down and link up. If no persistent binding method is specified, the
binding is by WWNN for automap 1 (default), by WWPN for automap 2, and by D_ID
for automap 3. If automap is 0, only devices with persistent bindings will be recognized
by the system.
lpfc_check_cond_err (F)
The driver will treat check condition 0x44, Internal Target Failure, and check condition
0x20, Invalid Command Operation Code, as FCP RSP errors.
lpfc_delay_rsp_err (F)
The driver will delay FCP RSP errors being returned to the upper SCSI layer based on the
no-device-delay configuration parameter.
lpfc_dqfull_throttle_up_inc (F)
lpfc_dqfull_throttle_up_time (F)
The dqfull-throttle causes lpfc to decrement a LUNs throttle (maximum queue depth) if a
queue full condition is received from the target. The queue depth will be decremented
down to a minimum of 3. The varibles lpfc_dqfull_throttle_up_inc and
lpfc_dqfull_throttle_up_time are used to restore the queue depth back to the original. The
lpfc_dqfull_throttle_up_time parameter defines a time, in seconds, that is used to tell
when to increase the current queue depth. If the current queue depth isn't equal to the
lpfc_lun_queue_depth, and the driver stop_send_io flag is equal to 0 for that device,
increment the current queue depth by lpfc_dqfull_throttle_up_inc (don't exceed the
lpfc_lun_queue_depth). So, if both parameters are set to 1, then driver increment the
current queue depth once per second until it hits the lpfc_lun_queue_depth.
lpfc_fcp_bind_WWNN (F)
Setup persistent FCP bindings based on a target device‟s WWNN. This binding
guarantees that target assignments will be preserved between reboots. The format for a
bind entry is “NNNNNNNNNNNNNNNN:lpfcXtY” Where NNNNNNNNNNNNNNNN
is a 16 digit BCD representation of the targets World-Wide Node Name, X is the driver
instance number and Y is the target assignment. Multiple entries must be separated by a
comma (,) with the last entry terminated with a semi-colon (;). Currently there is no way
to map an adapter target assignment to a specific sd device, /dev/sdX. A sample entry
follows:
char *lpfc_fcp_bind_WWNN[]={"20000020370c396f:lpfc1t0",
“20000020370c27f7:lpfc0t2"};
lpfc_fcp_bind_WWPN (F)
Setup persistent FCP bindings based on a target device‟s WWPN. This binding
guarantees that target assignments will be preserved between reboots. The format for a
bind entry is “NNNNNNNNNNNNNNNN:lpfcXtY” Where NNNNNNNNNNNNNNNN
is a 16 digit BCD representation of the targets World-Wide Port Name, X is the driver
instance number and Y is the target assignment. Multiple entries must be separated by a
comma (,) with the last entry terminated with a semi-colon (;). Currently there is no way
to map an adapter target assignment to a specific sd device, /dev/sdX. A sample entry
follows:
char *lpfc_fcp_bind_WWPN[]={"21000020370cf8263:lpfc1t0"};
lpfc_fcp_bind_DID (F)
Setup persistent FCP bindings based on a target device‟s Port ID. This binding guarantees
that target assignments will be preserved between reboots. The format for a bind entry is
“NNNNNN:lpfcXtY” Where NNNNNN is a 6 digit BCD representation of the targets
Port ID, X is the driver instance number and Y is the target assignment. Multiple entries
must be separated by a comma (,) with the last entry terminated with a semi-colon (;).
Currently there is no way to map an adapter target assignment to a specific sd device,
/dev/sdX. A sample entry follows:
char *lpfc_fcp_bind_DID[]={"0000ef:lpfc0t0"};
lpfc_bind_entries (F)
The number of persistent FCP binding entries in the fcp-bind-XXX array of bindings.
lpfc_fcp_class (F)
The lpfc driver is capable of transmitting FCP data in Class2 or Class 3. The lpfc driver
defaults to using Class 3 transmission.
lpfc_fcpfabric_tmo (F)
Extra timeout value, in seconds, to be applied to each FCP command sent. When
connecting through a fabric, certain devices may require a longer timeout value.
lpfc_ip_class (I)
Fibre Channel is capable of transmitting IP data in Class2 or Class 3. The lpfc driver
defaults to using Class 3 transmission.
lpfc_linkdown_tmo
How long the driver will wait (1 to 255 seconds) before declaring the Fibre Channel link
to be down. Commands waiting to be serviced will be aborted. For instance, FCP
commands will be returned to the target driver. The lower this value is, the quicker the
driver will fail commands back to the upper levels. There is a tradeoff here: small values
risk retrying commands when the link is bouncing, while large values risk delaying
failover in a redundant loop environment. Setting linkdown-tmo to 0 will cause all
commands issued to the device driver to be held internally (never failed) until the link
comes back up.
lpfc_link_speed
This causes lpfc to set the adapter link speed to auto-detect (0), 1 gigabit (1) or 2 gigabits
(2). This setting only applies to the 2 GB compatable LightPulse adapters.
lpfc_lun_queue_depth (F)
The driver uses this value as the default limit for the number of simultaneous commands
to issue to a single logical unit on a single target on the loop. A single logical unit will
never be sent more commands than allowed by lpfc_lun_queue_depth; however, less may
be sent when lpfc_tgt_queue_depth is reached for the entire target. The minimum value
for lpfc_lun_queue_depth is 1.
lpfc_network_on
This variable controls whether lpfc provides IP networking functionality over Fibre
Channel. This variable is a Boolean: when zero, IP networking is disabled; when non-
zero, IP networking is enabled.
lpfc_no_device_delay
This variable [0 or 1 to 30] - determines the length of the interval between deciding to fail
an I/O because there is no way to communicate with its particular device (e.g., due to
device failure or device removal) and actually failing the command. A value of zero
implies no delay whatsoever. This delay is specified in seconds. A value of 1 second is
recommended when communicating with any Tachyon based device.
lpfc_nodev_holdio
This variable controls if I/O errors are held by the driver if a device on the loop
disappears. If set, I/O errors will be held until the device returns back to the loop
(potentially indefinitely). The upper scsi layer may retry the command once the error is
returned.
lpfc_nodev_tmo
This variable controls how long I/O errors are held by the driver if a device on the loop
disappears. If set, I/O errors will be held for the specified number of seconds. The upper
scsi layer may retry the command once the error is returned.
lpfc_num_bufs
This variable specifies the number of command buffers to allocate. These buffers are used
for Fibre Channel Extended Link Services (ELS), and one for each FCP command issued
in SLI-2 mode. If you want to queue lots of FCP commands to the adapter, then you
should increase num-bufs for better performance. These buffers consume physical
memory and are also used by the device driver to process loop initialization and re-
discovery activities. Important: The driver must always be configured with at least
several dozen ELS command buffers; we recommend at least 256.
lpfc_num_iocbs
This variable indicates the number of Input/Output control block (IOCB) buffers to
allocate. IOCBs are internal data structures used to send and receive I/O requests to and
from the LightPulse hardware. Too few IOCBs can temporarily prevent the driver from
communicating with the adapter, thus lowering performance. (This condition is not
fatal.) If you run heavy IP traffic, you should increase num-iocbs for better performance.
lpfc_scandown (F)
There are three scanning algorithms used to map an ALPA to a SCSI ID in a private loop.
Refer to the “informative annex” of the FC-AL profile, which describes the algorithm for
this translation. Scan-down values 0 and 1 do not apply if a loop map is obtained. See the
FC-AL profile for the definition of a loop map. If the adapter is not attached to a fabric,
these parameters do not apply (use persistent binding). If persistent binding is used, scan-
down MUST not be 2.
If scan-down is 1,
SCSI IDs are scanned starting from ALPA 0xEF down through ALPA 1 (e.g. If only
two targets exist on the loop, the one with the highest ALPA gets assigned SCSI ID 0
and the other one gets SCSI ID 1).
If scan-down is 0,
SCSI IDs are scanned starting from ALPA 1 on up (e.g. If only two targets exist on
the loop, the one with the lowest ALPA gets assigned SCSI ID 0 and the other one
gets SCSI ID 1).
If scan-down is 2 (default value),
SCSI IDs are hard coded based on the ALPA (0xEF=SCSI ID 0, 0xE8=SCSI ID
1,…).
lpfc_tgt_queue_depth (F)
The driver uses this value as the default limit for the number of simultaneous commands
to issue to a single target on the loop. A single target will never be sent more commands
than allowed by lpfc_tgt_queue_depth. If set to 0, only lpfc_lun_queue_depth is used to
throttle commands to a device.
lpfc_topology
This variable controls the Fibre Channel topology expected by lpfc at boot time. Fibre
Channel offers point-to-point, fabric, and arbitrated loop topologies. This variable
encodes these topologies as follows:
0 Attempt loop mode, if it fails attempt point-to-point mode
2 Attempt point-to-point mode only
4 Attempt loop mode only
6 Attempt point-to-point mode, if it fails attempt loop mode (default)
To make the adapter operate as an N_Port, select point-to-point mode (used for N_Port to
F_Port, and N_Port to N_Port connections). To make the adapter operate in a Fibre
Channel loop as an NL_Port, select loop mode (used for private loop and public loop
topologies). The driver will reject an attempt to set the topology to a value not in the
above list. The auto-topology settings 0 and 6 (which is the default) will not work unless
the adapter is using firmware version 3.20 or higher.
lpfc_use_adisc
This variable controls the ELS command used for FCP address authentication during
discovery. If set, ADISC is used, otherwise, PLOGI is used.
lpfc_log_only
When set to 1, log messages are only logged to syslog. When set to 0, log messages are
also printed on the console.
lpfc_log_verbose
(bit mask) When set to non-zero this variable causes lpfc to generate additional messages
concerning the state of the driver and the I/O operations it carries out. These messages
may go to the system console and/or the system log file, /var/log/messages. See Error
Messages for detailed information on the bit mask.
lpfc_post_ip_buf (I)
This variable specifies the number 4K Network buffers to allocate and post to the fibre
channel IP ring. Increase this setting for better IP performance under heavy loading.
lpfc_xmt_que_size (I)
This variable specifies the number of network packets that can be queued or outstanding
at any time in the driver. Increase this setting for better IP performance under heavy
loading.
lpfc_zone_rscn
If zone-rscn is 1, the driver will check the NameServer data to see if an N_Port ID
received in an RSCN is pertinent to this adapter. This behavior is necessary when running
soft zoning in a Brocade fabric. If zone-rscn is 0, the RSCN is assumed to apply to this
adapter, and no NameServer query is performed.
Probing for FCP Targets -- Target Driver Configuration
The Linux lpfcdd target driver can support up to 255 devices. By default, the Linux
kernel supports between 1 and 8 LUNs / SCSI device (depending on the Linux kernel).
To get more then the default, one must modify the /etc/lilo.conf file accordingly. For the
label describing your configuration, after the read-only line, add the following line:
append=”max_scsi_luns=X”
Where X is the number of LUNs / SCSI device desired, between 1 and 128. In addition,
you should make sure “Proble all LUNs” is marked in the scsi subsystem configuration
of make menuconfig.
Configuring IP Networking
(/etc/sysconfig/network-scripts/ifcfg-lpfn)
When configuring for IP service you need to supply the name of the host machine that
Linux should use for a particular network interface. At installation time, if you indicated
that lpfc should provide IP networking service over Fibre Channel you should set up a
ifcfg-lpfn file for each LightPulse adapter being configured. Upon rebooting,
Linux will then automatically configure and set up the adapters for networking.
Note that whatever names you specify in these ifcfg-lpfn files must have valid IP
addresses associated with them, via NIS or DNS or whatever hostname-to-IP-address
translation scheme you employ. Here is an example ifcfg-lpfn file:
DEVICE=lpfnX # Where X is the lpfc interface number
IPADDR=xxx.xxx.xxx.xxx # A valid IP address for this interface
BROADCAST=xxx.xxx.xxx.xxx # The broadcast address for this interface
NETWORK=xxx.xxx.xxx.xxx # The network address for this interface
NETMASK=255.255.255.0 # The network Mask for the interface
ONBOOT=yes
Note: the file, ifcfg-eth0 can also be used as an example. You will have to reboot the
machine for these changes to take effect.
System-Wide Configuration (/etc/lilo.conf)
This configuration file is used to define a boot image. After the driver is installed a new
boot image should be defined with in this file. Check Linux man pages, lilo.conf(5).
Driver Configuration (lpfc.conf.c)
This configuration file is used to modify configuration parameters for the driver.
Chapter 3 - Installation and Boot Instructions
3.1 Build / Installation Instructions
To install the driver and boot the system, follow these instructions.
1. You must be running as root. Therefore, you must login as or su to
root.
2. For this release, you must build your binary driver from the
SourceBuild directory. Currently we run under two different
platforms, Intel i386 and ia64. There is a different tarball (lpfc-
i386.tar, lpfc-ia64.tar) for each supported platform.
2.1 Build Driver module
# tar xvf
# cd SourceBuild
This directory contains the necessary tools to build the drivers, from
source, for a specific LINUX operating system.
There are 2 drivers used to support the Emulex LightPulse Fibre Channel
Adapters:
lpfcdd - main driver, FCP support, Diagnostic support
lpfndd - IP support
NOTE: lpfndd is dependent on lpfcdd being loaded first
The following files should be in the SourceBuild directory:
Makefile.module Used to build driver as a standalone module
Makefile.kernel Used to build driver under the /usr/src/linux kernel
subtree
diag_load Used to create special file for lpfcdfc driver
diag_unload Used to clean special files and unload lpfcdfc driver
fcLINUXfcp.c Source code for lpfcdd driver
fcLINUXlan.c Source code for lpfndd driver
lpfc.conf.c Configuration File for main driver, lpfcdd
lpfcdriver Common support library for driver
lpfcdriverMCON Common support library for driver (ia64 LINUX only)
dfc Diagnostic utility for driver debug
lputil Diagnostic utility for adapter maitenance
include Directory contains headers used by the above drivers
dfc.h fc_ertn.h fc.h fc_hw.h fc_os.h fcdds.h fcdiag.h
fcfgparm.h
Before running the Makefile, make sure /usr/src/linux is linked to the
source tree desired and /lib/modules/kernel_version exists. The source
to the entire kernel tree should be on your system, not just header
files. Both kernel-headers and kernel-source RPMs must be installed. If
you have a different kernel base directory, other than /usr/src/linux,
you MUST change the BASEINCLUDE variable in the Makefile accordingly.
For a non-SMP kernel module (i386 platform only) you MUST:
Edit the Makefile, make sure CFLAGS does not have -D__SMP__=1 defined
# Edit lpfc.conf.c, if needed
# make build # Will build both drivers
# make install # Will install both drivers under
# /lib/modules/kernel_version
# or you can insmod the drivers manually
2.2 Build Driver into kernel
Before running the Makefile, make sure /usr/src/linux is linked to the
source tree desired. If you have a different kernel base directory,
other then /usr/src/linux, you MUST change the BASEINCLUDE variable in
the Makefile accordingly and substitute your new base for /usr/src/linux
in the following steps.
SCSI functionality
# cd SourceBuild
# mkdir /usr/src/linux/drivers/scsi/lpfc
# find . –print | cpio –pdumv /usr/src/linux/drivers/scsi/lpfc
# cd /usr/src/linux/drivers/scsi/lpfc
# cp Makefile.kernel Makefile
# Edit the Makefile and lpfc.conf.c files if needed
# cd /usr/src/linux (For some 2.4 based kernels) This will allow scsi/lpfc
Makefile to be envoked BEFORE the scsi Makefile.
Edit Rules.make and remove sort from the line
From:
subdir-list = $(patsubst %,_subdir_%,$(SUB_DIRS))
# cd /usr/src/linux/drivers
# Edit Makefile
Just BEFORE $(CONFIG_SCSI) adds scsi to the directory lists, add a check
for $(CONFIG_SCSI_LPFC) to add scsi/lpfc to the directory lists. We want
the scsi/lpfc Makefile to be envoked BEFORE the scsi Makefile.
# cd /usr/src/linux/drivers/scsi
# Edit Config.in and add (alphabetical order)
> dep_tristate 'Emulex LightPulse Fibre Channel support' CONFIG_SCSI_LPFC
$CONFIG_SCSI
# Edit Makefile and add (with other CONFIG_SCSI_devices)
Add a check for if $(CONFIG_SCSI_LPFC) is defined, add lpfcdd.o to the object
list.
# Edit hosts.c and add (For some 2.2 based kernels)
> #ifdef CONFIG_SCSI_LPFC
> #include “lpfc/include/fc_os.h”
> #endif
At the end of the definition for Scsi_Host_Template, BEFORE “Removable
host adapters add:
> #ifdef CONFIG_SCSI_LPFC
> EMULEXFC,
> #endif
TCP/IP Networking functionality
# cd /usr/src/linux/drivers/net
# Edit Config.in and add within the "if [ "$CONFIG_NET_FC" = "y" ]; then" logic
> dep_tristate 'Emulex LightPules Fibre Channel support' CONFIG_NET_LPFC
$CONFIG_SCSI
# Edit Space.c ONLY if you are building the driver into the kernel.
Add the following lines within the appropriate CONFIG_NET_FC ifdef:
> static int lpfnif_probe(struct net_device *dev)
> {
> lpfn_probe();
> return 0;
> }
Add the following lines within the appropriate CONFIG_NET_FC ifdef,
after
#define NEXT_DEV (&fc0_dev):
> static struct net_device lpfn_dev = {
> "lpfn", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, lpfnif_probe};
> # undef NEXT_DEV
> # define NEXT_DEV (&lpfn_dev)
Follow normal procedures for building LINUX kernel and include
Emulex LightPulse Fibre Channel support
# cd /usr/src/linux
# make mrproper
# make menuconfig
Select „Emulex LightPulse Fibre Channel support‟ under SCSI low level
drivers menu for FCP support.
Select „Probe all LUNs on each SCSI device‟ under the SCSI support menu
if you want to support FCP devices that have multiple LUNs.
Select „Fibre Channel driver support‟ „Emulex LightPulse Fibre Channel
support‟ under Network Device support menu for IP support.
If you Select building the driver into the kernel run
# make dep
# make clean
# make install
# cat vmlinux > /boot/efi/vmlinuxX (for ia64 only)
If you Select module support for the driver you can also run
# make modules
# make modules_install
3. At this point, you should have 2 driver modules, lpfcdd.o and lpfndd.o, that need to be
configured into the system
Edit /etc/conf.modules to add SCSI and IP modules.
Add the following line to add a SCSI module:
alias scsi_hostadapter lpfcdd
Add the following line to add an IP module:
alias lpfnX lpfndd
where X is the interface number, 0 thru 7.
Note: If you want to configure SCSI only, just add the scsi_hostadapter line. The
IP module is dependent on the SCSI modules being there, so you cannot configure
just IP.
4. Run the following command to update your system with the information you added to
/etc/conf.modules:
depmod -a
5. Edit /etc/sysconfig/network-scripts/ifcfg-lpfnX.
Where X is the interface number, 0 thru 7. This file should be created if you wish to
configure IP. Use /etc/sysconfig/network-scripts/ifcfg-eth0 as an example. See
previous section for details.
6. Edit /etc/lilo.conf to specify boot / startup parameters
Typically it‟s a good idea to keep a boot image record that is known good so you can
boot the system in case of problems. A boot image record consists of lines between
“image=kernel_version” entries. An example of a default /etc/lilo.conf follows:
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux
image=/boot/vmlinuz-kernel_version
label=linux
root=/dev/sda8
initrd=/boot/initrd-kernel_version.img
read-only
To add a new boot record for our driver, the following lines should be appended to
the end of the file:
image=/boot/vmlinuz-kernel_version
label=new_label
root=/dev/sda8
initrd=/boot/new_image_filename
read-only
append=”max_scsi_luns=128”
Note: Currently lpfc is not supported as the root device, so you should keep the
“root=/dev/xxx” parameter the same.
7. Configure LUN support
By default, the Linux kernel doesn‟t support LUNs. To get multiple LUNs, one must
add the line append=”max_scsi_luns=LUNs”. Where LUNs is the number of LUNs
per SCSI device. Adding this line is optional.
8. Build a boot image
The boot image new_image_name must match the name specified
in the /etc/lilo.conf file. Run the commands:
rm –f /boot/new_image_filename
/sbin/mkinitrd /boot/new_image_name kernel_version
9. Load the boot image
Run the commands:
lilo -t -v To check out the boot image
lilo -v To load it
10. Reboot the system to incorporate the new driver. At the shell prompt, type the
following:
# sync
# reboot
11. Select the boot image to use
As the system reboots, you will be prompted with LILO boot: At this point you
should enter the name of the label of you boot image, new_label in the above
example, or just hit enter and the default boot image will be loaded. The default boot
image is the first one defined in the lilo.conf file.
12. Use MAKEDEV to generate SCSI special files
By default, there are SCSI special files for the first 16 SCSI devices,
/dev/sd[abcdefghijklmnop]. If you wish to generate additional SCSI special files, the
MAKEDEV command in the /dev directory should be used. See, man MAKEDEV,
for details.
13. Setup diagnostic utilities
Go to the directory where you extracted the distribution image in Step 2. Type the
following commands:
# go to the SourceBuld directory
cd SourceBuild
# To make special files needed for this interface
sh diag_load
# Make a directory to save diagnostic utilities
mkdir /usr/sbin/lpfc
# Copy utilities to directory
cp dfc lputil /usr/sbin/lpfc
The system will reboot to multi-user mode and the Emulex LightPulse will be available
for use. NOTE: whenever there is a change to a driver module (lpfcdd lpfcdfc or lpfndd),
the file /etc/conf.modules, or the file /etc/lilo.conf; steps 7 through 10 need to be re-run
for the changes to take effect.
3.2 Using lpfcdd as the boot device
It is possible to use a device, connected to the lpfcdd driver, as the boot device. The only
restriction is you must be booted off an existing SCSI or IDE boot / root device and
excercise the following steps:
1. Prepare boot image (Note the use of --preload to load lpfcdd before other modules):
/sbin/mkinitrd --preload lpfcdd /boot/new.img
2. Create a boot floppy, insert a floppy disk into the drive
/sbin/mkbootdisk
mount /mnt/floppy
cp /boot/new.img /mnt/floppy/initrd.img
3. Identify the Fibre Channel device you wish to use as the boot / root device, /dev/sdX .
Create partitions and make file systems on the Fibre Channel boot drive.
fdisk /dev/sdX
Device Boot Start End Blocks Id System
/dev/sdX1 1 4 32098+ 83 Linux <==+25M
/dev/sdX2 5 13 72292+ 82 Linux swap <==+64M
/dev/sdX3 14 1106 8779522+ 83 Linux <==end of device
mkfs.ext2 /dev/sdX1
mkfs.ext2 /dev/sdX3
mkswap /dev/sdX2
mount /dev/sdX1 /mnt0
mount /dev/sdX3 /mnt1
4. Copy the file system from the running system (you can use any other procedure to copy
the system)
cd /
tar cf - ./bin ./dev ./etc ./lib ./misc ./mnt ./root ./sbin ./tmp ./usr
./var ./home | (cd /mnt1;tar xf -)
cd /boot
tar cf - . | (cd /mnt0;tar xf -)
cd /mnt1
mkdir boot proc home
5. Modify fstab on the Fibre Channel boot disk (you can keep old SCSI drives in fstab, just
change their devs to the correct one and mkdir their mount points)
cd /mnt1/etc
Edit fstab, change to:
/dev/sdX3 / ext2 defaults 1 1
/dev/sdX1 /boot ext2 defaults 1 2
/dev/sdX2 swap swap defaults 0 0
/dev/fd0 /mnt/floppy ext2 noauto,owner 0 0
.
. <==other drives (CD for example)
.
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
6. Boot using the floppy we made in step 2
On LILO boot prompt type
linux root=/dev/sdX3
From now on, we are dealing with FC boot disk
7. Modify /etc/lilo.conf as follows:
boot=/dev/sdX
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux
image=/boot/vmlinuz-2.2.12-20 <== whatever kernel version you are
using
label=linux
initrd=/boot/new.img
read-only
root=/dev/sdX3
cd /boot
rm map
lilo -v
8 . Reboot without the floppy. If another SCSI adapter BIOS starts before Emulex's
BIOS, this adapter must be disabled. Otherwise, the lpfcdd module will be loaded first
and the other SCSI will be second.
Chapter 4 - Operational Issues and Known Bugs
The following operational issues and bugs were known at the time the documentation was
created.
An operational issue is a property of the driver alone or in conjunction with Linux, that
results in behavior worthy of being called to the attention of the system administrator. A
bug is a Linux defect, an lpfc driver defect, a host bus adapter hardware or firmware
defect, or a disk drive hardware or firmware defect that may be fixed in a subsequent
revision of the software or hardware in question.
Operational Issues
FCP
Discovering Disk Drives
The user can simply enter the command:
cat /proc/scsi/scsi
to list all the SCSI devices discovered at boot time.
Sometimes, the driver recognizes disk drives at boot time but you won‟t be able to use
those drives because special file entries for them do not exist. By default Linux provides
special files for up to 16 SCSI devices. With our driver, targets 1 through 255 are
supported, with up to 128 LUNs per target. To create additional special files, use the
MAKEDEV command in the /dev directory.
Different SCSI Target IDs on Different Hosts
A Fibre Channel target is assigned its D_ID at loop initialization time; the SCSI target ID
for that target is assigned by the device driver when the device is first discovered. It is
possible for the D_ID to change between one loop initialization and the next. Every time
a system boots or a target is added to or removed from the Fibre Channel, the loop will be
re-initialized. After a system has booted, it will maintain a constant view of the same
target ID because the driver software remaps the SCSI target ID to the new D_ID on the
fly. However, a second system may use a different SCSI target ID for that target. Thus,
an administrator seeking to work with the same target across multiple hosts must be
prepared to encounter the situation where the same Fibre Channel target is known by
different SCSI target IDs. The persistent binding feature of this device driver is currently
NOT supported.
Common Problems
This section deals with common failure modes, what they mean, and how to fix them.
LIP type F8
Some disk drive firmware does not recover from a LIP type F8 in the way expected by
other Fibre Channel devices; the result can be a loop full of devices that are all hopelessly
confused. Usually, the best that can be done for recovering from this situation is to
reboot all the hosts involved and power cycle all the disk drives involved.
Unfortunately, it may be difficult to realize that an F8 LIP has happened: subsequent
loop events may obscure the relevant log messages on the console or in the system log.
The Emulex Digital Hub will bypass devices sending LIP F8, and keep your loop up and
running.
Operation with other installed SCSI drivers
Currently, in Linux, there is a potential probem that may result if the lpfcdd driver is
installed on a system that already has an operational SCSI driver from another vendor.
When looking through /etc/conf.modules, Linux loads the drivers and assigns SCSI
devices (/dev/sdX), based on the drivers name, in alphabetical order.
For example, lets say an Adaptec driver is already installed, with the root / boot device on
/dev/sda. The lpfcdd driver will be loaded after the aha driver, since „a‟ comes before „l‟,
and will not effect the device assignment done by Linux (/dev/sda will still be root /
boot). However, if a NCR driver is already installed, with the root / boot device on
/dev/sda, the lpfcdd driver will be loaded before the ncr driver, since „l‟ comes before „n‟.
This will effect device assignment since the first device on lpfcdd will be assigned
/dev/sda. Also, the addition / removal of lpfcdd devices will effect what device, /dev/sdX,
is assigned to the NCR driver root / boot device.
To get around this effect, the administrator may rename our driver zlpfcdd in the file
/etc/conf.modules, and the driver module to zlpfcdd.o This will cause the NCR driver to
be loaded first. Another way of accomplishing this is by using the –preload option for
mkinitrd.
Operation as the boot / root device
You must first have a SCSI or IDE boot / root device in order to create a fibre channel
(lpfcdd) boot device.
Chapter 5 - Diagnostic utility - lputil
The required files for the common utility are automatically loaded when the Emulex
driver files for Linux are installed.
Enter this path to start the utility:
/usr/sbin/lpfc/lputil
After the lputil goes through its start-up procedure, the Main menu displays:
Main Menu
This table describes each option. Values are in hexadecimal format.
Menu Description
Selection
1. List Adapters This option displays a list of host adapters
discovered in the system.
2. Adapter This option displays host adapter characteristics:
Information PCI configuration parameters, adapter revision
levels, wakeup parameters, IEEE address, loop
map, status and counters, link status and adapter
configuration parameters.
3. Firmware This option is used to upgrade firmware or
Maintenance download PCI configuration data. Acceptable file
formats are: absolute firmware image (.awc),
program image (.prg), and download with
checksum (.dwc). Each file is hardware specific
(LP7000, LP8000, etc.), but can be used on
supported platforms (AIX, Solaris, Windows NT).
PCI configuration data is contained in .cfl files,
with can be used across any supported platform for
type of supported host adapter.
4. Reset Adapter This option can be used during troubleshooting to
isolate one adapter from several installed. In most
cases, the upgrade procedure performs an
automatic restart of the host adapter.
Update Host Adapter Firmware
1. Obtain a copy of the upgrade file.
Upgrade files are available on the Emulex ftp server at
ftp://ftp.emulex.com/pub/fibrechannel.
From the common utility Main menu,
2. Select 3, Firmware Maintenance.
This menu displays
FIRMWARE MAINTENANCE MENU
1. Load Firmware Image
2. Display AWC File Contents
3. Display Flash Load List
4. Display RAM Load List
5. Load PCI Configuration File
3. Select 1, Load firmware image.
4. Enter the new firmware image file name.
This file downloads to the FLASH ROM of the host adapter. The board should
automatically reset.
5. Upon completion, press 0 to return to Main menu.
6. Select 2, Adapter Information.
7. Select 2, Adapter Revision Levels.
Verify that the new revision level is displayed.
Chapter 6 - Error Messages
By default, error / warning messages are printed to the console and error logged. If the
configuration parameter, log-only, is set, messages are only error logged.
Some messages are only recorded if the log-verbose configuration parameter is turned
on.
With the verbose parameter, you can set a bit mask to record specific types of verbose
messages:
0x1 ELS events
0x2 Device Discovery events
0x4 Mailbox Command events
0x8 Miscellaneous events
0x10 Link Attention events
0x20 IP events
0x40 FCP events
0x80 Node table events
The following section describes each error /warning message and indicates any user
actions needed. In addition, the message status (ERROR, WARNING, PANIC) and
(always / verbose) and driver source code location are also given.
Error messages are of the format:
LpfcN: Num : Message Data: Variables
Where N is the interface number
Num is a unique 3-digit error code
Message is the Error Message
Variables are 4 message dependent data variables
Platform Independent errors
These error codes range from 001 to 099.
lpfcN: 1 : Stray ELS completion
Received an ELS command completion without issuing a corresponding ELS
Command (based on the iotag field in the CMD_ELS_REQUEST_CR iocb). The
IOCB command and iotag used to match are recorded.
ACTION: This error could indicate a software driver or firmware problem. If
problems persist report these errors to customer service.
ERROR always fcelsb.c
lpfcN: 2 : ELS [command response] completion error
An ELS command completed with a status error in the IOCB. The IOCB
command, IOCB status, IOCB parameter error, as well as the Port ID this ELS
command was directed to are recorded. This is only a warning. It could mean
The Fibre Channel device on the network is not responding.
The Fibre Channel device is not an FCP target.
The Fibre Channel driver will automatically retry this ELS command if needed.
ACTION: If the ELS command is a PLOGI or PRLI, and the destination PortID is
not an FCP Target, no action is needed. Otherwise, check physical connections to
Fibre Channel network and the state the remote PortID is in.
WARNING ELS verbose fcelsb.c
lpfcN: 3 : Device Discovery completion error
This indicates an uncorrectable error was encountered during device (re)discovery
after a link up. Fibre Channel devices will not be accessible if this message is
displayed. The location within the driver is recorded.
ACTION: Reboot system. If problem persists, contact customer support. Run
with verbose mode on for more details.
ERROR always fcelsb.c
lpfcN: 4 : Device Discovery completes
This indicates successful completion of device (re)discovery after a link up. The
location within the driver is recorded.
ACTION: none needed.
WARNING DISCOVERY verbose fcelsb.c
lpfcN: 5 : Unknown ELS [command response iocb]
An ELS command, ELS response, or ELS ring IOCB are not supported or have an
illegal value.
The illegal / unknown value is recorded.
ACTION: This error could indicate a software driver or firmware problem. If
problems persist report these errors to customer service.
ERROR always fcelsb.c
lpfcN: 6 : FARP-[REQ RSP] received
A FARP ELS command was received from a Fabric. The command originator‟s
PortID is recorded.
ACTION: none needed.
WARNING IP verbose fcelsb.c
lpfcN: 7 : FLOGI completes successfully
A Fabric Login completed successfully. The assigned PortID, R_A_TOV and
E_D_TOV are recorded.
ACTION: none needed.
WARNING DISCOVERY verbose fcelsb.c
lpfcN: 8 : PRLI completes successfully
A PRLI to a FCP target completed successfully. target PortID and FCP SCSI ID
(pan, sid) are recorded.
ACTION: none needed.
WARNING FCP / DISCOVERY verbose fcelsb.c
lpfcN: 9 : FAN received
A FAN ELS command was received from a Fabric. The assigned PortID and
internal driver state are recorded.
ACTION: none needed.
WARNING DISCOVERY verbose fcelsb.c
lpfcN: 10 : RSCN received
A RSCN ELS command was received from a Fabric. The internal driver state and
size of the RSCN payload is recorded.
ACTION: none needed.
WARNING DISCOVERY verbose fcelsb.c
lpfcN: 11 : Unknown Identifier in RSCN payload
Typically the identifier in the RSCN payload specifies a domain, area or a specific
N_Port ID. If neither of these are specified, a warning will be recorded. The value
of the illegal identifier will be recorded.
ACTION: Potential problem with Fabric. Check with Fabric vendor.
WARNING always fcelsb.c
lpfcN: 12 : ELS Retry failed
If an ELS command fails, it may be retried up to 3 times. This message will be
recorded if the driver gives up retrying a specific ELS command. The value of the
ELS command and the Remote PortID will be recorded.
ACTION: If the ELS command is a PRLI, and the destination PortID is not an
FCP Target, no action is needed. Otherwise, check physical connections to Fibre
Channel network and the state the remote PortID is in.
WARNING ELS verbose fcelsb.c
lpfcN: 13 : Service Level Interface selected
Either a CONFIG_PORT (SLI2) or PART_SLIM (SLI1) mailbox command was
issued.
The SLI selected, 1 or 2, and the virtual address of the SLIM will be recorded.
ACTION: none needed.
WARNING MISC verbose fcmboxb.c
lpfcN: 14 : Memory Buffer Pool is below low water mark
A driver memory buffer pool is low on buffers. The buffer pool number and low
water mark are recorded.
ACTION: none needed.
WARNING MISC verbose fcmemb.c
lpfcN: 15 : Memory Buffer Pool is out of buffers
A driver memory buffer pool is exhausted. The buffer pool number is recorded.
ACTION: Configure more resources for that buffer pool. If problems persist
report these errors to customer service.
ERROR always fcmemb.c
lpfcN: 16 : Cannot find virtual address for mapped buffer
The driver cannot find the specified buffer in its mapping table. Thus is cannot
find the virtual address needed to access the data. The mapped buffer address and
ring number are recorded.
ACTION: If problems persist report these errors to customer service.
ERROR always fcmemb.c
lpfcN: 17 : Ran out of Node Table entries
The driver maintains a node table with one entry for every device it needs to
communicate with on the Fibre Channel network. The number of table entries and
the PortID for the device that failed are recorded. This message will be a warning /
verbose if the driver can free up some unused node table entries.
ACTION: Reduce the number of devices in your Fibre Channel network. If
problems persist report these errors to customer service.
ERROR always fcrpib.c
lpfcN: 18 : Device Discovery Started
Device discovery / rediscovery after FLOGI or FAN has started. The location
within the driver is recorded.
ACTION: none needed.
WARNING DISCOVERY verbose fcrpib.c
lpfcN: 19 : Stray FCP Completion
Received an FCP command completion without issuing a corresponding FCP
Command (based on the iotag field in the FCP iocb). The IOCB command, IOCB
status, IOCB parameter and iotag used to match are recorded.
ACTION: This error could indicate a software driver or firmware problem. If
problems persist report these errors to customer service.
ERROR always fcscsib.c
lpfcN: 20 : FCP completion error
An FCP command completed with a status error in the IOCB. The IOCB status,
the IOCB parameter error, as well as the PortID this FCP command was directed
to are recorded
ACTION: If there are many errors to one device, check physical connections to
Fibre Channel network and the state the remote PortID is in.
ERROR always fcscsib.c
lpfcN: 21 : Rcv Ring: out of posted buffers
If the ring number is 1 (IP ring) this usually means the system is out of TCP/IP
buffers. The ring number and missed buffer count are recorded
ACTION: Try allocating more IP buffers (STREAMS buffers or mbufs) of size
4096 and/or increasing post-ip-buf configuration parameter. Reboot the system.
ERROR IP verbose fcscsib.c
lpfcN: 22 : NameServer Rsp buffer allocation failed
We received a NameServer Response and we need a buffer to put it in. This
usually means the system is out of TCP/IP buffers.
ACTION: Try allocating more IP buffers (STREAMS buffers or mbufs) of size
4096 and reboot the system.
ERROR always fcscsib.c
lpfcN: 23 : Post buffer for IP ring fails
The driver cannot post a buffer to the IP ring. This usually means the system is out
of TCP/IP buffers. The missed buffer count is recorded
ACTION: Try allocating more IP buffers (STREAMS buffers or mbufs) of size
4096 and reboot the system.
ERROR always fcscsib.c
lpfcN: 24 : Command ring timeout
An IOCB command was posted to a ring and did not complete within a timeout
based on ratov. The ring number and the IOCB command are recorded.
ACTION: This error could indicate a software driver or firmware problem. If no
I/O is going through the adapter, reboot the system. If these problems persist,
report the errors to customer service.
ERROR always fcscsib.c
lpfcN: 25 : Mailbox command timeout
A Mailbox command was posted to the adapter and did not complete within 30
seconds. the Mailbox command and status are recorded.
ACTION: This error could indicate a software driver or firmware problem. If no
I/O is going through the adapter, reboot the system. If these problems persist,
report the errors to customer service.
ERROR always fcscsib.c
lpfcN: 26 : FAN timeout
We received a link up event without the login bit set, so the driver waits
E_D_TOV for the Fabric to send a FAN. If no FAN if received, a FLOGI will be
sent after the timeout.
ACTION: None needed. The driver recovers from this with a FLOGI to the
Fabric.
WARNING always fcscsib.c
lpfcN: 27 : NameServer Registration timeout
Our registration request to the Fabric is not acknowledged within ratov.
ACTION: Check Fabric configuration. The driver recovers from this and
continues with device discovery.
WARNING always fcscsib.c
lpfcN: 28 : Nameserver Query timeout
Node Authentication timeout
Node Discovery timeout
A NameServer Query to the Fabric or discovery of reported remote NPorts is not
acknowledged within R_A_TOV.
ACTION: Check Fabric configuration. The driver recovers from this and
continues with device discovery.
WARNING always fcscsib.c
lpfcN: 29 : pt2pt timeout
This indicates a PLOGI has not been received, within R_A_TOV, after a
successful FLOGI, which indicates our topology is point to point with another
N_Port. Typically this PLOGI is used to assign a N_Port ID.
ACTION: None Needed, driver will recover by configuring N_Port ID as 0.
WARNING always fcscsib.c
lpfcN: 30 : SCSI timeout
An FCP IOCB command was posted to a ring and did not complete within ULP
timeout seconds. The IOCB command, N_Port ID and SCSI ID are recorded.
ACTION: If no I/O is going through the adapter, reboot the system; otherwise
check the state of the target in question.
WARNING FCP verbose fcscsib.c
lpfcN: 31 : Link [Up Down] Event received [ALPA map]
Either a link up or link down link event is received. It is also possible for multiple
link events to be received together. If this happens the current event number, last
event number received, ALPA granted, and number of entries in the loop init
LILP ALPA map are recorded. For a Link Up, an ALPA map message is also
recorded if LINK_EVENT verbose mode is set. Each ALPA map message
contains 16 ALPAs.
ACTION: If numerous link events are happening, check physical connections to
Fibre Channel network.
WARNING always / LINK_EVENT fcscsib.c
lpfcN: 32 : Unknown Mailbox completion
An unsupported or illegal Mailbox command completed. The unknown value is
recorded.
ACTION: This error could indicate a software driver or firmware problem. If
problems persist report these errors to customer service.
ERROR always fcscsib.c
lpfcN: 33 : SCSI Link reset
The SCSI layer has determined the link needs to be reset. A LIP is sent to restart
loop initialization.
ACTION: None Needed.
WARNING always fcscsib.c
lpfcN: 34 : Bring Adapter online
The driver has received a request to bring the adapter online. This may happen
when running lputil.
ACTION: None Needed.
WARNING always fcscsib.c
lpfcN: 35 : Bring adapter offline
The driver has received a request to bring the adapter offline. This may happen
when running lputil.
ACTION: None Needed.
WARNING always fcscsib.c
lpfcN: 36 : Abort Target I/O: clearq
This is displayed if the driver internally detects that it needs to abort all I/O to a
specific device. This results in a Fibre Channel ABTS to abort the I/O in process.
The target N_Port ID, SCSI ID, and LUN are recorded.
ACTION: Check state of target in question.
WARNING FCP verbose fcscsib.c
lpfcN: 37 : Abort Target I/O: issue_abort
This is displayed if the SCSI layer detects that it needs to abort all I/O to a specific
device. This results in an FCP Task Management command to abort the I/O in
progress. The target N_Port ID, SCSI ID, and LUN are recorded.
ACTION: Check state of target in question.
WARNING always fcstratb.c
lpfcN: 38 : FCP command failed
This indicates a target has sent us a FCP RSP error. Because of the amount of
information that needs to be recorded, two back to back messages are generated.
The first records the IOCB information, the IOCB cmd, Iotag, status, and
parameter error field. The second records FCP information, N_Port ID, SCSI ID,
LUN, and FCP response status bytes.
ACTION: Check the state of the target in question.
WARNING FCP verbose fcscsib.c
lpfcN: 39 : Cannot issue FCP command
This indicates we no longer have a valid login with a target. The target N_Port ID,
SCSI ID, and LUN are recorded.
ACTION: Check the state of the target in question.
WARNING always fcstratb.c
lpfcN: 40 : No room on IP xmit queue
This message indicates the system is generating IOCB commands to be processed,
faster than the adapter can process them.
ACTION: Check the state of the link. If the link is up and running, reconfigure the
xmit queue size to be larger. Note, a larger queue size may require more system
IP buffers. If the link is down, check physical connections to Fibre Channel
network.
WARNING IP verbose fcxmitb.c
lpfcN: 41 : Stray XmitSequence completion
Received an XMIT_SEQUENCE IOCB completion without issuing a
corresponding XMIT_SEQUENCE Command (based on the iotag field in the
XMIT_SEQUENCE_CR iocb). The IOCB command and iotag used to match are
recorded.
ACTION: This error could indicate a software driver or firmware problem. If
problems persist report these errors to customer service.
ERROR always fcxmitb.c
lpfcN: 42 : Xmit sequence completion error
A XMIT_SEQUENCE command completed with a status error in the IOCB. The
IOCB status, the IOCB iotag, the IOCB parameter error, as well as the PortID this
command was directed to are recorded. The driver attempts to recover by creating
a new exchange to the remote device.
ACTION: If there are many errors to one device, check physical connections to
Fibre Channel network and the state the remote PortID is in.
WARNING IP verbose fcxmitb.c
lpfcN: 43 : Stray CreateXRI completion
Received a CREATE_XRI command completion without issuing a corresponding
CREATE_XRI Command (based on the iotag field in the CREATE_XRI_CR
iocb). The IOCB command and iotag used to match are recorded.
ACTION: This error could indicate a software driver or firmware problem. If
problems persist report these errors to customer service.
ERROR always fcxmitb.c
lpfcN: 44 : Adapter failed to initialize
This indicates the host adapter failed to initialize properly. The adapter status
register is recorded.
ACTION: This error usually indicates a hardware problem with the adapter, run
diagnostics.
ERROR always lp6000.c
lpfcN: 45 : Adapter initialization failed, Mailbox command
This indicates the host adapter failed to initialize properly because a mailbox
command failed. The mailbox command and mailbox status values are recorded.
ACTION: This error usually indicates a hardware problem with the adapter, run
diagnostics.
ERROR always lp6000.c
lpfcN: 46 : RUN_BIU_DIAG failed
This indicates the host adapter failed to initialize properly because a PCI bus
DMA test failed.
ACTION: This error usually indicates a hardware problem with the adapter, run
diagnostics.
ERROR always lp6000.c
lpfcN: 47 : WorldWide PortName doesn't conform to IP Profile
In order to run IP, the WorldWide PortName must be of type IEEE (NAA = 1).
This message is display if the adapter WWPN doesn‟t conform to the standard.
The NAA is recorded.
ACTION: Turn off the network-on configuration parameter or has a different
WWPN assigned.
ERROR always lp6000.c
lpfcN: 48 : Enable interrupt handler failed
This error occurs if the driver cannot assign an interrupt vector to the host adapter.
ACTION: Check configuration of adapter in system.
ERROR always lp6000.c
lpfcN: 49 : Adapter Hardware Error
This error occurs if we get a FireFly error interrupt and the status register indicates
a nonrecoverable error. . The adapter status register is recorded.
ACTION: This error usually indicates a hardware problem with the adapter, run
diagnostics.
ERROR always lp6000.c
lpfcN: 50 : Stray Mailbox Interrupt
Received a Mailbox command completion and the mailbox is not owner by the
host. The Mailbox command and status are recorded.
ACTION: This error could indicate a software driver or firmware problem. If
problems persist report these errors to customer service.
ERROR always lp6000.c
lpfcN: 51 : [29,xx] Check condition received
This error could indicate a problem with a FCP target. The check condition
response info fields are recorded. A 29,xx check condition is only recorded in
verbose mode.
ACTION: Check state of FCP target
ERROR always lp6000.c
lpfcN: 52 : [Xmit Received] ELS [command response]
This error could indicate a problem with a FCP target.. The check condition
response info fields are recorded. A 29,xx check condition is only recorded in
verbose mode.
ACTION: No action needed.
WARNING ELS verbose fcelsb.c
Appendix A - Glossary
ALPA Arbitrated Loop Physical Address; the address of a node on Fibre Channel when
running in an Arbitrated Loop topology
DMA Direct Memory Access; the ability of some devices to send data directly to/from
memory without intervention by the host processor.
HBA Host Bus Adapter
HBA driver A driver responsible for managing a host bus adapter; transports
commands and responses between a target driver and a SCSI or FCP target
IP Internet protocol
ISA Instruction Set Architecture
JBOD Just a Bunch Of Disks. A cabinet, power supply, and disks. No controller or
fancy logic.
LILP Loop Initialization Loop Position
LIRP Loop Initialization Report Position
lpfcdd LightPulse Fibre Channel host bus adapter driver as a whole; also specifically the
FCP portion of that driver
lpfndd LightPulse Fibre Network host bus adapter driver; specifically, the IP portion of
the lpfcdd driver
LUN Logical Unit Number
PCI Peripheral Component Interconnect
SCSI Small Computer System Interface
target driver A driver responsible for generating commands for and interpreting
responses from a target; these commands are sent via the HBAdriver for a device on the
SCSI bus, for instance a disk, tape, or CD-ROM
WWNN World-Wide Node Name, used to uniquely identify a Fibre Channel
device.
WWPN World-Wide Port Name, used to uniquely identify a Fibre Channel device.