FILE NAME:			hp-netxtreme2-6.2.23-2.src.rpm

TITLE:			HP NC-Series Broadcom 1/10 GbE multifunction and iSCSI Offload
				drivers for Linux

VERSION:			6.2.23

RELEASE:			2

LANGUAGE:			English

CATEGORY:			Software Solutions

DIVISIONS:			Enterprise and Mainstream Servers

PRODUCTS AFFECTED:
				bnx2:
				HP NC370x Gigabit Server Adapter
				HP NC371x Gigabit Server Adapter
				HP NC373x Gigabit Server Adapter
				HP NC374x Gigabit Server Adapter
				HP NC380x Gigabit Server Adapter
				HP NC382x Gigabit Server Adapter

				bnx2x:
				HP NC532x Dual Port 10GbE Multifunction BL-c Adapter

OPERATING SYSTEMS:
				Red Hat Enterprise Linux 6 AS/ES for AMD64/EM64T
				Red Hat Enterprise Linux 6 AS/ES for x86
				Red Hat Enterprise Linux 5 AS/ES for AMD64/EM64T
				Red Hat Enterprise Linux 5 AS/ES for x86
				SUSE LINUX Enterprise Server 11 for AMD64/EM64T
				SUSE LINUX Enterprise Server 11 for x86
				SUSE LINUX Enterprise Server 10 for AMD64/EM64T
				SUSE LINUX Enterprise Server 10 for x86

PREREQUISITES:
				ProLiant server supporting above operating systems
				2GB RAM minimum
				Latest HP System ROM
				Build Environment Setup

				NOTE: Visit the following URL and download latest System ROM
				http://welcome.hp.com/country/us/en/support.html
				Select "Download drivers and software" 

EFFECTIVE DATE:		02/08/2011

SUPERSEDES:			6.0.53

DESCRIPTION:
				This RPM contains HP tested and approved Linux bnx2, bnx2x 
				bnx2i and cnic drivers for use with the Server Adapters 
				mentioned in the PRODUCTS AFFECTED section of this document.

				This package also contains the bnx2id daemon for Broadcom's 
				bnx2i iSCSI driver for HP ProLiant systems.

ENHANCEMENTS/FIXES:
				1) KMP build support added for RHEL 5 update 6 
				2) Jumbo MTU support added for iscsi offload connections
				3) KMP build no longer fails on RHEL 5 update 5
				4) KMP build no longer fails on RHEL 6
				5) KMP is now built for each SLES kernel flavor

Table of Contents
=================
Introduction
Packaging
Build Environment Setup
Installing the RPM Package
Uninstalling the RPM
Caveats


Introduction
============
This file describes the Linux drivers for HP Gigabit Server Adapters mentioned in 
the PRODUCTS AFFECTED section. After installation, additional information can be 
found in the files RELEASE.bnx2.TXT and RELEASE.bnx2x.TXT. These files located 
under the following directories. 

RHEL: /usr/share/doc/netxtreme2-<version>
SLES: /usr/share/doc/packages/netxtreme

After installation, additional information for bnx2i can be found in the 
RELEASE.bnx2i.TXT and README.bnx2i.TXT files located under the following 
directories:

RHEL: /usr/share/doc/bnx2i-<version>
SLES: /usr/share/doc/packages/bnx2i

Man pages for bnx2 and bnx2x are delivered to /usr/share/man/man4

User guides and additional HP Network Adapter information can be found at: 
http://h18004.www1.hp.com/products/servers/networking/index-nic.html


Packaging
=========
The driver is released in Kernel Module Package (KMP) source RPM format. KMP 
packages use macros that determine kernel flavors for which binary packages need
to be built based on spec file rules.

It is important to have the right build environment set up in order to compile a 
binary RPM from the source package.  See "Build Environment Setup" section below.


Build Environment Setup
========================
The netxtreme2 package requires the presence of some packages that provide the 
right build environment. These packages provide kernel headers, makefiles and 
symbol files, though the last one is suggested only on SLES distributions.

RHEL installation:
	1. redhat-rpm-config package
	2. kernel-devel-<kernel_version> package
	3. kernel-<flavor>-devel-<kernel_version> package
	Eg: kernel-2.6.18.92.el5 requires kernel-devel-2.6.18-92.el5
	    kernel-PAE-2.6.18.92.el5 requires kernel-PAE-devel-2.6.18-92.el5

	See the "Caveats" section below for more details.

SLES Installation:
	1. kernel-source-<kernel_version> package
	2. kernel-syms-<kernel_version> package
	3. SLES11 requires kernel-<flavor>-devel-<kernel_version> package as well


Installing the RPM Package
=============================
1. This package requires a build environment.  Please refer to the 
"Build Environment Setup" Section before proceeding to the next step.

