NDT is installed on nettest5 at SLAC. This node is subject to change due to security policies etc.

Files

The installation files are in

/afs/slac.stanford.edu/u/sf/ytl/Work/TCP/Web100/slac-ndt-server/2006-08

Linux kernel linux-2.6.17.10 was downloaded and installed with this config file: nettest5.config. It was patched against web100 2.5.11 and web100 userland 1.6.

The machine booted fine after the necessary modifications to grub and shows up as

Linux nettest5 2.6.17.10-web100 #2 SMP Thu Aug 24 10:55:58 PDT 2006 i686 i686 i386 GNU/Linux

AFS

However, as this is a Taylored machine, AFS needs to be installed.

Downloading the openafs-kernel-1.4.1 and configure'ing and compiling resulted in:

CC [M]  /usr/src/kernels/openafs-kernel-1.4.1/src/src/libafs/MODLOAD-2.6.17.10-web100-MP/rx_kmutex.o \
  /usr/src/kernels/openafs-kernel-1.4.1/src/src/libafs/MODLOAD-2.6.17.10-web100-MP/rx_kmutex.c: \
  In function `afs_cv_wait':
  /usr/src/kernels/openafs-kernel-1.4.1/src/src/libafs/MODLOAD-2.6.17.10-web100-MP/rx_kmutex.c:126: \
  error: too many arguments to function `refrigerator'
make[3]: *** \
  [/usr/src/kernels/openafs-kernel-1.4.1/src/src/libafs/MODLOAD-2.6.17.10-web100-MP/rx_kmutex.o] \
  Error 1
make[2]: *** \
  [_module_/usr/src/kernels/openafs-kernel-1.4.1/src/src/libafs/MODLOAD-2.6.17.10-web100-MP] \
  Error 2
make[2]: Leaving directory `/usr/src/kernels/linux-2.6.17.10'
make[1]: *** [openafs.ko] Error 2
make[1]: Leaving directory \
  `/usr/src/kernels/openafs-kernel-1.4.1/src/src/libafs/MODLOAD-2.6.17.10-web100-MP'
make: *** [linux_compdirs] Error 2

So downloaded full source of openafs openafs-1.4.1; and compiled. Seems okay.

However, AFS init.d scripts aren't there! Poked around and found /usr/vice/etc/modload which contains loads of .ko afs modules. copied over the compiled kernel module and rebooted;

sudo cp /usr/src/kernels/openafs-1.4.1/src/libafs/MODLOAD-2.6.17.10-web100-MP/libafs-2.6.17.10-web100.mp.ko /usr/vice/etc/modload/

and it worked! yippee!

NDT Install

Downloaded ndt-3.3.12 configured, and wham!

gcc  -pedantic -Wall -O2 -DNDEBUG \
  -L/usr/local/lib -Wl,-rpath,/usr/local/lib \
  -o analyze  analyze-analyze.o analyze-usage.o analyze-logging.o \
  -lweb100 -lpcap -lm ../I2util/I2util/libI2util.a 
/usr/bin/ld: cannot find -lweb100
collect2: ld returned 1 exit status
make[2]: *** [analyze] Error 1
make[2]: Leaving directory \
  `/afs/slac.stanford.edu/g/scs/net/netmon/TCP/Web100/slac-ndt-server/2006-08/ndt-3.3.12/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory \
  `/afs/slac.stanford.edu/g/scs/net/netmon/TCP/Web100/slac-ndt-server/2006-08/ndt-3.3.12'
make: *** [all] Error 2

I haven't installed teh web100 libraries.

Downloaded web100_userland-1.6, configure'd, and make'd. however, the default installation path is /usr/local - which of course is a read-only AFS mount.

