This file contains a list of changes to the ANL Network Configuration test tool. There are 3 programs that are used for this tester. 1) the Tcpbw100.java program, downloads to the users desktop. The web100 variables are shipped to this process for analysis on the desktop. 2) the fakewww.c program. This process runs on the server and listens for new connections from user desktop's. 3) the web100srv.c program. This process communicates with the Java applet, runs the throughput tests, and gathers the web100 data. It also writes some of the data out to a log file on the server for later analysis. Rich Carlson 6/7/02 3/4/04 - web100srv.c v3.0.4 - Tcpbw100.java v5.2.1e bug fix. Changed duplex mismatch test to only report problem if bottleneck link is greater than T1/Cable/DSL link. 3/1/04 - web100srv.c v3.0.3 bug fix. Duplex mismatch test used wrong calculated variable for packet loss rate. This caused the test to never report a duplex mismatch. 1/19/04 - web100srv.c v3.0.2 bug fix. Opened pipe() to pass data beteen child & parent processes and then used /tmp file as describe in 1/5/04 note. Pipe() were never closed, so all file descriptors were used up and select() failed causing packet-pair timing data to be lost. Removed reference to pipe() call. 1/19/04 - Tcpbw100.java v 5.2.1d changed packet loss equation to use CongestionSignals and PktsOut variables. Matches server equation. 1/5/04 - web100srv.c v3.0.1 bug fix. The new (-a) flag failed to continuously update the admin page. Several variables are updated in the child process that communicates with the client. These changes were lost when the child terminated. These vars are now passed between children via the /tmp/view.string file. Used fcntl() to lock/unlock /tmp/view.string file to ensure only 1 child updates it at a time. 11/30/03 - web100srv.c v3.0.0 added new (-a) flag to enable the NDT to generate and display a set of summary tables and usage statistics. This flag causes the NDT server to automatically generate a new HTML file and exports this file to the world via the URL {ndt}/admin.html location. 10/20/03 - web100srv.c v2.9.7 changed (-b) flag to accept user defined buffer value. Option also defaults to (64000 Bytes) if -b is present, but no value is specified. 10/16/03 - web100srv.c v2.9.7 new flag (-b) installed that controls the TCP send and receive buffer size. This changes the default behavior of the server. Old behavior called setsockopt() to lock send/recv buffers to 60 KB. New behavior uses system default settings and option invokes old behavior. 9/25/03 - web100srv.c v2.9.6 new flag (-m) installed that allows operators to select operational procedure. Server can run with fixed ports, meaning only 1 test can be performed at a time. Use -m flag to switch to ephermal ports, meaning multiple tests can be run simultaneously. Note: multiple tests interfer with each other. 9/22/03 - Makefile added support for making Tcpbw100.jar file. The java archive .jar format combines all .class files into a single compressed archive file. This archive file is sent to the browser instead of the individual .class files. 9/22/03 - fakewww.c added Tcpbw100.jar to the list of files the fakewww server can send to the client. This list prevents arbritray files from being returned to a client. 9/16/03 - Tcpbw100.java v5.2.1c started adding in code to perform cut&paste operation. Current code fails to access the system clipboard, SecurityException occurs instead. Button on "Statistics" and "More Details" windows is left unactive due to this exception. 9/16/03 - web100srv.c v2.9.5 changed formula to calculate packet loss rate. (per Matt Mathis) 9/15/03 - Tcpbw100.java v5.2.1c added support to close pop-up "Statistics" and "More Details" windows. They now close when you click the window close button (X in upper left corner of Win-xx screen). 9/15/03 - fakewww.c added 2 new file names to list of downloadable files. The files Tcpbw100$1.class and Tcpbw100$clsFrame.class are sub- classes in the Tcpbw100.java file. They are automactically created by javac and implement the window close function. 9/12/03 - Tcpbw100.java v5.2.1b Added Panel() frame to main window. This groups the 3 buttons "Statistics, More Details, and Report Problems" into a panel. This panel is then placed at the bottom of the frame. The "Start" button now shows up next to the text window. 9/8/03 - Tcpbw100.java v5.2.1a added Panel() frame to "Statistics" and "More Details" pop=up windows. This allow the window to resize properly and keeps the "Close" button at the bottom of the window. 7/28/03 - web100srv.c v2.9.4 fixed web100 variable names to use current names, old names were depricated. 7/28/03 - web100_variables fixed web100 variable names to use current names, old names were depricated. 7/9/03 - web100srv.c v2.9.3 modified exit code value in init_pkttrace() routine. If pcap errors occur, exit(0) will keep program from failing. Original code used negative code values which caused the child to signal the parent making the parent also exit. 6/27/03 modified INSTALL file to include text stating that the web100srv process needs 3 ports to operate (3001-3003). reported by "Irene Barg " 6/16/03 included packet trace and log analysis programs in base package - viewtrace.c (viewtrace -f ndttrace.ip.port). Prints packet pair statistics from captured trace file - analyze.c (analyze -f log.file). Run web100srv.log (default) file through off-line analysis routines. Very verbose right now. Use at your own risk. 6/13/03 - web100srv.c v2.9.2 added -t option to command line, creates packet trace for future analysis. Uses libpcap 'dump' command to write trace file (ndttrace.clientIP.port) 6/12/03 - web100srv.c v2.9.1 added -v option to command line, prints version number modified debug statements, prints messages to stderr with -d option 3/10/03 - web100-spdchk.c v2.9 Added getuid() support to check for root user access Incremented version number Built in support for packet-pair timings (was speed-chk) use pipe() to create communications channel use fork() to create pcap based children pass clients IP address & port number to pcap child use USR1 & USR2 signals to terminate pkt sniffing simplified packet collection routines wrapped debug messages to suspress unwanted logging increased number of link clasification bins pass messages between parent and child to synchronize actions fixed bug when calling calculate_spd() with port 3003 added MaxCwnd to list of retrieved variables removed code for communicating with stand-alone speed-chk routine removed UDP sockets for read/write channels removed select() calls added code to synchronize communications with applet messages sent between tests (middlebox, client throughput, server throughput messages sent during throughput tests, applet opens connection and waits for OK to start data xfer test added code to use pkt-pair timing data for link type detection new code to determine link type new code to send link type to applet 3/10/03 - Tcpbw100.java v5.2.0e new code to synchronize communications with server program messages passed to start each test messages passed to open socket for throughput test applet waits for OK from server program before proceeding bug fix to throughput results, using int instead of long fix supplied by new messages to report OS and Java info new link detection algorithm uses pkt-pair data passed over from server program new messages to report pkt-pair data no-longer assumes 100 Mbps FastEthernet new diagnostic messages, identifies bottleneck link type new congestion experienced algorithm changed Cwnd BW*Delay product to use MaxCwnd instead of CurrentCwnd changed email string to use %0a instead of \n for line break 3/10/03 - tcpbw100.html redid base web page new look with bullet items indicating test being done links to other public NDT servers Jan 2003 to Mar 2003 - experimental work on packet-pair timing Work began on methods to use packet-pair timings to determine bottleneck link speed. Idea based on TCP dynamics whereby back-to-back packets will be injected into the network on numerous occations. These packets will be shaped by intervening queues so that they arrive at the rate supported by the slowest link in the path. If enough of these packets arrive, we should be able to detect this bottleneck link rate. This detection should be independant of the measured throughput for the test. Preliminary data was collected during the SC'02 conference and post processed to validate the approach. The approach taken is to 'quantize' the results by placing individual packet-pair measurements into unique 'speed bins'. The LBL Libpcap utility is used to place the network interface in promiscous mode and capture packets. The throughput achieved between each packet-pair is calculated and stored in the proper bin. Statistical analysis is then used to determine what type of link caused these results. The prototype code was then simplified and rolled into the main web100srv.c program. 10/10/02 - web100srv.c Changes to support new Web100 a1.2 userland library code general code cleanup including: new local_find_connection() routine to retrieve connection data reworked middelware reporting code to user for loop moved web100_agent* code inside main loop instead of in lookup routine report unimplemented KIS variables (uses printf's on stdout) 10/4/02 - Tcpbw100.java v5.1.1 Started adding code for middlebox detection (NAT, Firewalls, etc) currently server set MAX_SEG value to 1456 and send negotiated value back to client. If they aren't the same, then something changed it (Firewalls, or VPN clients are the obvious reasons). NAT detection has server send socket data back to client, code also catches IE's habit of using localhost instead of FQDN/IP data. 9/12/02 - web100srv.c added new command line option to allow the log file name to be specified. Uses -l option. Defaults to ./web100srv.log 9/11/02 - web100srv.c added new command line option to allow web100_variables file to be specified. Uses -f option. Defaults to ./web100_variables 8/1/02 - web100srv.c added setsockopt() function calles to set the SO_REUSEADDR option on the data ports. This allows the data ports to be re-used immediately after they are closed. This avoids the timeout period between tests. 7/15/02 - web100srv.c added command line parameter processing to support logging of receiver side statistics. This eliminates the need for the web100srv-recv.c code. The web100srv program now supports 3 options. 1) -p specify port number (3001 is default). 2) -h prints simple usage text. 3) -r record receiver side stats. 6/28/02 - Tcpbw100.java v5.0.3 Changed tests for 10 Mbps link condition. Test now looks at forward and reverse speeds, packet loss, and out-of-order packet delivery. Also added in new test for unknown link type. If throughput > estimate, then link = unknown. 6/28/02 - web100srv-recv.c Changed tests for 10 Mbps link condition to match those in the Tcpbw100.java file. 6/27/02 - Tcpbw100.java v5.0.2 Changed email diagnostics messages to report conditional test statements (link type, duplex setting, duplex-mismatch, ...) 6/26/02 - Tcpbw100.java v5.0.1 Changed email diagnostic messages to report throughput values. Added "End of Email Message" text to email diagnostic report. 6/24/02 - Tcpbw100.java v5.0.0 Added in new feature and bumped major version number to 5. New feature is email button in Java applet. This button calls the URL mailto: function passing data through the browser to the users email client. The userid, nodename, and optional subject line are stored in the base tcpbw100.html page as applet PARAM NAME/VALUE pairs. This allows the local admin to configure the email without needing to re-compile the applet. If no subject line is found a default message is inserted that included the servers name. Open bug - the clients name needs to be automatically inserted into the email and more details diagnostic pages. Currently I use the getLocalHost() function to obtain this info. This works with Netscape 4.x browsers with the Sun JVM, however the MS JVM used by IE 5.x browsers returns 'localhost/127.0.0.1' instead. 6/17/02 - web100srv-recv.c Modified server process to log web100 values for both throughput tests. When the server is receiving data the values are separated by the ';' character. When the server is transmitting data the values are separated by the ',' character. All variables listed in the 'web100_variables' file are recorded in the receive direction, while only a subset of these are recorded in the xmit direction. 6/7/02 - Tcpbw100.java v4.6.7 Changed tests for duplex-mismatch condition. Replaced test for (packet loss < 1%) with (estimated throughput > 2 Mbps). Remote DSL/Cable modem lines were creating false positives. 6/6/02 - Tcpbw100.java v4.6.6 fixed bug in calculating waitsec. Should be CurrentRTO/1000 6/4/02 - Tcpbw100.java v4.6.6 Changed tests for congestion condition. Added test for (MaxSsthresh > 0) indicating that the slow start algorithm had been invoked. Previous case lead to false positives. Changed "Server busy" messages to tell the user to wait x sec before retrying test. This improves the user interface when someone tries to run back-to-back tests. Added new 'waitsec' variable to report percent of time connection spends waiting after a timeout. waitsec = (CurrentRTO/100) * Timeouts 6/4/02 - Web100srv.c added CurrentRTO variable to list of variables being logged 5/x/02 - Tcpbw100.java v4.6.5 Added tests for Wireless and DSL/Cable modem links changed output messages to report unknown link type fixed bug in duplex-mismatch direction test (variable spd was remaining 0 due to division of integers). fixed bug in window scaling report. Windows 9x boxes set value to -1, which code reports as 4294967295. 4/4/02 - Tcpbw100.java v4.5.5 reworked conditional tests and messages sections to report Link Type, duplex-mismatch, Excessive Errors, Duplex (full/half), and congestion 3/6/02 - Web100srv.c Changed logging routine to report more variables in comma (,) separated line. Data can be imported into external program for analysis 2/21/02 - Tcpbw100.java v4.4.1 Reworked conditional tests and messages to report link type (GigE, FastE, and Enet) 1/10/02 - Tcpbw100.java v4.3.3 Added new Statistics button for drill down view Redid analysis messages to use 'statistics' and 'more details' buttons 12/4/01 - Tcpbw100.java v4.2.10 Changed messages to report speed in Mbps instead of Kbps Added sqrt function into Java script to estimate throughput (Mathis fomula) 12/3/01 - Tcpbw100.java v4.2.9 Initial ANL mods to ORNL applet. New analysis section. Removed most ORNL diagnostic messages.