2. Install the source RPM package.

	# rpm -ivh hp-netxtreme2-<version>.src.rpm

3. Build the binary RPM for hp-netxtreme2 package. 

	RHEL 5:
	# rpmbuild -bb /usr/src/redhat/SPECS/hp-netxtreme2.spec

	RHEL 6:
	# rpmbuild -bb ~/rpmbuild/SPECS/hp-netxtreme2.spec

	SLES:
	# rpmbuild -bb /usr/src/packages/SPECS/hp-netxtreme2.spec

	If you get an error during the build process, refer to the 
	"Build Environment Setup" section.

	NOTE: One can build binary RPM for a specfic kernel flavor as follows:

	# rpmbuild -bb SPECS/hp-netxtreme2.spec --define "KVER <kver>"

	NOTE:  RHEL 5 x86 installations require the "--target" switch when
	building on Intel compatible machines. Please see the "Caveats" 
	section below for more details. 

	# rpmbuild --target=i686 -bb /usr/src/redhat/SPECS/hp-netxtreme2.spec

4. Check for the existence of a current version of the hp-netxtreme2 package as
   follows:

	RHEL
	# rpm -q kmod-hp-netxtreme2-<flavor> 

	SLES
	# rpm -q hp-netxtreme2-kmp-<flavor>

	If an old version of the package exists, the RPM package should be
	removed. Remove the corresponding tools package before removing 
	driver package.

	RHEL
	# rpm -e kmod-hp-netxtreme2-<flavor>

	SLES
	# rpm -e hp-netxtreme2-kmp-<flavor>

	Verify if the old hp-netxtreme2 package has been removed as follows:

	RHEL
	# rpm -q kmod-hp-netxtreme2-<kernel flavor>

	SLES
	# rpm -q hp-netxtreme2-kmp-<kernel flavor>  

5. Verify if an old version of bnx2, bnx2x, bnx2i and cnic are loaded into the 
kernel then remove it as follows. However if you are installing the package 
over network you may want to be careful. It is not absolutely necessary to 
remove the modules. This step is necessary if you are doing the upgrade on the 
physical console and you intend to see the new drivers taking over immediately

	#lsmod | grep bnx2x
	#lsmod | grep bnx2i
	#lsmod | grep bnx2
	#lsmod | grep cnic

	Before removing the drivers you will have to stop the bnx2id/iscsid 
	running and bring down the interfaces controlled by bnx2x and bnx2 

	#ifconfig eth<n> down

	Finally remove the driver 

	#rmmod bnx2x
	#rmmod bnx2i
	#rmmod bnx2
	#rmmod cnic

6. Install the new binary RPM package. This installs bnx2/bnx2x/bnx2i and 
cnic drivers. 

	RHEL 5
	# rpm -ivh \
	/usr/src/redhat/RPMS/<arch>/kmod-hp-netxtreme2-<flavor>-<version>.<arch>.rpm 

	RHEL 6
	# rpm -ivh \
	~/rpmbuild/RPMS/<arch>/kmod-hp-netxtreme2-<flavor>-<version>.<arch>.rpm 

	The modules are installed in the following directory:
	/lib/modules/<kernel_version>/extra/hp-netxtreme2

	Note:  The "--nodeps" switch is required when installing to RHEL 5.4 and 
	RHEL 5.5. See the "Caveats" section below for more details.

	# rpm -ivh \
	/usr/src/redhat/RPMS/<arch>/kmod-hp-netxtreme2-<flavor>-<version>.<arch>.rpm --nodeps 

	SLES
	# rpm -ivh RPMS/<arch>/hp-netxtreme2-kmp-<version>-<flavor>.<arch>.rpm 

	The modules are installed in the following directory:
	/lib/modules/<kernel_version>/updates/hp-netxtreme2

7. If one intends to use offload install the hp-netxtreme2-bnx2id binary rpm

	# rpm -ivh hp-netxtreme2-bnx2id-<version>-<arch>.rpm

	Note:  The rpm contents will be installed to the following locations.

	/etc/rc.d/init.d/bnx2id
	/sbin/bnx2id

8. Configure your network setting and address. You may need to refer to your 
Linux vendor documentation. Helpful network configuration tools such as 
"yast2" in SLES or linuxconf/redhat-config-network/netconfig in Red Hat 
exist for easy configuration.

9. Ensure that the /etc/modules.conf file is configured similar to the example 
listed below. The example below is presented as if more than one adapter is 
present. If so, one eth# instance should exist for each ethernet port. Refer to
the modules.conf man page for more information.

If you have a 1Gb Network card use bnx2 below otherwise use bnx2x for
10Gb

	alias eth0 bnx2
	alias eth1 bnx2

For SLES, the configuration file is /etc/modprobe.conf or 
/etc/modprobe.conf.local

