This file is here for people to list their contributions to the
netperf benchmark. When you enhance or fix something, put your name
and a description of the what/where/whey/why/how here. If you like,
feel free to include an email address. 

I would like to apologize in advance to anyone I've forgotten to
include.

Rick Jones <raj@cup.hp.com>
Responsible for initial packaging and release of netperf and
"editorial" continuity for subsequent releases. 

Karen Choy
Code to allow netserver to run as a standalone daemon. 

Dave Shield <daves@csc.liv.ac.uk>
Wrote the first revision of the netperf and netserver manpages.

Sarr Blumson <sarr@citi.umich.edu>
Fixes for AIX 3.1 and 3.2. Also fixes for Solaris 2.1 without
realizing it ;-) 

Jeff Smits <jgs@usl.com>
Fixes for TCP_RR and UDP_RR on sytems with an htonl that is not a no-op.

Warren Burnett <somewhere in Kansas>
Example code for DLPI tests.

Several Folks
Code to tell SunOS 4 to *not* restart system calls on receipt of a
signal. 

Fore Systems Inc.
Manpages for the FORE API and question answering

David Channin
Access to systems running the Fore ATM API

Jonathan Stone <jonathan@DSG.Stanford.EDU>
Include file fixes for Ultrix

Bruce Barnett <barnett@grymoire.crd.ge.com>
Bunches of warnings fixes and lint picks for Solaris 2.3

Herman Dierks et al <dierks@austin.ibm.com>
Code to calculate confidence intervals for tests