therefore, ran with ./configure --prefix=/opt/web100/current/ (symlinked to /opt/web100/web100_userland-1.6, and installed there.

Added /opt/web100/current/lib/ to /etc/ld.so.conf and ran ldconfig to add to standard library path.

Ran ./configure --prefix=/opt/ndt/current/ on NDT;

make[2]: Entering directory \
  `/afs/slac.stanford.edu/g/scs/net/netmon/TCP/Web100/slac-ndt-server/2006-08/ndt-3.3.12/src'
gcc  -pedantic -Wall -O2 \
  -DNDEBUG -L/usr/local/lib -Wl,-rpath,/usr/local/lib \
  -o analyze  analyze-analyze.o analyze-usage.o analyze-logging.o \
  -lweb100 -lpcap -lm ../I2util/I2util/libI2util.a 
/usr/bin/ld: cannot find -lweb100
collect2: ld returned 1 exit status
make[2]: *** [analyze] Error 1
make[2]: Leaving directory \
  `/afs/slac.stanford.edu/g/scs/net/netmon/TCP/Web100/slac-ndt-server/2006-08/ndt-3.3.12/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory \
  `/afs/slac.stanford.edu/g/scs/net/netmon/TCP/Web100/slac-ndt-server/2006-08/ndt-3.3.12'
make: *** [all] Error 2

It's not picking up the libs and includes.

Spent a bit of time editing the wrong makefile, finally changed the flags in ndt-3.3.12/src/Makefile to:

CFLAGS = -pedantic -Wall -O2 -DNDEBUG -I/opt/web100/current/include/web100 -L/opt/web100/current/lib

make install seems to work fine. tree structure is:

[ytl@nettest5:/opt/ndt/current]$ tree
.
|-- bin
|   |-- aespasswd
|   |-- analyze
|   |-- tr-mkmap
|   |-- viewtrace
|   `-- web100clt
|-- lib
|   `-- libI2util.a
|-- man
|   |-- man1
|   |   |-- aespasswd.1
|   |   |-- analyze.1
|   |   |-- tr-mkmap.1
|   |   |-- viewtrace.1
|   |   `-- web100clt.1
|   |-- man5
|   |   `-- ndt.conf.5
|   `-- man8
|       |-- fakewww.8
|       `-- web100srv.8
|-- ndt
|   |-- Admin.class
|   |-- Tcpbw100$1.class
|   |-- Tcpbw100$2.class
|   |-- Tcpbw100$3.class
|   |-- Tcpbw100$4.class
|   |-- Tcpbw100$5.class
|   |-- Tcpbw100$6.class
|   |-- Tcpbw100$Message.class
|   |-- Tcpbw100$MyTextPane.class
|   |-- Tcpbw100$OsfwWorker.class
|   |-- Tcpbw100$Protocol.class
|   |-- Tcpbw100$TestWorker.class
|   |-- Tcpbw100$clsFrame.class
|   |-- Tcpbw100.class
|   |-- Tcpbw100.jar
|   |-- admin.html
|   |-- admin_description.html
|   |-- copyright.html
|   |-- web100_variables
|   `-- web100variables.html
`-- sbin
    |-- fakewww
    `-- web100srv

8 directories, 36 files

NDT Testing

Client/Server Applications

You can run a server with:

[ytl@nettest5:/opt/ndt/current/sbin]$ sudo ./web100srv -a

You can run a client with

[ytl@nettest5:/opt/ndt/current/bin]$ ./web100clt -n localhost
Testing network path for configuration and performance problems  --  Using IPv4 address
Checking for Middleboxes . . . . . . . . . . . . . . . . . .  Protocol error!

on the server, we get

!!!!!!!!!!! web100_middlebox() failed to get web100 connection data, rc=4

something's gone wrong! dunno what.

The last dmesg does show that it has initiated:

Web100: initiailizing hash table of size 65536 (order 6)
Web100 2.5.11 200606191556 net100: Initialization successful

And the /proc/web100 does exist:

[ytl@nettest5:/proc/web100]$ ls -lah
total 0
dr-xr-xr-x  11 root root 0 Aug 25 16:55 .
dr-xr-xr-x  97 root root 0 Aug 25 09:04 ..
dr-xr-xr-x   2 root root 0 Aug 30 17:38 15744
-r--r--r--   1 root root 0 Aug 30 17:42 header

And the web100-readall program does work (but need's to be ran with root permissions).

[ytl@nettest5:/proc/web100]$ sudo /opt/web100/current/bin/readall 15744

Forcing debugging from the server application shows:

[ytl@nettest5:/opt/ndt/current/sbin]$ ./fakewww -l /opt/ndt/current/log/fakewww.log &
[1] 9890
[ytl@nettest5:/opt/ndt/current/sbin]$ sudo ./web100srv -ddd
ANL/Internet2 NDT ver 3.3.12
        Variables file = /opt/ndt/current//ndt/web100_variables
        log file = /opt/ndt/current//ndt/web100srv.log
        Debug level set to 3
server ready on port 3001
web100_init() read 69 variables from file
nothing in queue
Timer not running, waiting for new connection
New connection received, waiting for accept() to complete
Telling client 9898 testing will begin now
Queue pointer = 9898, testing = 1, waiting = 1
Waiting for new connection, timer running
Starting test suite:
 > Middlebox test
 > Simple firewall test
 > C2S throughput test
 > S2C throughput test
 <-- Middlebox test -->
  -- port: 3003
Middlebox test, Port 3003 waiting for incoming connection (fd=3)
Set MSS to 536, Receiving Window size set to 262142KB
Sending Window size set to 262142KB
!!!!!!!!!!!  web100_middlebox() failed to get web100 connection data, rc=2
Signal 17 received by process 9895
now = 1156985218 Process started at 1156985218, run time = 0
Queue pointer = 9898, testing = 1, waiting = 1
Received SIGCHLD signal for active web100srv process [9895]
wait3() returned 65280 for PID=9898
wexitstatus = '255'
Waiting for new connection, timer running
now = 1156985221 Process started at 1156985218, run time = 3
Timer expired while waiting for a new connection
Queue pointer = 9898, testing = 1, waiting = 1
Waiting for new connection, timer running
now = 1156985224 Process started at 1156985218, run time = 6
Timer expired while waiting for a new connection
Queue pointer = 9898, testing = 1, waiting = 1
Waiting for new connection, timer running
now = 1156985227 Process started at 1156985218, run time = 9
Timer expired while waiting for a new connection
Queue pointer = 9898, testing = 1, waiting = 1
Waiting for new connection, timer running
...

Doesn't appear to offer any extra details....

An email from Richard suggests that the problem lies in the Web100 v1.6 userland libraries. He also suggests putting in the '-4' option as part of the web100 server argument list:

This is running from my desktop machine on the local LAN (different VLAN).

Web Server

A web server to house to the java applet for ndt testing is supplied. It defaults to run on port 7123/tcp It can be run with

sudo /opt/ndt/sbin/fakewww -l /opt/ndt/current/log/fakewww.log

however, opening a broswer results in a page which says:

"The requested file could not be found"

the log says:

[ytl@nettest5:/opt/ndt/current/log]$ cat fakewww.log 
Aug 25 17:08:38 server started, listening on port 7123
Aug 25 17:08:41 [134.79.25.58] requested file '/' - sent to client
 not found
Aug 25 17:08:42 [134.79.25.58] requested file '/favicon.ico' - access denied

Rich Carlson suggested to run the create-html.sh script - initially it complained that it could not find the tcpbw100.template file. it can be found in the package distro - so copied it to /opt/ndt/current/conf and ran the create-html.sh file again. It creates the file: /opt/ndt/current/conf/tcpbw100.html:

[ytl@nettest5:/opt/ndt/current/conf]$ ./create-html.sh 
Welcome to the NDT server configuration program.  This
program will create a custom tcpbw100.html file for your site.

Enter your site name [Internet2]  : SLAC
Enter your site's location [Ann Arbor - MI]  : Menlo Park - CA
Server connection info, enter 1 for 100 Mbps, 2 for 1 Gbps [2]  : 2

Information for email trouble reporting
Enter email userid [rcarlson]  : ytl
Enter email domain name [internet2.edu]  : slac.stanford.edu
Enter default subject line [Trouble report from nettest5]  : [NDT] Trouble Report
The base web page 'tcpbw100.html' has now been created.  You
must move this file into the ndt_DATA directory [/usr/local/ndt]
created during the 'make' process.
Do you want to install this file now? [yes]  :  
Enter location [/usr/local/ndt]  : /opt/ndt/current/

Now the NDT page is set up and a server and the fakewww server are both running: going to http://nettest5:7123 gives...

This was found to be due to a bug in the web100 v1.6 userland library. Suppplying '-4' as part of the web100srv argument list resolves this issue.

Script Install

System init scripts can be installed automatically. Under the distribution package (ie tar'd file), there are numerous files in the conf directory which are not copied over during the system install.

The system init script was edited a little to incorporate environment variables from the non-default path installation:

/opt/ndt/current/conf/ndt
...
base=/opt/ndt/current/
path=$base/sbin

web100=/opt/web100/current/

[ -f $path/web100srv ] || exit 0
[ -f $path/fakewww ] || exit 0

export PATH=$PATH:$base/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$base/lib:$web100/lib

# Specify some default options.
WEB100SRV_OPTIONS="-a"
FAKEWWW_OPTIONS="-l /opt/ndt/current/log/fakewww.log"
RETVAL=0
...

Also noticed that there is a library in the ndt lib directory; so added to /etc/ld.so.conf:

/opt/web100/current/lib/
/opt/ndt/current/lib/

and ran /sbin/ldconfig to update dynamic library paths.

The init.d services can be installed with the conf/autostart.sh script:

[ytl@nettest5:/opt/ndt/current/conf]$ sudo ./autostart.sh 
This script will configure your system to automatically
start the NDT processes at boot time.

ndt             0:off   1:off   2:on    3:on    4:on    5:on    6:off

Moved the html file to the conf directory and put a symlink to it in the ndt directory:

[ytl@nettest5:/opt/ndt/current/]$ mv tcpbw100.html conf/
[ytl@nettest5:/opt/ndt/current/]$ ln -s conf/tcpbw100.html ndt/tcpbw100.html
  • No labels