These notes describe the installation and configuration of the Linux driver for the Broadcom NetXtreme Gigabit Ethernet Adapter and include the following information:
Installation
Patching PCI Files Network
Installation Module Parameters
Statistics BASP
Configuration
![]() |
NOTE – The current version of the driver has been tested on Redhat 7.1 and 7.2 (beta) Linux distributions for i386 and IA64 (kernel version 2.4.x). |
The driver is released in the following
packaging formats: source RPM, compressed tar, and binary RPM formats. The file
names for the two packages are bcm5700-<version>
![]() |
NOTE – The following procedures require that you be logged on as "root" or equivalent. |
To install the Source RPM Package:
rpm -ivh bcm5700-
<version>.src.rpm
cd /usr/src/{redhat,OpenLinux,turbo,packages,rpm
..}
rpm -bb SPECS/bcm5700.spec
Note that the RPM path is different for different Linux distributions.
rpm -ivh RPMS/i386/bcm5700-<version>
.i386.rpm Note that the --force option is needed if installing on Redhat 7.1, which already contains an older version of the driver.
The driver will be installed in /lib/modules/... and the man page will also be installed.
insmod bcm5700
tar xvzf bcm5700-<version>
make
insmod bcm5700.o
make install
e.g. ifdown eth0
rmmod bcm5700
rpm -e bcm5700-<version>
Redhat 7.1/7.2
rm /lib/modules/<kernel version>/kernel/drivers/net/bcm/bcm5700.o
To use Redhat's kudzu hardware detection utility, a number of files containing PCI vendor and device information need to be patched with information on the BCM5700/01 series network adapaters. Patch files for Redhat 7.1 (pci-rh71.patch) and Redhat 7.2 (pci-rh72.patch) are included. Apply the patch by doing the following:
patch -N -p1 -d /usr < pci-rh70.patch
- or -
patch -N -p1 -d /usr < pci-rh71.patch
Run kudzu:
kudzu
For network installations through NFS, FTP, or HTTP (using a network boot disk or PXE), a driver diskette that contain the bcm5700 driver is needed for Redhat 7.1. The driver diskette's images for Redhat 7.1 are located in network_install/rh71/dd.img respectively. Boot drivers for other Linux versions can be compiled by modifying the Makefile and the make environment. Further information is available from Redhat's website.
To create the driver diskette do the following:
dd if=dd.img of=/dev/fd0H1440.
Optional parameters for the driver can be supplied as command line arguments to the insmod command. These parameters take the form:
<parameter>=value[,value,...]
where the multiple values for the same parameter are for multiple NICs installed in the system.
Note that default values will be used when invalid values are selected. All the parameters are listed below.
Selects the line speed of the link. This parameter is used together with full_duplex and auto_speed to select the speed and duplex operation of the link and the setting of autonegotiation. The valid values are:
If line_speed is set to 10,
100, or 1000, the NIC will autonegotiate for the selected speed (and selected
duplexity) if auto_speed is set to one. If auto_speed is set to 0, the selected
speed and duplexity will be
set without autonegotiation. Note that 1000 Mbps must be negotiated for
copper twisted pair links.
Enables or disables autonegotiation. The valid values are:
Note that this parameter is ignored and assumed 1 if line_speed is set to 0.
full_duplex
Selects the duplexity of the link. This parameter is used together with line_speed to select the speed and duplexity of the link. Note that this parameter is ignored if line_speed is 0.
The valid values are:
Enables or disables receiving flow control (pause) frames. This parameter is used together with auto_flow_control. The valid values are:
Enables or disables transmitting flow control (pause) frames. This parameter is used together with auto_flow_control. The valid values are:
Enables or disables autonegotiation of flow control. This parameter is used together with rx_flow_control and TX_flow_control to determine the advertised flow control capability. The valid values are:
Enables jumbo frames up to the specified MTU size. The valid range is from 1500 to 9000. Default is 1500.
Enables or disables hardware transmit TCP/UDP checksum offloading. The valid values are:
Enables or disables hardware receive TCP/UDP checksum validation offloading. The valid values are:
Enables or disables scatter-gather and 64-bit DMA on x86. This option is only useful when running on TUX-enabled kernels, or 2.4 or newer kernels with zero-copy TCP. The valid values are:
Configures the number of transmit descriptors. Default is 100. The valid range is from 1 to 600. Note that the driver may not be able to allocate the required amount of memory if this parameter is set too high. This is restricted by the amount of memory available.
Configures the number of receive descriptors for standard frames. Default is 200. The valid range is from 1 to 800. Note that the driver may not be able to allocate the required amount of memory if this parameter is set too high. This is restricted by the amount of memory available.
Configures the number of receive descriptors for jumbo frames. Default is 50. The valid range is from 1 to 256.
32-bit parameter that configures the number of 1 usec ticks before the NIC generates receive interrupt after receiving a frame. This parameter works in conjunction with the rx_max_coalesce_frames parameter. Interrupt will be generated when either of these thresholds is exceeded. 0 means this parameter is ignored and interrupt will be generated when the rx_max_coalesce_frames threshold is reached. Default is 400 which is optimized for servers with very heavy traffic.
32-bit parameter that configures the number of received frames before the NIC generates receive interrupt. Default is 40 which is optimized for servers with very heavy traffic.
32-bit parameter that configures the number of 1 usec ticks before the NIC generates transmit interrupt after transmitting a frame. This parameter works in conjunction with the TX_max_coalesce_frames parameter. Interrupt will be generated when either of these thresholds is exceeded. 0 means this parameter is ignored and interrupt will be generated when the TX_max_coalesce_frames threshold is reached. Default is 600.
32-bit parameter that configures the number of transmitted frames before the NIC generates transmit interrupt. Default is 75.
32-bit parameter that configures the number of 1 usec ticks between periodic statistics block DMAs. Default is 1000000 (1 sec.). Set to 0 to disable statistics updates.
Enables or disables magic packet Wake-On-LAN when the system is shutdown. Note that not all systems support Wake-On-LAN. The valid values are:
Detailed statistics and configuration information can be viewed in the file /proc/net/nicinfo/eth#.info. Where # is the number of a physical device.
BASP is a kernel module designed for Linux 2.2.x and 2.4.x kernels that provides load-balancing, fault-tolerance, and VLAN features. These features are provided by creating teams that consist of multiple NIC interfaces. A team can consist of 1 to 8 NIC interfaces and each interface can be designated primary or standby. All primary NIC interfaces in a team will participate in Load-balancing operations by sending and receiving a portion of the total traffic. Standby interfaces will take over in the event that all primary interfaces have lost their links. VLANs can be added to a team to allow multiple VLANs with different VLAN IDs. A virtual device is created for each VLAN added.
BASP supports Smart Load-balance,
SLB
BASP supports Red Hat 6.2, 7.0, 7.1 and 7.2 Beta. The following installation procedures work with these distributions. BASP has also been tested on SuSE 7.1 & 7.2, Caldera 2.4 & 3.1, Turbo Linux 6.5 and Mandrake 8.0. Minor modification to the Makefile may be required if problems are experienced when compiling BASP on other I386 Linux Distributions.
BASP also supports Red Hat Linux 7.1 for IA-64 architecture and has been tested on Redhat Linux 7.2 Beta for IA-64.
VLANs are only supported by Broadcom NetXtreme Gigabit Ethernet. As opposed to VLANs support in other platforms, e.g. Windows and Netware, VLANs are not supported by Alteon Acenic driver (acenic.c).
For users of Redhat 6.2, 7.0, 7.1
and 7.2, please follow instructions in
"Install - RPM package" section.
For users of other Linux I386 distributions,
please follow instructions in
"Install - TAR archive" section.
For users of Redhat 7.1 or 7.2 Beta
for IA-64, please follow instructions in
"Install - RPM package" section.
For users of other Linux IA-64 distributions,
please follow instructions in
"Install - TAR archive" section
BASP for Linux is shipped in mixed forms, where the platform and kernel specific files are in source code, and the core file is in object form. Four packages are shipped in this release; two tar archives and two RPM packages:
"basplnx-{version}.i386.tgz" is the tar archive for i386 platform, and
"basplnx-{version}.ia64.tgz" is the tar archive for IA-64 platform.
To uncompress and expand the tar archive, run
% tar xvfz basplnx-{version}.{arch}.tgz
To Install the TAR archive, perform the following steps:
% make
% make install
![]() |
NOTE – If when building the BASP module, an error message regarding "invalid IO or IRQ parameters" are observed, you will need to configure the major device number for BASP configuration. The default major number is 250 and it can be changed by modifying "Makefile". |
% depmod -a
% insmod basp
To install the Source RPM Package:
% rpm -ivh basplnx-{version}.src.{arch}.rpm
% cd /usr/src/redhat
% rpm -bb SPECS/basplnx.specNote that the RPM path is different for different Linux distributions.
% rpm -ivh RPMS/i386/basplnx-{version}.{arch}.rpm
The driver and other required files will be installed.
% insmod basp
Makefile makefile baspcfg precompiled configuration utility bcmtype.h commonly use type header file blf.c BASP module entry points blf.h ioctl interface blfcore.h core interface blfcore.o precompiled core object blfopt.h automatically generated header file from Make blfver.h version header file nicext.h NICE header file pal.c platform abstraction implementation pal.h header for platform abstraction release.txt this file nice-2.2.16 contains NICE enabled driver sources code scripts contains sample scripts scripts/basp init script, goes to /etc/rc.d/init.d scripts/baspteam start/stop script, goes to /etc/basp scripts/baspif start/stop network, i/f, goes to /etc/basp scripts/team-sample sample script of SLB team with three NICs scripts/team-gec sample script of GEC team with three NICs basp.4
man page baspcfg.8 man page for baspcfg utility
The BASP distribution includes a utility program and several scripts for team configuration. These scripts are customized for Redhat distribtutions and automate the loading of basp and the initialization of the virtual interface at boot time.
For users of other Linux distributions, please follow instructions in the "baspcfg" section.
To configure a team perform the following steps:
a) change the team type
b) add/delete physical network interfaces
c) add/delete virtual network interfaces
The syntax of the configuration script can be found below.
% /etc/rc.d/init.d/basp start
NOTE – The configuration is saved and will automatically start on subsequent reboots.
![]() |
NOTE 1 – For Redhat 7.2, where netcfg is no longer
supported, you will need to manually create the interface configuration
file. The path and name of the file is: /etc/sysconfig/network-scripts/ifcfg-sw0, Where sw0 is your virtual interface name. |
Sample configuration file for virtual interface sw0:
DEVICE=sw0
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes
Please read your distribution specific documentation on configuring your interface.
![]() |
NOTE 2 – Starting the team is only required for the first time, and the teams will be started automatically in subsequent reboots. |
![]() |
NOTE 3 – Forming multiple teams is possible by copying the sample files into /etc/basp/team-<name>" and modifying this file as described in the sample file. |
![]() |
NOTE 4– In order to create more that one virtual interface (VLAN) for each team, refer to the respective description section in the sample files. |
The baspcfg command line tool is used to configure the BASP teams, add and remove NICs, and add and remove a virtual devices. This tool, may be used to configure your own startup script files. Please read your distribution specific documentation for more information on your startup procedure. The following is an example of the usage of this tool.
baspcfg v1.2.0 - Broadcom Advanced Server Program Configuration Utility
Copyright (c) 2000-2001 Broadcom Corporation. All rights reserved.usage: baspcfg <commands>
commands
addteam
<tid> <type> <tname> -- create a team delteam <tid> -- delete a team
addva <tid> <vlan_id> <vname>
[macaddr] -- add a virtual adapter to a team delva <tid> <vlan_id> -- del a virtual adapter from a team bind
bind <tid> <role> <device> -- bind a physical adapter to a team unbind
unbind <tid> <device> -- unbind a physical adapter from a team
show <tid> -- display team configurations
where
tid -- A unique ID for each team, starting from 0
type -- Team type: 0=SLB, 1=FEC/GEC
tname -- ASCII string of the team
vlan_id -- VLAN ID: from 1 to 4094, 0=untagged or no VLAN
vname -- ASCII string of the virtual device
macaddr -- MAC address (optional), e.g. 00:10:18:00:11:44
role -- Role of the physical device: 0=primary, 1=hot-standby
device -- ASCII string of the physical device, e.g. eth0
Sample Startup script for other Linux distributions:
#!/bin/bash
# load basp module
insmod basp# create new team
baspcfg addteam 0 0 team-one# bind physical interfaces / two primary one backup
baspcfg bind 0 0 eth0
baspcfg bind 0 0 eth1
baspcfg bind 0 1 eth2# create the virtual interface
baspcfg addva 0 0 sw0# bind ip address to virtual interface and initialize
ifconfig sw0 192.168.0.1 up
To manually add a team:
baspteam team-sample add
To delete a team:
baspteam team-sample del
Note that "team-sample" is the configuration file.
This script and "team-GEC" are intended to be customized. See the Configuration Scripts section for details. This script should be copied to /etc/basp directory and should retain the "team-" prefix.
This script and the "team-sample" script are intended to be customized. See the Configuration Scripts section for details. This script should be copied to /etc/basp directory and retain the "team-" prefix.
Both "team-sample" and "team-GEC" are configuration scripts that follow the same syntax, as follows:
TEAM_ID: this number uniquely identifies a team TEAM_TYPE: 0 = SLB, 1 = Generic Trunking/GEC/FEC TEAM_NAME: ASCII name of the team TEAM_PAx_NAME: ASCII name of the physical interface x, where x can be 0 to 7 EAM_PAx_ROLE: role of the physical interface x 0 = Primary, 1 = Hot-standby. This field must be 0 for Generic Trunking/GEC/FEC team TEAM_VAx_NAME: ASCII name of the virtual interface x, where x can be 0 to 63 TEAM_VAX_VLAN: 802.1p VLAN ID of the virtual interface x. For untagged virtual interface (i.e., without VLAN enable), set it to 0. The valid VLAN ID can be 0 to 4094
Also included in this release are network device drivers patched with Broadcom NICE support. These drivers are originally taken from the Linux 2.2.16 kernel distribution. To installed patched drivers:
% cp /usr/src/nice-2.2.16/nicext.h /usr/src/linux/include/linux
Rename the original network device driver under the Linux kernel source tree, "/usr/src/linux/drivers/net".
Copy the patched drivers to the Linux kernel network driver source directory, for example:. "/usr/src/linux/drivers/net".
% cd /usr/src/linux
% make config
If the patched drivers are configured
into the kernel, goto step (7).
If the patched drivers are configured as modules, goto step (6).
In the case of supporting only the module version of these drivers, it is possible to simply run the following to compile patched drivers and to install them into the proper module directory:
% make modules
% make modules_install
There is no need to compile the complete kernel. Goto step (8).
% make clean
% make dep
% make
To uninstall the RPM package:
% rpm -e basplnx
and to reboot the system,
% reboot
In Generic Trunking mode, all the physical and virtual interfaces belonging to a team have the same MAC address. This MAC address is the same address as that of the first physical interface bounded to the team. In the case that this first physical interface is removed dynamically from the team using "baspcfg" tool and bounded to the protocol directly, this could lead to a duplicate MAC address problem on the network. Note that if the removed physical interface does not participate in any traffic, there will not be any problem.
To properly remove a physical interface in a Generic Trunking team, follow the steps listed below:
% cp /etc/basp/team-gec /etc/basp/backup-gec
![]() |
NOTE 1 – "team-gec" is the name of the configuration script. |
![]() |
NOTE 2 – "backup-gec" is the name of the backup script. The name of the backup script must NOT be prefixed with "team-". |
Modify the team configuration script to remove the physical interface
% /etc/basp/baspif /etc/basp/backup-gec
stop
% /etc/basp/baspteam /etc/basp/backup-gec del