Step by Step instructions to install

Web100 and

Internet2 Network Diagnostic Tool (NDT)

on Fedora 9

 

Here is a link to Stephen Kingham's web100 server http://web100.kingtech.com.au:7123/ it is running on a modest CPU in the end of an ADSL link. You will need the following ports open to your PC for it to work:

From web100 server To you PC
TCP port 80 TCP >= 1023
TCP 3001 to 3003 TCP >= 1023
TCP 5001 to 5002 TCP >= 1023
UDP 5001 to 5002 UDP >= 1023
UDP 5007 to 5500 UDP >= 1023
TCP 5501 to 6000 UDP >= 1023
TCP 7123 TCP >= 1023
TCP 8423 TCP >= 1023
TCP 8424 TCP >= 1023
TCP 861 TCP >= 1023

 

Introduction

I wrote this for my own documentation of how to install these tools and compile a kernet to support web100. I am provifding them here to make it easier for others and to provide feedback to the authors of similar documents.

As the new Fedora versions come out there are small variations to the already documented installations. The instructions described here are improvements to procedures developed at the University of Utah at the Center for High Performance Computing. If you have questions contact Tom Ammon at tom.ammon@utah.edu. I will be passing these changes to Tom who might include them in his document.

These instructions provide step by step instructions based on the following versions:

Based on several years experience of installing NDT these instructions will need to be updated as newer versions are published.

Contents

 

Hardware

I used any old workstation. If you want hardware that could generate near 10 Gbps of test traffic then I would like to refer you to a presentation by Tom XXXX of AARNet at the recent QUESTNET 2008 conference.

I have used these instructions to perform an instalation on VMWare Server with only one problem and that was the Web100 compiled kernel could not find the ethernet interface.

Fedora Core 9

Download the software as a full ISO (DVD image) and burn it to a DVD using your favority DVD burner.

Install Fedora Core 9

Put the DVD into a workstation and boot off the DVD.

Follow the normal installation process until you get to these pages.

 

 

At this point I suggest restricting the number of packeges installed to a minimum, for example I do not install X.11:
- select an appropriate root password
- DHCP eth0
- turned off ipv6.
- web100.kingtech.com.au
- Software Development
- Customize now
Everything was unselected except for:
- Editors (vim)
- Development Libraries (libraries needed to compile)
- Development tools (C++)
- Java Development
- Legacy Software Development
- Fedora Packager
- Web server (needed for apache)
- Base
- Hardware Support
- Java
- System Tools

Download all the software to be installed

Some of the software is installed using the automated software installation called yum, but some of it needs to be downloaded and installed. Down load the following software however you like or follow the instructions.

SSH onto the newly installed software using your favourite SSH application and issue the wget commands to get each software package.

> ssh web100.demo.com

XXXX

cd /usr/local/src

wget http://www.web100.org/download/kernel/2.5.20/web100-2.5.20-200805020104.tar.gz
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.tar.gz
wget http://www.web100.org/download/userland/version1.7/web100_userland-1.7.tar.gz
wget http://e2epi.internet2.edu/ndt/download/ndt-3.4.4a.tar.gz
wget http://e2epi.internet2.edu/owamp/download/owamp-3.0c.tar.gz
wget http://e2epi.internet2.edu/bwctl/download/bwctl-1.3rc2.tar.gz

Install the software that can be installed using yum.

Package What it is
kernel-devel Libraries to make the patched kernel compile work
kernel-headers Libraries to make the patched kernel compile work
libpcap-devel Libraries to make NDT work
ncurses-devel Libraries to make make menuconfig work
iperf a popular throughput testing software, also needed by BWCTL

 

yum install kernel-devel kernel-headers

yum groupinstall "Development Tools" "Legacy Software Development"

 

Compile a new kernel using the web100 patch

cd /usr/local/src

tar zxvf linux-2.6.25.10.tar.gz
mv linux-2.6.25.10 /usr/src/linux

ln -s /usr/src/linux /usr/src/linux-2.6.25.10
cp /usr/src/kernels/2.6.25.9-76.fc9.i686/.config /usr/src/linux

tar zxvf web100-2.5.20-200805020104.tar.gz

This is one of the forst places where the instructions may vary because of newer versions of the web100 patch and Fedora.

