May 21, 1996
On Thursday, May 30, the Distributed Network Manager, will be demoed on the Snake Cluster of the CSL as a proof of what we learned and accomplished in CSC405 for Spring Quarter, 1996. The demo will consist of logging into our program as a priviledged user, performing a node discovery, and finding the link utilization of Cobra.
In order to assure that the Distributed Network Manager (DNM) meets some of the principal requirements outlined at the beginning of the quarter, we have designed a simple distributed application architecture that will combine efforts from each of the six groups, based on the class discussion that took place on Tuesday, May 14 in Rm 303. Each group and a simple overview of their contribution is listed below:
The Distributed Network Manager (DNM), as the name implies, is meant to run on multiple machines as individual Process Components that work together to provide the full functionality of a single network manager. Although our version of the DNM cannot manage a production network, we believe its modularity will provide much flexibility as features are added in future versions.
To demonstrate our architecture design, we will run a simple node discovery to report the names of the nodes on the local network followed by a statistical query from a database updated at regular intervals by SNMP queries.All of this will be done using DCE between each Process Component (PC) and the Priviledged User Interface (PUI) to emphasize the distributed nature of our network manager.
Conceptually, our architecture design consists of several Process Components working under one priviledged user interface:
Each Process Component (PC) runs as a separate process on its host and commmunicates to the others via DCE Remote Procedure Calls. The exception to this is the Protocol Process Component (PPC) which does not communicate with any other PC's. Instead, at startup, the PPC reads a configuration file to find what statistics to gather then it goes off and simply writes those statistics into the database.
A better, fully distributed implementation would be for the PPC to call a db_write() function via DCE that is running on the Statistics Process Component (SPC). It would then be the SPC's job to accept, reject, or log the data to the database. In addition, the PPC should be able to either accept a ppc_config_write() or call a ppc_config_read() from some other process component. To maintain the fully distributed approach, the configuration should be stored in local memory.
To aid in the design and development of the Distributed Network Manager (DNM), a step-by-step guide is given below that explains what happens in each process component of the DNM for the demonstration to work properly. Adhering to this design and coding to its specifications will enable all teams of the DNM project to understand what is required of them and how they must communicate with the others for a successful integration of the entire system.
Note: all of the function call names used below are prefaced with an abbreviation of the process component name or group name responsible for the function:
pui
- User Interface
spc
- Statistics
ndpc
- Node Discovery
ppc
- Protocol module (SNMP)
dce
- OSF/DCE
sec
- Security
> pui
> ndpc
> ppc
> spc
Note: the PPC and the SPC must reside on the same machine because the SNMP group doesn't want to make DCE calls, requiring the two process components to access the same file locally. This could be overcome with the proper DCE interface.
The Priviledged User Interface may only be accessed after a proper user authentication to ensure security at the user level.
username and password,
they will be verified using the function
int sec_authenticate_user( username, password );which will return either a 0 for a successful login or a 1 for an invalid login.
Invalid Login error which
the user must acknowledge by pressing Return.
Discover Nodes
Node Link Utilization
Lock the DNM
Exit
Discover Nodes from the PUI's Main Menu
will encrypt the necessary parameters of the OSF/DCE call using
sendpkt = sec_encrypt( sendpkt );
void dce_send( send_buf* sendpkt );to remotely activate node discovery on the NDPC, wherever it may reside
recv_buf* recvpkt dce_receive( ndpc );
recvpkt = sec_decrypt( recvpkt );
nodes = ndpc_nodelist( );to go out and find all of the active nodes on the local network and return a list of their node names to the PUI.
sendpkt = sec_encrypt( sendpkt );to ensure a secure transmission back to the PUI.
void dce_send( send_buf* sendpkt );
MsgBuf* dce_receive( int my_component_no );
recvpkt = sec_decrypt( recvpkt )
pui_display_nodes( nodes );
Return to
exit back to the DNM Main Menu.
All data collection will be handled by the Protocol Process Component (PPC) which communicates with nodes on the network using SNMP.
ppc_read_config( filename );
ppc_write_stat( timestamp, hostname, statistic, value );
Node Link Utilization from the PUI's
Main Menu will encrypt the sendpktparameters
string node_name, string trend_utilization, long begin_time, int interval
using
sendpkt = sec_encrypt( sendpkt );
void dce_send( send_buf* sendpkt );to query the SPC for a the link utilization of Cobra.
MsgBuf* dce_receive( int my_component_no );
recvpkt = sec_decrypt( recvpkt )
char* spc_read( filename );to gather the necessary statistics from the databases history for making an accurate calculation.
float spc_calc_link_util( hostname, interval, data );
sendpkt = sec_encrypt( sendpkt );to ensure a secure transmission back to the PUI.
void dce_send( send_buf* sendpkt );
recv_buf* mesg dce_receive( int my_component_no );
recvpkt = sec_decrypt( recvpkt )
pui_display_stat( hostname, statistic, value );
Return to
exit back to the DNM Main Menu.
The functions used to make the DNM work are broken up by group. Each function is to be specified with
Each group should review the functions below and send any additions, suggestions and comments to me for updating.
pui_display_nodes( nodes );
pui_display_stat( hostname, statistic, value );
char* data dce_send_and_recv_mesg( send_buf* sendpkt );
void dce_send( send_buf* sendpkt );
recv_buf* recvpkt dce_receive( int my_component_no );
ppc_read_config( filename );
spc_write_stat( timestamp, hostname, statistic, value );
ppc_get_???();
int InitSec ( char * server );
This procedure accepts the name of the managing host as an argument and returns zero on success and -1 upon receiving an error. If "server" is NULL, then we are running as the server and configuration proceeds in the appropriate manner. InitSec() be called when the client or server software begins operation.
int sec_authenticate_user( username, password );
struct Edata* sec_encrypt ( struct Edata* mesg )
The sec_encrypt() operation be called before transmitting data via DCE RPC to another host on the network. It takes an Edata structure as an argument and returns the same structure. The argument it takes contains a pointer to the block of data to be encrypted, the length of that data, and the name of the host to whom the data is to be sent. It uses the host name to look it up the host's key in the DCE database service. It then encrypts the data with an algorithm appropriate for the host's security level (also found in the database) and returns a pointer to an Edata structure which contains the encrypted data, the length, and a NULL for "host". If "host" is not NULL, then there was an error and "host" contains the error message.
struct Edata* sec_decrypt ( struct Edata* mesg )
The procedure to call upon receipt of data. It chooses the appropriate algorithm due to its security level and then decrypts the message. If no encryption was used, then it just strips the message out of the packet.
nodes = ndpc_nodelist( );
char* spc_read( filename );
float spc_calc_link_util( hostname, interval, data );
Each group should review the data types below and send any additions, suggestions and comments to me for updating.
hostname
- string that specifies which host to contact
pc
- process component number, specified as an enumeration in the dnmconst.h file. Used to identify a Process
Component with DCE calls.
function
- the number of the function being called via DCE as specified in the
enumeration in the dnmconst.h file.
statistic
value
data
mesg
interval
- the time, in seconds, between querying an agent.
struct Edata {
char* data;
unsigned long length;
char *host;
};
struct send_buf {
long from_component_no;
char to_hostname[30];
int to_component_no;
int function_no;
char arg[512];
};
struct recv_buf {
char to_hostname[30];
long to_component_no;
char result[512];
};
{
hostname
ipaddress
period (sec)
statistics
}
{
timestamp
hostname
statistic
value
}