FUNHOUSE - TCP Traffic Generator
~~~~~~~~

The purpose of FUNHOUSE.NLM is to provide a means to simulate
numerous TCP conversations and to generate high levels of load.
The FUNHOUSE.NLM is loaded on one or more NetWare 4.x - 6.x
servers with command line parameters configuring multiple
TCP servers and clients.

WARNING
~~~~~~~
FUNHOUSE may contain bugs which could abend your server, though
this has not been seen in my use of it, it is considered pre-Alpha
code and so should be used on test systems until your confidence
is built.   Normal operation of FUNHOUSE will cause extreme levels
network traffic and high server utilization, especially when
numerous clients / servers are started.  Even small numbers of
threads can generate high traffic volumes.  If you use in a
production environment, it is advisable to have all the systems
involved in the test ( the Client server, the Server server, and
the TSE server ) connected to a high speed switch to ensure the
traffic is isolated to these segments.  This utility will
completely saturate a 10Mbps LAN, WAN, internet connection, etc.

Its a brutal stress testing tool, so beware. 

Servers Must Be Tuned Priot To Use
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

You MUST have your server configured with MINIMUM PACKET RECEIVE BUFFERS
set to greater than 350 and MAXIMUM PACKET RECEIVE BUFFERS set to
greater than 800 to guarantee that the TCP servers will have
sufficient buffers.  Ideally these values will be more like 1000 and
2000 or higher.  Should the server max out on receive buffers
( which are also used for transmits from BSD Sockets which FUNHOUSE
uses ) the server will discard all inbound traffic.  Only unloading 
the NLM will resolve this problem.  Monitor the server during your
test and if you see a communication issue, unload the NLM.

Status
~~~~~~

FUNHOUSE was created by gutting another project.  Its has all
sorts of extra code compiled in and is, frankly, a quick hack.
However, since it does a good job, I plan on expanding,
cleaning it up.  I hope to add UDP support, discard extraneous
code, and make the TCP servers more robust and allow them to
spray a variety of packet sizes.  

LOAD Command Line Options
~~~~~~~~~~~~~~~~~~~~~~~~~

-SERVERS=StartPort-EndPort

This option starts a number of TCP servers ( e.g. listens )
on the NetWare server.  These will accept a single connection
and start sending data to the connecting client.

-CLIENTS=IPAddress:StartPort-EndPort

This option attempts to connect to the server at the IP
address specified, starting a separate client thread for each
of the ports specified.

Usage
~~~~~

Consider Three servers, S1, S2, and S3

    +---------+             +---------+             +---------+
    |         |             |         |             |         |
    |         |             |         |             |         |
    |         |             |         |             |         |
    | Servers |             |   TSE   |             | Clients |
    |         |     <==     |         |     <==     |         |
    |   S 1   |-------------|   S 2   |-------------|   S 3   |
    |         |  ========>  |         |  ========>  |         |
    +---------+             +---------+             +---------+
    
     10.10.1.1                                       10.20.2.2

Server 1 - Run FUNHOUSE -SERVERS=6100-6149

Server 2 - Run SHAPER   ( with SHAPER.CFG being tested )

Server 3 - Run FUNHOUSE -CLIENTS=10.10.1.1:6100-6149

S1 will be sending large amounts of data through the TSE on S2 to
S3.  The traffic from S3 to S1 will be predominantly ACKs.



    +---------+             +---------+             +---------+
    |         |             |         |             |         |
    |         |             |         |             |         |
    |         |             |         |             |         |
    | Servers |             |   TSE   |             | Clients |
    |         |  <========  |         |  <========  |         |
    |   S 1   |-------------|   S 2   |-------------|   S 3   |
    |         |  ========>  |         |  ========>  |         |
    +---------+             +---------+             +---------+
    
     10.10.1.1                                       10.20.2.2


You can use multiple -CLIENTS and -SERVERS options on the same
command line, and a single server can simultaneously perform
both tasks.   This allows you to set up bidirectional traffic
from clients on one server to servers on the other and in
reverse.  For example

Server 1 - Run FUNHOUSE -SERVERS=6100-6149 -CLIENTS:10.20.2.2:6200-6249

Server 2 - Run SHAPER   ( with SHAPER.CFG being tested )

Server 3 - Run FUNHOUSE -SERVERS=6200-6249 -CLIENTS=10.10.1.1:6100-6149

Multiple SERVERS or CLIENTS options can be specified for deal with
several small ranges or discrete ports.  To specify a single port
use the same starting and ending port number, e.g. 3123-3123.