Hal Murray <murray@pa.dec.com>
Helpful suggestions for the scripts to make them more compatible with
the netperf database (http://www.cup.hp.com/netperf/NetperfPage.html).
His prompting finally got me off my whatever to put the confidence
interval stuff from the guys at IBM into netperf

Peter Skopp pds@cs.columbia.edu
Fixes to make netperf more secure.	

Tom Wilson <tcwilson@newbridge.com>
A fix to send_udp_rr to correct bogus throughput values.

Thorsten Lockert <tholo@tetherless.com>
A bunch of clean-up for the *BSD OSes

Serge Pachkovsky <ps@ocisgi7.unizh.ch>
Code for low-priority soaker process for AIX and SGI

The fine folks at Adaptec
The initial port of netperf (1.9PL4) to Windows NT 3.51.

Robin Callender <robin_callender@VNET.IBM.COM>
The PPC binaries for the 1.9PL4 port of netperf to NT and for assorted
code clean-ups and help with CPU utilization measurements.

"Todd J. Derr" <tjd@fore.com>
For offering to take-on support of the Fore ATM API files with 2.1 and
for his help in making the tar files and such more user-friendly

Michael Shuldman <michaels@inet.no>
Improvements to the makefile and additional checks for OpenBSD
Changes to make netperf more profiling friendly

Kris Corwin
discovery of a debug statement outside of if (debug) that may have
been the cause of all the nasty connection refused errors in random
UDP_RR tests... 

Charles Harris
Initial prototype of the TCP_SENDFILE test support

Philip Pishioneri of Cornel
Conversion of the netperf.ps manul to PDF format.

The Hewlett-Packard OpenVMS folks
Assistance with the port to OpenVMS

Munechika SUMIKAWA @ KAME Project / FreeBSD.org
IPv6 fixes

Jan Iven of CERN
initial mods for sendfile() under Linux

Fabrice Bacchella
for pointing-out that Solaris 9 has a copy of Linux sendfile()

Andrew Gallatin 
for assistance with the FreeBSD sysctl() stuff, and later making it
calibration-free
fixes to configure to recognize Solaris 11
fixes to netcpu_procstat.c for later linux kernels
workarounds to get Linux to report ENOBUFS on TX queue overflows

Mark Cooper
pointing-out the need for -lresolv when compiling -DDO_DNS on RedHat
7.1

Carl Mascott 
finding some cut-and-paste erors in create_data_socket error logging

Fabrice Bacchella
Fixes for -DHISTOGRAM and -DUNIX on Mac OS X, updates to usage strings

Spencer Frink
Fixes and Cleanup for WIN32.  Many over many years.

Nicholas Thomas
Fixes for DLPI on SVR4 Streams under Linux

Dave Craig
Fixes for getaddrinfo error returns

David Mosberger of HP
Workaround for the Linux getsockopt() bug that returns more than that
for which one asked.

Stephen Burger of HP
Code to implement the netserver CPU binding.

Vladislav "Vlad" Yasevich of HP
Initial SCTP tests.  Enhancements to the configure.ac sources to show
the way to make many of the LIBS="foo" before ./configure unnecessary.

Padmanabhan "Paddu" S N of HP
Patches for /proc/stat CPU util and recv_tcp_rr.

Cary Coutant and other hp-mac-users of HP
Access to Mac OS X systems for porting netperf 2.4.0

Chris Bertin of HP
Access to AIX for initial porting of netperf 2.4.0

James Carlson
Assistance finding the right magic to compile SCTP on Solaris 10.

Gavin 
Pointers on Solaris 10 Microstate accounting.

Brent Draney
Getting netcpu_perfstat.c in running order on AIX and other misc
fixups in places such as BSD.

Samuel Ying
Change struct sockaddr to struct sockaddr storage in netserver.c

Rodolpho Boer
Fix for default message size in UDP_STREAM when defualt SO_SNDBUF size
is > max UDP datagram size.

Michael Dorff
Getting netperf/netserver to compile under Windows with MS Visual
Studio 2003

George Davis
Changes to deal with different floating-point formats.

Anonymous
Changes to retrieve CPU util on MacOS X.

Dickon Reed
Patches to attend to some windows in TCP_CRR and TCP_CC under Windows

Bret McKee <bret@hp.com>
Fixes to get netcpu_looper compiling and working after the "netcpu"
split

Hans Blom
Improvements to closing/redirecting stdin/stdout/stderr in netserver

Martin Brown
RPM support in the form of netperf.spec.in and related configure.ac
etc changes

Shilpi Agarwal
Changes to allow UDP_STREAM to use connected sockets on both sides.

Steve Reinhardt <stever@eecs.umich.edu>
Fixes for buffer filling.

Gisle Vanem
Fixes for Windows compilation under MingW/gcc.

Scott Weitzenkamp
Patches to enable demo mode in the UDP_STREAM test

Emir Halepovic
Feedback on the manual

Kouhei Sutou
Generate netperf_version.h and netperf.spec via configure rather than
makefile, include limits to get PathMAX on FreeBSD.

Dan Yost
Fix to fflush() each interim result in demo mode to make things
happier for folks redirecting same to a file.

Alexander Duyck
Fixes to replace struct sockaddr_in with struct sockaddr_storage
Fixes to UDP_RR to preclude hangs on Windows
Fizes to UDP_RR to honour -f and -B options

Anonymous
Support for sendfile() on OSX

Matt Waddel
Fix to use vfork() instead of fork() on platforms without fork()

Simon Burge <simonb@NetBSD.org>
Fixes for *BSD CPU util.

Adam Bidema
Fixes for launching netserver children when the path to netserver.exe
is very long. 

Gisle Vanem
MingW cnd MSDOS (djgpp) cleanups.

Bruno Cornec
Fixes to supply some missing fprintf format statements.

Jose Pedro Oliveira
Linux compilation fixes when SCTP and DCCP are enabled. Changes to
configure.ac to allow it to inherit compiler flags from environment
variables.

Pal Baranyai
Typo in nettest_dlpi.c

Brian Haley
Changes to allow something like netperf -H ::1 to work

Frank Schuster
Discovering that FreeBSD 8.X also does not need an SCTP library

Josselin Costanzi
DEBUG_LOG_FILE patch for Android

Dongsheng Song
Assorted Windows fixes

Hushan Jia
Fix to actually run SCTP_RR_MANY when requested

David MacMahon davidm@astro.berkeley.edu
Fix to allow configure in a build directory.
Remove duplicate htonl in recv_udp_stream().

Masanari Iida
Cleanups for the manual.

Amir Vidai
Patch from which changes to set SO_PRIORITY were based.

Alexander Duyck
Uncovering an out of bounds access of the netperf_output_source array.

Bjoern A. Zeeb - a patch to enable netperf to correctly manipulate
IPv6 addresses in the control message.

Shachar Raindel - a patch to bring the "get linux to emit ENOBUFS"
functionality from classic netperf tests to the omni tests.

Chema Gonzalez - fixes for some assorted warnings.

Dave Taht - changes for symbolic handling of TOS values

David Ahern - fix for an incorrect pointer check

Jim Nell - Fix for Solaris 11.1 compilation problem in dscp.c

Steven Noonan - found a variable name bug for the ever unlikely case
of a platform not defining SO_SNDBUF

Amos Kong - a fix to report the correct send size in a migrated
TCP_MAERTS test. Bug reported by Wenli Quan

Eric Dumazet - improve the performance of launching many netperfs at
once by obtaining the 16 bytes of randomness for the UUID via slightly
different means.  Dump TCP_INFO results to stderr when either debug >
1 or DUMP_TCP_INFO envvar is set.  Bump the listen backlog for the
control endpoint to 1024.

David Decotigny - a series of cleanups and enhancements in the area of
CPU utilization reporting and making certain that sanity checks are
made on the size of things being passed in control messages.

Yaogong Wang - enable support for the -N test-specific option to have
the UDP socket connected at the netserver side.

Weijia Song - a fix inspiration for a NULL pointer problem.

Gisle Vanem - some Windows compilation fixes