Reduction modules in the AAFID(tm) system
$Revision: 1.2 $

 ======================================================================
 This file is Copyright 1998,1999 by the Purdue Research Foundation and
 may only be used under license.  For terms of the license, see the
 file named COPYRIGHT included with this software release.
 AAFID is a trademark of the Purdue Research Foundation.
 All rights reserved.
 ======================================================================

Introduction
------------

Reduction Modules (RMods) are a proposed mechanism for performing
system- and network-wide data reduction and detection using
information reported by agents.

A reduction module provides the means to specify ways to process data
coming from agents at both the transceiver and the monitor level.


Structure and instantiation of an RMod
--------------------------------------

An RMod contains the following information:

   - A list of agents with initialization information
   - Code to run on the transceiver
   - Code to run on the monitor

When an RMod is requested by the user, the user has to specify in
which transceivers and monitors the RMod will run. The RMod
specification is sent to all the appropriate transceivers and
monitors. Each transceiver takes care of starting up the appropriate
agents and sending them the appropriate initialization information.

In each transceiver and monitor, the appropriate piece of code is
instantiated as a new type of entity (AAFID::RMod).


How an RMod operates
--------------------

When a STATUS_UPDATE message is produced by one of the agents that are
part of and RMod, the transceiver, instead of sending it up, sends it
to the corresponding RMod entity, where it is processed by the
transceiver code from the RMod specification. 

If the RMod entity in a transceiver wants to produce an output, it
must generate a STATUS_UPDATE message of its own. When this message
gets to the monitor, it notices that it comes from an RMod entity and
instead of sending it up, sends it to the corresponding RMod entity,
where it is processed by the monitor code from the RMod specification.

Only STATUS_UPDATE messages produced by the RMod entity in the monitor
will be sent up and thus possibly seen by the user. Thus, all the
messages produced by all the agents related to the RMod in all the
hosts that are running the RMod may be reduced to a single message
produced by the RMod module in the monitor.


Some comments
-------------

It could be that an RMod has as one of its "agents" another Rmod. This
would cause the output produced by one of the RMod entities (either at
the transceiver or the monitor) to be passed to the other appropriate
RMod entity instead of being sent up.