In the above example linux-2.6.25.10.tar.gz is/was the latest web100 patch. When you are doing it and there is a newer version then change the above intructions to suite the diferent filename.

The ln -s /usr/src/linux /usr/src/linux-2.6.25.10 tells the web100 patch where to find the kernel source.

Depending on the latest kerel used in Fedora the.config may be in a different directory than /usr/src/kernels/2.6.25.9-76.fc9.i686/. Take a look in /usr/src/kernels/ and look in the directory that is there.

The web100 that you use may be a newer version, in which case change the filename in the instructions above.

Before proceeding take a look at what the kernel version is now and modify the Makefile

uname -r returns: uname -r

vim /usr/src/linux/Makefile
# change to the line that looks like
# EXTRAVERSION =
# to look like this
# EXTRAVERSION =

Now patch the kernel source using the web100 patch.

uname -r returns: uname -r

patch -p1 < /root/tools/web100/web100-2.6.25-2.5.20-200805020104.patch

If the patch had an error on the very first line then you probably did not edit the Makefile.

Using the versions available the patch fails in tcp.h. I needed to manualy edit the tcp.h to apply the changes required by the patch.

Around line 784 of tcp.h you should find this text

static __inline__ __u32 tcp_max_burst(const struct tcp_sock *tp)
{
return tp->reordering;
}

Change the above so it looks like

static __inline__ __u32 tcp_max_burst(const struct tcp_sock *tp)
{

#ifdef CONFIG_WEB100_NET100
return (NET100_WAD(tp, WAD_MaxBurst, sysctl_WAD_MaxBurst));
#endif
return tp->reordering;
}

The next few steps set up some of the kernel parameters.

 

make mrproper
# this takes a while

make menuconfig

 

This starts a programme used to tell the compoiler to include the web100 components.

Use the up/down arrows to find "networking" and press enter.

Use the up/down arrows to find "networking options" and press enter.

Use the up/down arrows to find "IP: Web100 networking enhancements" and press enter. You will find this just before the IPV6 stuff.

Networking --->
Networking options --->
[*] IP: Web100 networking enhancements --->
--- IP: Web100 networking enhancements
[*] Web100: Extended TCP statistics
(384) Web100: Default file permissions (NEW)
(0) Web100: Default gid (NEW)
[*] Web100: Net100 extensions
[*] Web100: Netlink event notification service

Now it is time to start the compiler to create a new kernel. At the end we want to edit grub so that the newly created kernel is the defaul.

make

# this takes a long time

make modules

make modules_install

make install

vim /boot/grub/menu.1st

In menu.1st change the line "default=1" to "default=0". 1 is the original kernet, 0 is the web100 kernel. The menu.1st should now look like this:

 

 

reload the workstation

shutdown -r 0

Install Java

Answer yes to the license.

cd /usr/local/src

chmod 777 j2sdk-1_4_2_17-linux-i586.bin
./j2sdk-1_4_2_17-linux-i586.bin
# Answer yes to the license


mv /usr/local/src/j2sdk1.4.2_17/ /usr/local/
export path=$PATH:/usr/local/j2sdk1.4.2_17/bin/

Install the web100 user land

cd /usr/local/src
tar -xvzf web100_userland-1.7.tar.gz
cd /usr/local/src/web100_userland-1.7/
./configure
make
make install

Install the the Internet2 NDT

cd /usr/local/src
tar -xvzf ndt-3.4.4.tar.gz
cd /usr/local/src/ndt-3.4.4/
./configure
make
make install

Change the IP Tables

iptables is the local access control onto the server. The following is from the procedures developed at the University of Utah at the Center for High Performance Computing, the following ports need to be allowed through to allow the various installed performance tools to work.

Port Protocol Purpose
861 TCP One-Way Ping control
3001 TCP NDT data
3002 TCP NDT data
3003 TCP NDT data
7123 TCP NDT web interface
5001-5002 TCP iperf data (for BWCTL)
5001-5002 UDP iperf data (for BWCTL)
5007-5500 UDP One-Way Ping data
5501-6000 TCP BWCTL peer data
8423 TCP BWCTL control
8424 TCP One-Way Ping control

Edit the iptables

vim /etc/sysconfig/iptables

Change iptables to look like this

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3001 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3002 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3003 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5001:5002 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 5001:5002 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 5007:5500 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5501:6000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7123 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8423 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8424 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 861 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Restart the iptables