10. Reboot the server or restart the network services. Upon reboot 
the network should start with either bnx2 or bnx2x driver loaded  

To verify that the driver is loaded use the following command.

	# lsmod

You should find bnx2, bnx2i or bnx2x listed. You can also verify that the 
correct bnx2, bnx2i or bnx2x driver is loaded through any of the following 
methods. 

A. Look for driver load messages in the system log.

	#dmesg | grep Broadcom

You should see messages of the following type,

Broadcom NetXtreme II Gigabit Ethernet Dirver bnx2 v1.8.2c(Dec 30, 2008)

B. Check the /var/log/messages file for a similar message
as indicated in method A.

Note: To load the driver from command line use 'modprobe' instead of 
'insmod'. This is because 'insmod' will not install dependencies
while �modprobe� will install the dependencies required for the module to install.

Please carry out the following steps to install the driver modules.

	#modprobe bnx2  //Broadcom driver for 1G cards.

	#modprobe bnx2i //Broadcom iSCSI driver module for multifunction cards.

	#modprobe bnx2x //Broadcom driver for 10G cards.

Refer to the man pages for lsmod, ifconfig, rmmod, insmod, 
modprobe, modules.conf and modprobe.conf for more detailed information.


Uninstalling the RPM Package
=============================
The following command will uninstall the netxtreme2 RPM. Uninstall the bnx2id package before 
executing the below step

	RHEL
	# rpm -e kmod-hp-netxtreme2-<kernel flavor>

	SLES
	# rpm -e hp-netxtreme2-kmp-<kernel flavor>

The following command uninstall the hp-netxtreme2-bnx2id package. 

	#rpm -e hp-netxtreme2-bnx2id


Caveats
=======
1. When installing SLES 10 SP2 select to enable IPv6 so that autoload is 
enabled for the ipv6 kernel module.  The cnic driver which is delivered in 
this rpm is required for iSCSI offload. It will fail to resolve symbols if 
IPv6 is disabled because it has a dependency on the ipv6 module.

2. The complete set of Module Parameters supported by the bnx2 and bnx2x and 
bnx2i drivers are described in the README.bnx2.TXT, README.bnx2i.TXT and 
README.bnx2x.TXT.  Please refer to README.bnx2i.TXT to see how to use bnx2i 
to support iSCSI initiator.

3. The rpmbuild will fail the dependency check when building the non-base
(xen,pae,etc) kernel when the kernel-devel package is not installed. 

Example:  If the OS only included the PAE kernel then the user would need to
install the kernel-pae-devel and kernel-devel packages. 

4. The use of a "--target" switch is required so that rpmbuild does not try
to find an i386 kernel on the system.  If the "--target" switch is not used
then the build will fail with bizarre messages stating that specific kernel
packages are not installed on the machine yet those packages do not exist.

5. The rpmbuild will fail if the redhat-rpm-config package is not installed 
because it cannot resolve the %kernel_module_package_buildreqs macro.  The 
error will be similar to the following: 

error: line xx: Dependency tokens must begin with alpha-numeric,'_'or'/': 
BuildRequires: %kernel_module_package_buildreqs

6. RPM uses KMP packaging dependency data to ensure the dependencies are met
before installing the binary RPM.  Red Hat maintains a whitelist of kernel
symbols which RPM uses to validate against the KMP binaries.  Some symbols may
be in the kernel but not on the whitelist which results in a failed binary RPM 
install. The user will need to use the "--nodeps" switch when installing the
binary. 

The netxtreme2 packaged drivers uses the following symbols on 
RedHat EL5 Update 4 that are not on the whitelist:

ksym(vlan_gro_receive) 
ksym(napi_gro_receive) 
ksym(napi_gro_flush)
ksym(iscsi2_recv_pdu) 
ksym(iscsi2_conn_start) 
ksym(iscsi2_host_alloc) 
ksym(iscsi2_destroy_endpoint) 
ksym(iscsi2_lookup_endpoint) 
ksym(iscsi2_session_teardown) 
ksym(iscsi2_unblock_session) 
ksym(iscsi2_conn_setup) 
ksym(iscsi2_conn_error_event) 
ksym(iscsi2_destroy_conn) 
ksym(iscsi2_register_transport) 
ksym(iscsi2_session_setup) 
ksym(iscsi2_block_session) 
ksym(iscsi2_unregister_transport) 
ksym(iscsi2_create_endpoint) 
ksym(pci_enable_msi) 
ksym(pci_enable_msix)
ksym(pci_disable_msi) 
ksym(pci_disable_msix) 

(C) Copyright 2002, 2003 - 2011 Hewlett-Packard Development Company, L.P.
Product names mentioned herein may be trademarks and/or registered trademarks
of their respective companies.