From: utzoo!decvax!duke!ucf-cs!tim
Newsgroups: net.sources
Title: Network Routing in one script
Article-I.D.: ucf-cs.628
Posted: Mon Jun 21 04:42:35 1982
Received: Thu Jun 24 01:56:37 1982


: This shell script will setup nmail a Network Automatic Routing program
echo Creating a directory nmail.srcs
mkdir nmail.srcs
echo Creating Readme file.
cat >nmail.srcs/Readme <From my site typing

nmail cbosgd!mark dave unc.smb@udel-relay

will execute mail with the paths

duke!chico!harpo!cbosg!cbosgd!mark dave duke!decvax!ucbvax!unc.smb@udel-relay

Note: the first was a USENET path, the second  was  a  local
user,  the  third was an ARPANET (CSNET) address.  This pro-
gram is definitely inferior to the routing program just sub-
mitted to the net by unc!smb but the advantages of this pro-
gram are that it should install in under 5 minutes  with  no
changes to existing system software.  Also the total size of
everything is under 500 lines of commented code  verses  the
over  2500  lines  of  smb's.   I would recommend installing
smb's version but this will give you a quick and  easy  sub-
stitute  in the mean time.  The path generated is definitely
shortest but not necessarily the least cost since no  calcu-
lation of baud rates or polling frequencies is made.

                    Tim Curry
                    USENET:  duke!ucf-cs!tim
                    ARPANET: ucf-cs.tim@udel-relay
E*O*F
echo Creating makenet file
cat >nmail.srcs/makenet <\$1
rm -f /tmp/site1 /tmp/site2
echo The network topology file is installed.
E*O*F
echo Creating nmail.c file
cat >nmail.srcs/nmail.c <
#include 

#include "nmail.h"

main(argc,argv)
int   argc;
char *argv[];
{  /*
    * Variable Usage:
    * 	net - the input file descriptor name for the network topology file
    *	site_name - a storage buffer to hold the name of a site
    *	plen,psrc,pdest - pointer variables used to build the list of site
    *		names. plen holds the length of the site name; psrc holds
    *		the current character position in the source buffer; pdest
    *		in the destination buffer
    *	dest - holds the name of the site we are trying to reach
    *	addr - holds both the name of the destination site and name of the
    *		user to receive the message
    *	i,k,j,l,m,n - integer counters
    *	ppos - keeps track of the current character position in paths
    *	ptr - index into the list of site links
    *	used - an array to hold the sites already visited while finding
    *		the shortest path
    *	pstk - the stack onto which the breadth first search places values
    */

   FILE *net,*fopen();
   char site_name[SITENAMELEN];
   char *plen,*psrc,*pdest;
   char paths[256],dest[14],addr[30];
   int  i,j,k,l,m,n,ppos;
   short int *ptr,used[MAXSITES],pstk[MAXSITES][2];

   if (argc == 1)
   {  fprintf(stderr,"nmail: no addresses given.\n");
      nmailusage();
   }

   if ((net = fopen(NETFILE,"r")) == NULL)
   {  fprintf(stderr,"nmail: can't open network configuration file.\n");
      exit(1);
   }

   /* the SITES buffer will consist of a byte with the length of
	the site name in it followed by the site name		*/

   *SITES = '\0';
   pdest = SITES;
   for (NUMSITES=1; ; NUMSITES++)
   {  if ((pdest-SITES+SITENAMELEN) > SITEBUFSZ)
      {  fprintf(stderr,"SITES buffer overflowed\n");
         exit(1);
      }
      fscanf(net,"%s",site_name);
      if (isdigit(*site_name)) break;
      for (plen=pdest,psrc=site_name; *++pdest = *psrc++; (*plen)++);
   }

   /* LINKS will be an array of numbers indicating which sites are connected
	to which.  LINDEX is used to index into the LINKS array.	    */

   LINKS[1] = (short int) atoi(site_name);
   LINDEX[1] = &LINKS[1];
   for (i=2,j=1; i<=NUMSITES+1 ; i++)
   {   while (LINKS[j] != 0)
       {  fscanf(net,"%d",&k);
	  j++;
          LINKS[j] = (short int) k;
       }
       LINDEX[i] = &LINKS[j];
       j--;
   }

   /* the last number was the value for the local site */

   Local = LINKS[j];

   /* initialize the buffer to mail */

   paths[0] = '\0';
   ppos = 0;
   for (i=1; inmail.srcs/nmail.h <20 links.  Most have 1.  Want to
 *		keep the memory size declarations down so this
 *		is an average.
 * SITEBUFSZ - The size of the buffer to hold the site names.
 *
 * NETFILE - Where the topology description is kept.
 *
 * LOCAL - The name of the originating (local) site.
 *
 * ARPA - The name of the site that will gateway mail to the ARPANET
 *
 */

#define SITENAMELEN	15
#define MAXSITES	500
#define AVGLINKS	4
#define SITEBUFSZ	SITENAMELEN*MAXSITES
#define NETFILE		"/usr1/vlsi/tim/net/network"
#define LOCAL		ucf-cs
#define ARPA		"ucbvax!"

short int   NUMSITES,LINKS[MAXSITES*AVGLINKS],*LINDEX[MAXSITES],Local;
char  SITES[SITEBUFSZ];
E*O*F
echo Creating runme file
cat >nmail.srcs/runme </tmp/nmail.h
mv /tmp/nmail.h nmail.h
echo Header file changed reflecting sitename = \$sitename and
echo the topology file = \$filename
echo Creating the topology file.
chmod +x ./makenet
./makenet \$filename
cc -O -o nmail nmail.c
echo The program can be found in the file "nmail".
E*O*F
echo Creating sites file
cat >nmail.srcs/sites <