--------------------------* HNMS MODULE ROLES *------------------------------
				HNMS v2.0

It is assumed that the reader is familiar with the HNMS architecture
as described in "The NAS Hierarchical Network Management System".

Brief recap:

	There are four types of modules in the HNMS architecture:
	Server, UI (User Interface), RBIP (Rules-Based Intelligent
	Processor), and IO (Input/Output).  The IO modules gather
	information about the network.  The UI modules store or display
	information about the network.  The Server is the hub which
	farms out requests from the UI modules to the IO modules,
	and sends back network information gathered by the IO modules.
	The RBIP helps the server with some auxiliary tasks.

	An HNMS community is defined as any collection of HNMS modules
	which exchange information using the HNMP protocol and share the
	same HNMS community name.  The purpose of the HNMS community name
	is to allow a trivial level of authentication among HNMS modules.
	The default HNMS community name is "public".  Only one Server
	and one RBIP can be active within any HNMS community.  There may
	be any number of UI or IO modules.

(The original architecture specified a Database module whose function
was to maintain a copy of the current network state on disk in case the
server were to fail, and to log network performance data.  The former
function is now performed by the server itself, while the latter may be
performed by an SQL front-end to hnmstool, or a separate UI module that
can speak SQL.)

In the HNMS v2.0 software distribution, the following binaries take
the roles of the four types of modules:

hnmsd:		Server, RBIP, IO
hnms:		UI
hnmstool:	UI

The "hnmsd" daemon runs in the background on one or more machines.
If used on more than one machine, one instance will take the roles of
Server and and RBIP, and the others will become IO modules.  "hnms"
is the graphical user interface for displaying network information.
"hnmstool" is a command-line tool for accessing network information
textually. "hnmsadmin" is a graphical user interface for configuring
the HNMS community.

A DEFINITION:
To "frob" an object: to set variables of that object (e.g. status).

IO modules frob status vars on Processor, Interface, and Ipaddr objects,
	and all SNMP-accessible vars on Processor and Interface objects.
	They get new values by actively polling for the information on
	the net.
The RBIP module frobs traffic vars on a number of objects.

-----------------------------------------------------------------------------
UI MODULE (hnms, hnmstool):

The UI module is used by the user to access data about the network that
HNMS has gathered.  The UI module can take the form of a graphical UI,
a command-line tool, a textual log archiver, a front-end to a SQL database,
or anything else that requests information and then displays/stores it.

Can request creation of any object.

Tasks:
	Generate displays as directed by user.
	Subscribe to variables of displayed objects as directed by user.
	Store values of variables as directed by user.

-----------------------------------------------------------------------------
SERVER MODULE (hnmsd):

The server module is the hub of the system.  Its major tasks are to
create new objects, announce those objects to other modules, and to
gather data from IO modules that are requested from UI modules.

Can create any object.

Tasks:
	Create Internet object.
	Announce new objects to UI modules.
	Create new objects that are requested by other modules.
	Keep an updated picture of the network topology.
	Generate subs to IO modules based on subs from UI modules.
	Subscribe to Processor sysLocations.
	Subscribe to Processor sysContacts.
	Regularly create Network objects from Subnet hnmsSubnetIpaddrs.
	Regularly create Subnet objects from Ipaddr IP addresses and masks.
	Regularly create Site objects from Processor sysLocations.
	Regularly create Administrator objects from Processor sysContacts.
	Set hnmsObjOperStatus from ifOperStatus on Interface objects.
	Set hnmsObjAdminStatus from ifAdminStatus on Interface objects.

-----------------------------------------------------------------------------
IO MODULE (hnmsd):

The IO module discovers low-level network objects, and gathers data about
those objects as requested by the server.

Can request creation of Ipaddr, Processor, Interface objects.
Can frob status vars on Ipaddr, Processor, Interface objects,
	and any SNMP vars on Processor and Interface objects.

Tasks:
	Discover IP addresses via MAC-layer.
	Request creation of Ipaddr objects from new IP addresses.
	ICMP-poll Ipaddr objects to determine their hnmsObjReachStatus.
	SNMP-poll Ipaddr objects to get sysNames.
	Request creation Processor objects from new sysNames.
	SNMP-poll Processor objects to get ipAddrTables and ifTables.
	Request creation of Ipaddr objects from ipAddrTables.
	Request creation of Interface objects from ifTables.
	SNMP-poll subscribed objects to fill subscriptions.
	Compute hnmsObjReachStatus of Subnet, Network, Internet objects
	from the hnmsObjReachStatus of Ipaddr objects.
-----------------------------------------------------------------------------

RBIP MODULE (hnmsd):

The RBIP module calculates traffic through Subnets and Processors.
It may be expanded to take appropriate action when it determines that
there is something wrong with the network traffic or topology.

Can frob Ipaddr, Subnet, Network, Internet, and Processor objects.

Tasks:
	Subscribe to ifInOctets, ifOutOctets, ifInUcastPkts, ifOutUcastPkts
		on all Interface objects.
	Set PPS and BPS vars for Ipaddrs based on Interface traffic vars.
	Set PPS and BPS vars for Subnets and Processors based on Ipaddr
		PPS and BPS vars.
-----------------------------------------------------------------------------