service iptables restart

 

 

Configure the tools

Configuration of the tools is directly from the procedures developed at the University of Utah at the Center for High Performance Computing, the following ports need to be allowed through to allow the various installed performance tools to work with some minor changes.

We want to keep all of the config files for the tools in the same place, so create a directory in /etc/ for them:

# mkdir /etc/perftools

We'll copy the example config files from each of the tool's source directories into here and then customize them for our environment.

Configure NDT

First, copy the sample config file:

# cp /root/tools/ndt-3.4.4/conf/ndt.conf /etc/perftools/

Take a look for the ethernet interface using the ifconfig command and ddd the following lines at the bottom of /etc/perftools/ndt.conf:,device eth1, and log_file /var/log/ndt.log.

# ifconfig

 

# vim /etc/perftools/ndt.conf

So that the ndt.conf now looks like this

 

 

device eth1

log_file /var/log/ndt.log

This tells NDT to only listen to eth1 and to log output to /var/log/ndt.log. The device entry is required for systems with more than one network interface.

Create a file called ndt in /etc/init.d/ and paste in the contents of the CHPC NDT Init Script. The full programme is copied here:

 

 

Now, run the create-html script to build the web interface for NDT. It will ask some questions about your installation and location:

# sh /root/tools/ndt-3.4.4/conf/create-html.sh

 

 

 

Finally, add the NDT init script to chkconfig and fire up the daemons:

# chmod a+x /etc/init.d/ndt # chkconfig --add ndt # service ndt start

Configure One-way Ping

First, copy the config file:

# cp /root/tools/owamp-3.0c/conf/owampd.conf /etc/perftools/

Create a user for owampd to run as:

# adduser owamp

Create a directory for owampd's temporary files, and modify permissions:

# mkdir -p /data/owampdata/var # chown -R owamp.owamp /data/owampdata/

Locate and change the following lines in owampd.conf:

datadir /data/owampdata/var testports 5004-5500

Create a file called owampd in /etc/init.d/ and paste in the contents of the CHPC OWAMP Init Script.

Create a file called owampd.limits in /etc/perftools and paste in the contents of the [CHPC OWAMP default limits file].

default policy info

This file defines a default policy for owampd to use. It creates two classes of users, "known" and "unknown". The limits for both classes are the same, but you can easily add parameters later to set more stringent limits on either class or to use AES authentication.

Now, add the owampd init script to chkconfig and fire up the daemon:

# chmod a+x /etc/init.d/owampd # chkconfig --add owampd # service owampd start

Configure BWCTL

package dependency

BWCTL uses a tool called nuttcp. To install, do yum install nuttcp.

First, copy the config file:

# cp /root/tools/bwctl-1.3rc2/conf/bwctld.conf /etc/perftools/

Create a user for bwctld to run as:

# adduser bwctld

Locate and change the following lines in bwctld.conf:

iperf_port 5001-5002 peer_ports 5500-6000

Create a file called bwctld in /etc/init.d/ and paste in the contents of the CHPC BWCTL Init Script.

Create a file called bwctld.limits in /etc/perftools and paste in the contents of the [CHPC BWCTL default limits file]

default policy info

This file defines a default policy for bwctld to use. It creates two classes of users, "known" and "unknown". The limits for both classes are the same, but you can easily add parameters later to set more stringent limits on either class or to use AES authentication.

Now, add the bwctld init script and fire up the daemons:

# chmod a+x /etc/init.d/bwctld # chkconfig --add bwctld # service bwctld start

Verify the tools

Verify NDT

To test the NDT installation, connect to the server from a different machine and run a test. Point your browser to http://{your server}:7123 and click the "Start Test" button. If the test comes back with results, everything is good.

If you run into problems, check out the "Verifying the Operation" section of the NDT Cookbook.

Verify One-way Ping

From another machine that has owamp installed, run the following:

# owping

If the test is successful you'll see something similar to this:

output output

If you don't see something similar to these results, see the "Troubleshooting" section of the OWAMP Cookbook.

Verify BWCTL

From another machine that has bwctl installed, run the following:

# bwctl

If the test is successful you'll see something similar to this:

output output

If you don't see something similar to these results, see the "Troubleshooting" section of the BWCTL Cookbook.

Documents and References

Here are all of the links referred to in earlier sections of this guide: