home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-02-22 | 40.8 KB | 1,384 lines |
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 2 (of 2)."
- # Contents: aarpd.c getaa.c aarpd.8 kboot.8 aarpd.h appletalk.h
- # config.h kbox.h patchlevel.h cmdidx.h kboot.h Makefile README
- # Wrapped by bobs@chumley on Wed Feb 13 22:14:59 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'aarpd.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'aarpd.c'\"
- else
- echo shar: Extracting \"'aarpd.c'\" \(7348 characters\)
- sed "s/^X//" >'aarpd.c' <<'END_OF_FILE'
- X#ifndef lint
- Xstatic char *RCSid="$Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/aarpd.c,v 1.1 91/01/29 17:36:55 root Exp $";
- X#endif lint
- X
- X/*
- X * $Log: aarpd.c,v $
- X * Revision 1.1 91/01/29 17:36:55 root
- X * Initial revision
- X *
- X */
- X
- X/*
- X * aarpd - Appletalk ARP daemon. Obtain an appletalk protocol address,
- X * then listen forever, responding to any appletalk probes and
- X * requests sent to us. Depends on SunOS 4.x NIT interface.
- X *
- X * Author: Bob Schwartzkopf, The RAND Corporation. Based on an earlier
- X * version written by Dan Tappan at BBN that ran under SunOS 3.x.
- X *
- X * Comments, suggestions, patches, bug reports, etc. may be sent to
- X * bobs@rand.org.
- X */
- X
- X#include <stdio.h>
- X#include <syslog.h>
- X#include <sys/types.h>
- X#include <sys/errno.h>
- X#include <sys/socket.h>
- X#include <sys/fcntl.h>
- X#include <sys/termios.h>
- X#include <net/if.h>
- X#include <netinet/in.h>
- X#include <netinet/if_ether.h>
- X#include <rpc/rpc.h>
- X#include <sys/time.h>
- X#include <sys/timeb.h>
- X#include "appletalk.h"
- X#include "aarpd.h"
- X#include "config.h"
- X#include "patchlevel.h"
- X
- Xextern char *rindex ();
- Xint aarp_read ();
- X
- Xextern struct ether_addr myether; /* Setup by nit_init */
- Xextern int errno;
- Xextern char *sys_errlist[];
- X
- X#define VERSION 2
- X
- X/*
- X * Globals.
- X */
- Xchar *progname;
- Xchar *interface = NULL;
- Xstruct ether_addr ebc = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
- Xlong atalkaddr; /* Current appletalk address */
- Xint haveaddr = 0; /* Have appletalk address */
- Xint conflict; /* We're in confict with someone*/
- Xint detached = 0; /* Detached from tty */
- Xint debug = 0; /* Debugging */
- Xstruct ether_header eh; /* Output ethernet header */
- Xstruct ether_aarp ap; /* Output packet */
- X
- Xmain (argc, argv)
- X
- Xint argc;
- Xchar **argv;
- X
- X{
- X char c;
- X int i;
- X
- X if ((progname = rindex (argv[0], '/')) == NULL)
- X progname = *argv;
- X else
- X progname++;
- X while (--argc > 0) {
- X argv++;
- X c = (*argv)[0] == '-' ? (*argv)[1] : (*argv)[0];
- X switch (c) {
- X case 'd' :
- X debug++;
- X break;
- X case 'i' :
- X if (argc <= 1)
- X usage ();
- X argv++;
- X argc--;
- X interface = *argv;
- X break;
- X case 'v' :
- X printf ("%s version number %d.%d\n", progname, VERSION, PATCHLEVEL);
- X exit (0);
- X default :
- X usage ();
- X }
- X }
- X if (!debug) { /* Detach ourselves */
- X detached++;
- X if (fork ())
- X exit (0);
- X if ((i = open ("/dev/tty", O_RDONLY)) >= 0)
- X ioctl (i, TIOCNOTTY, 0);
- X i = getdtablesize ();
- X while (--i >= 0)
- X close (i);
- X open ("/dev/null", 0);
- X dup2 (0, 1);
- X dup2 (0, 2);
- X openlog (progname, 0, LOG_DAEMON);
- X }
- X nit_init (interface);
- X nit_open (sizeof (ap) + sizeof (eh), AARP);
- X aarp_probe (); /* Get appletalk address */
- X initrpc (); /* Prepare for RPC */
- X ap.aarp_op = htons (AARPResp); /* Set up for sending replies */
- X nit_dispatch (aarp_read, 0, &svc_fdset, svc_getreqset, NULL);
- X}
- X
- X/*
- X * usage - Print usage and die.
- X */
- Xusage ()
- X
- X{
- X fprintf (stderr, "Usage: %s [-d] [-i interface]\n", progname);
- X exit (1);
- X}
- X
- X/*
- X * aarp_probe - Get unused appletalk address. Algorithm is to try each
- X * in turn, probing to see if anyone else is using each address. When
- X * no one answers a probe, we use that address. Note this routine
- X * initializes some global data structures (eh, ap), parts of which are
- X * used later by aarp_read ().
- X */
- Xaarp_probe ()
- X
- X{
- X u_long spa;
- X int i;
- X struct timeval timeout;
- X struct timeb tstart;
- X struct timeb tcur;
- X int utotal;
- X int ucur;
- X
- X /* Init ether header */
- X ether_copy (&ebc, &eh.ether_dhost);
- X ether_copy (&myether, &eh.ether_shost);
- X eh.ether_type = htons (AARP);
- X /* Init aarp header */
- X ap.aarp_hrd = htons (H_Ethernet);
- X ap.aarp_pro = htons (P_AppleTalk);
- X ap.aarp_hln = HL_Ethernet;
- X ap.aarp_pln = PL_AppleTalk;
- X ap.aarp_op = htons (AARPProbe);
- X ether_copy (&myether, &ap.aarp_sha);
- X bzero (&ap.aarp_tha, HL_Ethernet);
- X nit_timeout (APrbTicks, &timeout);
- X utotal = timeout.tv_sec * 1000000 + timeout.tv_usec;
- X for (atalkaddr = 1; atalkaddr < 254; atalkaddr++) {
- X spa = htonl (atalkaddr);
- X bcopy (&spa, ap.aarp_spa, PL_AppleTalk);
- X bcopy (&spa, ap.aarp_tpa, PL_AppleTalk);
- X conflict = 0;
- X for (i = 0; !conflict && i < APrbTries; i++) {
- X nit_write ((caddr_t) &eh, (caddr_t) &ap, sizeof ap);
- X ftime (&tstart);
- X do {
- X nit_dispatch (aarp_read, 1, NULL, NULL, &timeout);
- X ftime (&tcur);
- X ucur = (tcur.time - tstart.time) * 1000000 +
- X (tcur.millitm - tstart.millitm) * 1000;
- X } while (!conflict && utotal > ucur);
- X }
- X if (!conflict) {
- X if (debug)
- X fprintf (stderr, "aarp_probe: Using appletalk address %d\n",
- X atalkaddr);
- X break;
- X }
- X }
- X if (conflict) {
- X logerr ("aarp_probe: Couldn't find appletalk address, exiting...\n");
- X exit (1);
- X }
- X haveaddr++;
- X}
- X
- X/*
- X * aarp_read - Handle AARP response packets.
- X */
- Xaarp_read (p, pl)
- X
- Xstruct aarp_packet *p;
- Xint pl;
- X
- X{
- X int op;
- X long spa;
- X long tpa;
- X
- X if (pl != sizeof (*p)) {
- X if (debug)
- X fprintf (stderr, "aarp_read: Truncated packet len %d\n", pl);
- X return;
- X }
- X op = ntohs (p->ap_op);
- X bcopy ((caddr_t) p->ap_spa, &spa, PL_AppleTalk);
- X spa = ntohl (spa);
- X switch (op) {
- X case AARPProbe :
- X case AARPReq :
- X bcopy ((caddr_t) p->ap_tpa, &tpa, PL_AppleTalk);
- X tpa = ntohl (tpa);
- X if (haveaddr && tpa == atalkaddr) {
- X /*
- X * Most of the output header and packet (eh, ap) should already be
- X * set up since it was used for probing initially. Should only need
- X * to fill in destination addresses.
- X */
- X ether_copy (&p->ap_sha, &eh.ether_dhost);
- X ether_copy (&p->ap_sha, &ap.aarp_tha);
- X bcopy (p->ap_spa, ap.aarp_tpa, PL_AppleTalk);
- X if (debug) {
- X fprintf (stderr, "aarp_read: Replying to %s from %d (%s)\n",
- X op == AARPProbe ? "probe" : "request",
- X spa, ether_ntoa (&p->ap_sha));
- X }
- X nit_write ((caddr_t) &eh, (caddr_t) &ap, sizeof ap);
- X }
- X break;
- X
- X case AARPResp :
- X if (debug)
- X fprintf (stderr, "aarp_read: Reply from %d (%s)\n",
- X spa, ether_ntoa (&p->ap_sha));
- X if (!haveaddr && spa == atalkaddr)
- X conflict++;
- X break;
- X
- X default :
- X logerr ("aarp_read: Unknown AARP operation %d\n", op);
- X }
- X}
- X
- X/*
- X * getaa - Return appletalk address for this host.
- X */
- Xgetaa (request, xprt)
- X
- Xstruct svc_req *request;
- XSVCXPRT *xprt;
- X
- X{
- X struct sockaddr_in *sa;
- X
- X if (debug) {
- X sa = svc_getcaller (xprt);
- X fprintf (stderr, "getaa: Returning %d to %s\n",
- X atalkaddr, inet_ntoa (sa->sin_addr));
- X }
- X switch (request->rq_proc) {
- X case NULLPROC:
- X if (!svc_sendreply (xprt, xdr_void, 0)) {
- X logerr ("getaa(NULLPROC): svc_sendreply failed\n");
- X exit (1);
- X }
- X break;
- X
- X case GETAAPROC:
- X if (!svc_sendreply (xprt, xdr_u_long, (caddr_t) &atalkaddr)) {
- X logerr ("getaa(GETAAPROC): svc_sendreply failed\n");
- X exit (1);
- X }
- X break;
- X
- X default:
- X svcerr_noproc (xprt);
- X break;
- X }
- X}
- X
- X/*
- X * Initialize RPC stuff.
- X */
- Xinitrpc ()
- X
- X{
- X SVCXPRT *xprt;
- X
- X if ((xprt = svcudp_create (RPC_ANYSOCK)) == NULL) {
- X logerr ("initrpc: svcudp_create failed\n");
- X exit (1);
- X }
- X pmap_unset (GETAAPROG, GETAAVERS);
- X if (!svc_register (xprt, GETAAPROG, GETAAVERS, getaa, IPPROTO_UDP)) {
- X logerr ("initrpc: Can't register %d %d\n", GETAAPROG, GETAAVERS);
- X exit (1);
- X }
- X}
- END_OF_FILE
- if test 7348 -ne `wc -c <'aarpd.c'`; then
- echo shar: \"'aarpd.c'\" unpacked with wrong size!
- fi
- # end of 'aarpd.c'
- fi
- if test -f 'getaa.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'getaa.c'\"
- else
- echo shar: Extracting \"'getaa.c'\" \(787 characters\)
- sed "s/^X//" >'getaa.c' <<'END_OF_FILE'
- X#ifndef lint
- Xstatic char *RCSid="$Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/getaa.c,v 1.1 91/01/29 17:37:21 root Exp $";
- X#endif lint
- X
- X/*
- X * $Log: getaa.c,v $
- X * Revision 1.1 91/01/29 17:37:21 root
- X * Initial revision
- X *
- X */
- X
- X#include <stdio.h>
- X#include <rpc/rpc.h>
- X#include "aarpd.h"
- X
- X/*
- X * getaa - Return appletalk address of "host". If host is NULL get
- X * local host address. Makes RPC call to aarpd on host.
- X */
- Xint getaa (host, aa)
- X
- Xchar *host;
- Xint *aa;
- X
- X{
- X int i;
- X int s;
- X
- X if (host == NULL)
- X host = "localhost";
- X/*
- X * Give aarpd a chance to register with portmap...
- X */
- X for (i = 0; i < 3; i++)
- X if ((s = callrpc (host, GETAAPROG, GETAAVERS, GETAAPROC,
- X xdr_void, 0, xdr_u_long, aa)) == 0)
- X break;
- X else
- X sleep (2);
- X return (s);
- X}
- END_OF_FILE
- if test 787 -ne `wc -c <'getaa.c'`; then
- echo shar: \"'getaa.c'\" unpacked with wrong size!
- fi
- # end of 'getaa.c'
- fi
- if test -f 'aarpd.8' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'aarpd.8'\"
- else
- echo shar: Extracting \"'aarpd.8'\" \(888 characters\)
- sed "s/^X//" >'aarpd.8' <<'END_OF_FILE'
- X.TH aarpd 8 "25 October 90"
- X.SH NAME
- Xaarpd \- Appletalk Arp daemon.
- X.SH SYNOPSIS
- X.I
- Xaarpd
- X.B [-d]
- X.B [-i interface]
- X.B [-v]
- X.SH DESCRIPTION
- X.I aarpd
- Ximplements the Appletalk Arp protocol on a unix host. It obtains an
- XAppletalk node number, and then listens and replies to other nodes
- Xtrying to find out if this node number is in use.
- X.LP
- XOther processes on the host (eg kboot) can obtain the node number for
- Xthis host via an RPC call.
- X.SH OPTIONS
- X.TP
- X.B \-d
- XTurn on debugging.
- X.TP
- X.B \-i interface
- XSpecify interface name (eg ie1). Defaults to first interface in kernel.
- X.TP
- X.B \-v
- XPrint aarpd version number.
- X.SH "SEE ALSO"
- Xkboot(8), nit(4)
- X.SH BUGS
- X.I aarpd
- Xdepends on the SunOS 4\.x NIT interface and probably isn't very portable.
- X.SH AUTHOR
- XBob Schwartzkopf, The RAND Corporation. Much credit is due Dan Tappan
- Xof BBN, who wrote the first version of
- X.I kboot
- Xthat ran on SunOS 3.x.
- END_OF_FILE
- if test 888 -ne `wc -c <'aarpd.8'`; then
- echo shar: \"'aarpd.8'\" unpacked with wrong size!
- fi
- # end of 'aarpd.8'
- fi
- if test -f 'kboot.8' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'kboot.8'\"
- else
- echo shar: Extracting \"'kboot.8'\" \(3803 characters\)
- sed "s/^X//" >'kboot.8' <<'END_OF_FILE'
- X.TH kboot 8 "25 October 90"
- X.SH NAME
- Xkboot - Monitor and reboot Fastpath 4 gateways.
- X.SH SYNOPSIS
- X.I kboot
- X.B [-bclrs fastpath]
- X.B [-d]
- X.B [-i interface]
- X.B [-p int]
- X.B [-t fastpath [server]]
- X.B [-v]
- X.B [-w]
- X.SH DESCRIPTION
- X.I kboot
- Xis a program that can monitor, load and configure Kinetics/Shiva Fastpath 4
- Xgateways over an ethernet from a Sun running SunOS 4.x.
- X.LP
- X.I kboot
- Xwill only talk to fastpaths specified in the configuration file
- X/usr/local/etc/kbootcf. The format of this file is simply the hostname
- Xof each fastpath, followed by white space and the name of the KSTAR
- Xsoftware to be downloaded in the event that kboot reloads the fastpath.
- XThe KSTAR program filename in the configuration file should be relative to
- Xthe directory where the configuration file is, by default this is
- X/usr/local/etc.
- X.LP
- X.I kboot
- Xgets an appletalk node number from a separate daemon called aarpd(8) via
- Xan RPC call. aarpd must be running for
- X.I kboot
- Xto work.
- X.LP
- X.I kboot
- Xreads the fastpath's ethernet address from /etc/ethers (or equivalent
- XNIS map), each fastpath managed by
- X.I kboot
- Xmust have its correct ethernet address in that file.
- X.LP
- XEach configured fastpath should have a corresponding state file. These
- Xcan be obtained in one of two ways. They can be generated using the
- Xfastpath manager program on a Mac, in which case they should be transferred
- Xto the file /usr/local/etc/<fastpath>.config on the host
- X.I kboot
- Xis running on. Alternatively, the current state vector of a fastpath
- Xcan be read directly from the fastpath using the \-s option of
- X.I kboot.
- XIn this case the state will be saved as /usr/local/etc/<fastpath>.state.
- XIf both files exist, the file generated by the fastpath manager (.config)
- Xwill be used.
- X.LP
- XSending
- X.I kboot
- Xa HUP signal while it's in "watch" mode will cause
- X.I kboot
- Xto reread the configuration file kbootcf. This is useful after editing
- Xthe configuration file.
- X.SH OPTIONS
- X.TP
- X.B \-b fastpath
- XDownload KSTAR program and state to specified fastpath gateway.
- X.TP
- X.B \-c fastpath
- XDownload state to specified fastpath gateway.
- X.TP
- X.B \-d
- XTurn on debugging.
- X.TP
- X.B \-l fastpath
- XRead state from specified fastpath and print various fields.
- X.TP
- X.B \-i interface
- XSpecify interface name (eg ie1). Defaults to first interface in kernel.
- X.TP
- X.B \-p int
- XSet ping interval, in seconds.
- X.TP
- X.B \-r fastpath
- XReset specified fastpath.
- X.TP
- X.B \-s fastpath
- XRead state vector from specified fastpath and save to a file. This file
- Xcan be used for downloading later.
- X.TP
- X.B \-t fastpath [server]
- XAsk
- X.I kboot
- Xrunning in "watch" mode (see -w option below) on
- X.I server
- Xto reload the specified fastpath. Useful for forcing a reboot
- Xwithout killing a currently running kboot daemon, manually reloading
- Xwith -b, and restarting the daemon.
- X.TP
- X.B \-w
- XPut
- X.I kboot
- Xin "watch" mode. In this mode,
- X.I kboot
- Xwill periodically ping the fastpaths
- Xspecified in the config file, rebooting them if they don't answer.
- X.I kboot
- Xwill also listen for RPC requests sent by interactively run
- X.I kboot
- Xprocesses requesting reloads (see -t option).
- X.TP
- X.B \-v
- XPrint
- X.I kboot
- Xversion number.
- X.SH FILES
- X.TP
- X.B /usr/local/etc/kbootcf
- XConfiguration file.
- X.TP
- X.B /usr/local/etc/<fastpath>.config
- XAscii fastpath configuration as generated by fastpath manager.
- X.TP
- X.B /usr/local/etc/<fastpath>.state
- XBinary state vector read from fastpath.
- X.SH "SEE ALSO"
- Xaarpd(8), nit(4)
- X.SH BUGS
- X.I kboot
- Xdepends on the SunOS 4\.x NIT interface and probably isn't very portable.
- X.LP
- X.I kboot
- Xcan only download/configure fastpaths on the same ethernet
- Xthat the host
- X.I kboot
- Xis running on is attached to.
- X.SH AUTHOR
- XBob Schwartzkopf, The RAND Corporation. Much credit is due Dan Tappan
- Xof BBN, who wrote the first version of
- X.I kboot
- Xthat ran on SunOS 3.x, and Phil Budne of Shiva, who helped make it
- Xwork with KSTAR 8.0.
- END_OF_FILE
- if test 3803 -ne `wc -c <'kboot.8'`; then
- echo shar: \"'kboot.8'\" unpacked with wrong size!
- fi
- # end of 'kboot.8'
- fi
- if test -f 'aarpd.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'aarpd.h'\"
- else
- echo shar: Extracting \"'aarpd.h'\" \(259 characters\)
- sed "s/^X//" >'aarpd.h' <<'END_OF_FILE'
- X/*
- X * $Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/aarpd.h,v 1.1 91/01/29 17:37:30 root Exp $
- X *
- X * $Log: aarpd.h,v $
- X * Revision 1.1 91/01/29 17:37:30 root
- X * Initial revision
- X *
- X */
- X
- X#define GETAAPROG 0x20000001
- X#define GETAAVERS 1
- X#define GETAAPROC 1
- END_OF_FILE
- if test 259 -ne `wc -c <'aarpd.h'`; then
- echo shar: \"'aarpd.h'\" unpacked with wrong size!
- fi
- # end of 'aarpd.h'
- fi
- if test -f 'appletalk.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'appletalk.h'\"
- else
- echo shar: Extracting \"'appletalk.h'\" \(2078 characters\)
- sed "s/^X//" >'appletalk.h' <<'END_OF_FILE'
- X/*
- X * $Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/appletalk.h,v 1.1 91/01/29 17:37:31 root Exp $
- X *
- X * $Log: appletalk.h,v $
- X * Revision 1.1 91/01/29 17:37:31 root
- X * Initial revision
- X *
- X */
- X
- X/*
- X * appletalk.h - Definitions for Appletalk protocols.
- X */
- X#define AT_Broadcast 0xFF /* Broadcast appletalk address */
- X#define AARP 0x80F3 /* AARP protocol type */
- X#define H_Ethernet 1 /* Hardware type for ethernet */
- X#define HL_Ethernet 6 /* Ethernet address length */
- X#define P_AppleTalk 0x809B /* Protocol type for appletalk */
- X#define PL_AppleTalk 4 /* Appletalk address length */
- X#define AReqTicks 2 /* # of ticks between requests */
- X#define AReqTries 6 /* # of tries on requests */
- X/*
- X * Inside Appletalk suggests APrbTicks should be 2 and APrbTries 20.
- X * Our hosts don't always respond that fast, and that seems like way
- X * too many retries, so we'll slow down the timeout and decrease the
- X * retries.
- X */
- X#define APrbTicks 20 /* # of ticks between probes */
- X#define APrbTries 5 /* # of tries on probes */
- X
- X/*
- X * Appletalk ARP header.
- X */
- Xstruct ether_aarp {
- X u_short aarp_hrd; /* Hardware type */
- X u_short aarp_pro; /* Protocol type */
- X u_char aarp_hln; /* Hardware address length */
- X u_char aarp_pln; /* Protocol address length */
- X u_short aarp_op; /* Command */
- X#define AARPReq 1
- X#define AARPResp 2
- X#define AARPProbe 3
- X struct ether_addr aarp_sha; /* Sender hardware address */
- X u_char aarp_spa[4]; /* Sender protocol address */
- X struct ether_addr aarp_tha; /* Target hardware address */
- X u_char aarp_tpa[4]; /* Target protocol address */
- X};
- X
- Xstruct aarp_packet {
- X struct ether_header ap_ehdr;
- X struct ether_aarp ap_ahdr;
- X};
- X#define ap_dhost ap_ehdr.ether_dhost
- X#define ap_shost ap_ehdr.ether_shost
- X#define ap_type ap_ehdr.ether_type
- X#define ap_hrd ap_ahdr.aarp_hrd
- X#define ap_pro ap_ahdr.aarp_pro
- X#define ap_hln ap_ahdr.aarp_hln
- X#define ap_pln ap_ahdr.aarp_pln
- X#define ap_op ap_ahdr.aarp_op
- X#define ap_sha ap_ahdr.aarp_sha
- X#define ap_spa ap_ahdr.aarp_spa
- X#define ap_tha ap_ahdr.aarp_tha
- X#define ap_tpa ap_ahdr.aarp_tpa
- END_OF_FILE
- if test 2078 -ne `wc -c <'appletalk.h'`; then
- echo shar: \"'appletalk.h'\" unpacked with wrong size!
- fi
- # end of 'appletalk.h'
- fi
- if test -f 'config.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'config.h'\"
- else
- echo shar: Extracting \"'config.h'\" \(546 characters\)
- sed "s/^X//" >'config.h' <<'END_OF_FILE'
- X/*
- X * $Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/config.h,v 1.1 91/01/29 17:37:42 root Exp $
- X *
- X * $Log: config.h,v $
- X * Revision 1.1 91/01/29 17:37:42 root
- X * Initial revision
- X *
- X */
- X
- X/*
- X * config.h - Tunable stuff for kboot should all be here.
- X */
- X
- X /* KSTAR images and fastpath config files live here */
- X#define ETCDIR "/usr/local/etc"
- X /* Seconds between pings to make sure fastpaths are ok */
- X#define PINGINTERVAL 120
- X /* Number of ping retries */
- X#define PINGRETRIES 5
- X /* Timeout (seconds) for pings */
- X#define PINGTIMEOUT 2
- END_OF_FILE
- if test 546 -ne `wc -c <'config.h'`; then
- echo shar: \"'config.h'\" unpacked with wrong size!
- fi
- # end of 'config.h'
- fi
- if test -f 'kbox.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'kbox.h'\"
- else
- echo shar: Extracting \"'kbox.h'\" \(4880 characters\)
- sed "s/^X//" >'kbox.h' <<'END_OF_FILE'
- X/*
- X * $Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/kbox.h,v 1.2 91/02/12 19:37:15 root Exp $
- X *
- X * $Log: kbox.h,v $
- X * Revision 1.2 91/02/12 19:37:15 root
- X * Remove unused commands.
- X *
- X * Revision 1.1 91/01/29 17:37:47 root
- X * Initial revision
- X *
- X */
- X
- X#define FP_TYPE 'K'
- X#define FP_CMD 'C'
- X#define FP_ACK 'A'
- X#define FP_RESP 'R'
- X/*
- X * The fp_state structure declared in cmdmacro.h doesn't align all the
- X * fields properly when compiled on sparc machines, so kboot uses these
- X * offsets into an array to access interesting fields.
- X */
- X#define O_ATNET 0 /* Net number appletalk side */
- X#define O_ETNET 2 /* Net number ethertalk side */
- X#define O_VALID 4 /* Appletalk node number valid */
- X#define O_NODE 5 /* Appletalk node number */
- X#define O_BRIDGE 7 /* Bridge number */
- X#define O_ETHER 8 /* Ethernet address */
- X#define O_NAME 14 /* Gateway name */
- X#define O_FILE 35 /* Loadfile name */
- X#define O_PFORCE 56 /* Force execution of prom loop */
- X#define O_ATZONE 62 /* Localtalk zone */
- X#define O_ETZONE 95 /* Ethertalk zone */
- X#define O_ETVALID 128 /* Ethertalk node number valid */
- X#define O_ETNODE 129 /* Ethertalk node number */
- X#define O_AUTOCONFIG 130 /* Autoconfig switch */
- X#define O_AUTOBOOT 132 /* Autoboot switch */
- X#define O_OPTIONS 134 /* Options */
- X#define O_OPTPARAM 138 /* Optional parameters */
- X#define O_SN 170 /* Serial number */
- X#define O_DATE 174 /* Configuration date */
- X#define O_TYPE 178 /* Type */
- X#define O_CONFIG 180 /* Name of config file */
- X#define O_UDPZONE 214 /* UDP zone name */
- X#define O_IPDEFROUTER 248 /* Default gateway */
- X#define O_IPADDRESS 252 /* Ip address */
- X#define O_ATIPADDRESS 256 /* Localtalk IP net */
- X#define O_IPBROADCAST 260 /* Broadcast address */
- X#define O_IPSUBMASK 264 /* Subnet mask */
- X#define O_IPKIPSERVER 268 /* Admin host */
- X#define O_UDPNET 272 /* UDP net number */
- X#define O_UDPNODE 274 /* UDP node number */
- X#define O_NAMESERVER 276 /* DNS host */
- X#define O_FILESERVER 280 /* File server */
- X#define O_LP1 284 /* Local parameter 1 */
- X#define O_LP2 288 /* Local parameter 2 */
- X#define O_LP3 292 /* Local parameter 3 */
- X#define O_LP4 296 /* Local parameter 4 */
- X#define O_NDYNAMICS 300 /* Number of dynamic ip addrs */
- X#define O_NSTATICS 302 /* Number of static ip addrs */
- X#define O_SIGNATURE 304 /* Signature */
- X#define O_AREANODE 308 /* DECnet area and node */
- X#define O_BACKTIMER 310 /* DECnet routing timer */
- X#define O_HELLOTIMER 312 /* DECnet hello timer */
- X#define O_RSTART 314 /* Range start for ET 2.0 */
- X#define O_REND 316 /* Range end for ET 2.0 */
- X#define O_ET2NET 318 /* Net number ET 2.0 side */
- X#define O_ET2VALID 320 /* ET 2.0 node number valid */
- X#define O_ET2NODE 321 /* ET 2.0 node number */
- X#define O_ZONELIST 322 /* Zonelist */
- X#define O_CONFIGTYPES 326 /* Reserved for FPM */
- X#define O_DATATYPE 330 /* Define following data */
- X#define O_DATALEN 332 /* Length of following data */
- X#define O_ATAPOPTIONS 334
- X#define O_ATAPRETRY 336
- X
- X#define STATE_LENGTH 0x24A /* Length of state vector */
- X#define FPCOPYSIZE 10 /* Copy structure size */
- X#define PROMRAMSIZE 64 /* promram structure size */
- X#define HTSIZE 32
- X#define MAXHOSTNAME 64
- X#define MAXKBOX 256
- X#define MAXFN 256
- X#define MAXZONELIST 256
- X
- Xstruct kbox {
- X struct sockaddr_in ip;
- X int reload;
- X char name[MAXHOSTNAME];
- X char bootfile[MAXFN];
- X char conffile[MAXFN];
- X struct ether_addr ea;
- X u_char aa;
- X struct kbox *nxt;
- X};
- X
- X/*
- X * Send functions with no parameters.
- X */
- X#define send_execute(kp) send_gen (kp, X_EXECUTE, 0)
- X#define send_promram(kp) send_gen (kp, X_PROMRAM, 5)
- X#define send_reset(kp) send_gen (kp, X_RESET, 0)
- X#define send_exprom(kp) send_gen (kp, X_EXPROM, 0)
- X
- X/*
- X * Packet used to talk to Kinetics Fastpaths. Does not include link
- X * level header (ether_header).
- X */
- X#define MAXFPPKT 1024
- Xstruct ether_fastpath {
- X unsigned char fastpath_lapdest;
- X unsigned char fastpath_lapsrc;
- X unsigned char fastpath_laptype;
- X unsigned char fastpath_len[2];
- X unsigned char fastpath_cmd;
- X unsigned char fastpath_scmd;
- X unsigned char fastpath_data[MAXFPPKT];
- X};
- X
- Xstruct fp_packet {
- X struct ether_header fp_ehdr;
- X struct ether_fastpath fp_fphdr;
- X};
- X#define fp_dhost fp_ehdr.ether_dhost
- X#define fp_shost fp_ehdr.ether_shost
- X#define fp_type fp_ehdr.ether_type
- X#define fp_lapdest fp_fphdr.fastpath_lapdest
- X#define fp_lapsrc fp_fphdr.fastpath_lapsrc
- X#define fp_laptype fp_fphdr.fastpath_laptype
- X#define fp_len fp_fphdr.fastpath_len
- X#define fp_cmd fp_fphdr.fastpath_cmd
- X#define fp_scmd fp_fphdr.fastpath_scmd
- X#define fp_data fp_fphdr.fastpath_data
- X
- Xtypedef struct {
- X short num_elements; /* Number of elements in following array */
- X short type; /* Type of element (1 for zonelist) */
- X short bytes; /* Length of element */
- X} elemlist;
- X
- X#define NAMELEN 21
- X#define CONFIGLEN 33
- END_OF_FILE
- if test 4880 -ne `wc -c <'kbox.h'`; then
- echo shar: \"'kbox.h'\" unpacked with wrong size!
- fi
- # end of 'kbox.h'
- fi
- if test -f 'patchlevel.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'patchlevel.h'\"
- else
- echo shar: Extracting \"'patchlevel.h'\" \(296 characters\)
- sed "s/^X//" >'patchlevel.h' <<'END_OF_FILE'
- X/*
- X * $Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/patchlevel.h,v 1.2 91/02/12 19:38:43 root Exp $
- X *
- X * $Log: patchlevel.h,v $
- X * Revision 1.2 91/02/12 19:38:43 root
- X * *** empty log message ***
- X *
- X * Revision 1.1 91/01/29 17:37:51 root
- X * Initial revision
- X *
- X */
- X
- X#define PATCHLEVEL 2
- END_OF_FILE
- if test 296 -ne `wc -c <'patchlevel.h'`; then
- echo shar: \"'patchlevel.h'\" unpacked with wrong size!
- fi
- # end of 'patchlevel.h'
- fi
- if test -f 'cmdidx.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'cmdidx.h'\"
- else
- echo shar: Extracting \"'cmdidx.h'\" \(8803 characters\)
- sed "s/^X//" >'cmdidx.h' <<'END_OF_FILE'
- X/*
- X * Copyright (c) 1985, 1986 Kinetics, Inc.
- X *
- X * $Header: /usr/fp/include/fp/RCS/cmdidx.h,v 1.6 86/02/20 19:54:20 root Exp $
- X *
- X * Indices into the jump table for PROM routines.
- X * Also, the command numbers for the routines when invoked
- X * from Kinetics LAP type command packets.
- X * The values of these constants are actually determined by
- X * their position in the jump table in .../proms/kfpx.s.
- X * See cmdmacro.h for the actual calls through the jump table.
- X * After the indices are defined, structure definitions for
- X * each call's pointer parameter are also defined..
- X */
- X
- X#define X_VERSION 0
- X#define X_EXECUTE 1
- X#define X_ACK 2
- X#define X_REBOOT 3
- X#define X_SET68 4
- X#define X_SET86 5
- X#define X_ATINIT 6
- X#define X_ATWRITE 7
- X#define X_WAIT 8
- X#define X_WHEREIS 9
- X#define X_GETMEM 10
- X#define X_PROTECT 11
- X#define X_COPYMEM 12
- X#define X_CLRMEM 13
- X#define X_PROMRAM 14
- X#define X_RESET 15
- X#define X_USER0 16
- X#define X_USER1 17
- X#define X_USER2 18
- X#define X_USER3 19
- X#define X_USER4 20
- X#define X_USER5 21
- X#define X_USER6 22
- X#define X_USER7 23
- X#define X_BUFINIT 24
- X#define X_BUFGET 25
- X#define X_BUFFREE 26
- X#define X_BUFENQ 27
- X#define X_BUFDEQ 28
- X#define X_ERR 29
- X#define X_IDLE 30
- X#define X_KLAP 31
- X#define X_WHO 32
- X#define X_CA86 33
- X#define X_RES86 34
- X#define X_CLRINT 35
- X#define X_RCSID 36
- X#define X_EXPROM 37
- X#define X_INIPROM 38
- X#define X_RES8530 39
- X#define X_DMTSERV 40
- X#define X_SREC 41
- X#define X_SPL 42
- X#define X_NOTIMP 43
- X
- X/* structures for the above commands */
- X
- X/* X_VERSION */
- Xstruct fp_version {
- X short fpv_entries; /* number of valid entries in jump table */
- X short fpv_version; /* version of the prom code */
- X long fpv_model; /* "KFPS", "KFPQ", or "KFPM" */
- X};
- X
- X/* X_EXECUTE */
- X/* no parameters */
- X
- X/* X_ACK */
- X/* no parameters */
- X
- X/* X_REBOOT */
- X/* no parameters */
- X
- X/* X_SET68 */
- X/* no parameters */
- X
- X/* X_SET86 */
- X/* this structure is really defined in ie.h, but it should look like this */
- X#ifdef NEVER
- Xstruct scb {
- X unsigned short sc_status; /* status */
- X unsigned short sc_cmd; /* command */
- X unsigned short sc_clist; /* command list */
- X unsigned short sc_rlist; /* receive frame list */
- X unsigned short sc_crcerrs; /* crc errors */
- X unsigned short sc_alnerrs; /* alignment errors */
- X unsigned short sc_rscerrs; /* resource errors (lack of rfd/rbd's) */
- X unsigned short sc_ovrnerrs; /* overrun errors (mem bus not avail) */
- X};
- X#endif NEVER
- X
- X/* X_ATINIT */
- X/* The parameter is a pointer to a short which is filled in with
- X the node number chosen by the AppleTalk initialization sequence */
- X
- X/* X_ATWRITE */
- Xstruct fp_atwrite {
- X short fpw_length; /* number of bytes in hte following string */
- X unsigned char *fpw_str; /* string to be output onto the network */
- X};
- X
- X/* X_WAIT */
- X/* The parameter is a long integer which indicates
- X the number of milliseconds to delay */
- X
- X/* X_WHEREIS */
- Xstruct fp_whereis {
- X char *fpw_rom0; /* first address of 1st ROM */
- X char *fpw_rom1; /* first address of 2nd ROM */
- X char *fpw_8530; /* address of Zilog 8530 chip */
- X char *fpw_0port; /* address of 1st 8-bit port */
- X char *fpw_1port; /* address of 2nd 8-bit port */
- X char *fpw_ram2; /* address of 1st RAM location */
- X char *fpw_ramtop; /* address of last RAM location */
- X};
- X
- X/* X_GETMEM and X_CLRMEM and X_BUFINIT */
- Xstruct fp_mem {
- X short fpm_count; /* number of bytes */
- X char *fpm_memp; /* addr of allocated or to be cleared memory */
- X};
- X
- X/* X_PROTECT */
- Xstruct fp_proelem { /* protection array element */
- X short fpp_count; /* number of bytes to protect */
- X char *fpp_memp; /* address of memory to protect */
- X short fpp_chksum; /* checksum of protected memory */
- X};
- X
- Xstruct fp_protect {
- X short fpt_oper; /* type of protection operation and result */
- X short fpt_count; /* number of elements in protection array */
- X struct fp_proelem *fpt_elem; /* addr 1st element in protection array */
- X};
- X
- X/* fpt_oper operations */
- X#define PR_FAIL -1 /* result: check of checksums failed */
- X#define PR_PASS 0 /* result: check of checksums passed */
- X#define PR_PROTECT 1 /* operation: start protect via elem array */
- X#define PR_CHECK 2 /* operation: verify protect via elem array */
- X#define PR_CANCEL 3 /* operation: cancel protect via elem array */
- X
- X/* X_COPYMEM */
- Xstruct fp_copy {
- X char *fpc_from; /* location to copy bytes from */
- X char *fpc_to; /* location to copy bytes to */
- X short fpc_count; /* number of bytes to copy */
- X};
- X
- X/* X_PROMRAM */
- Xstruct fp_bufinfo {
- X struct pbuf **fpb_pfree;/* beginning of the free list */
- X struct pqueue *fpb_pq; /* received buffers queue (both networks) */
- X struct pqueue *fpb_sendq;/* Ethernet transmit queue */
- X short fpb_bsize; /* size of a buffer including header */
- X short fpb_pbnfree; /* pbufs on our free list */
- X short fpb_pbndrops; /* times failed to find space */
- X short fpb_pbntypes[16];/* type specific pbuf allocations */
- X};
- X
- Xstruct fp_state {
- X unsigned short fps_atnet; /* current net number for AppleTalk side */
- X unsigned short fps_etnet; /* current net number for Ethernet side */
- X unsigned char fps_valid; /* following AppleTalk node number valid */
- X unsigned char fps_node; /* current AppleTalk LAP node number */
- X unsigned char fps_netw; /* network number (not used) */
- X unsigned char fps_bridge; /* last known bridge num on net if any */
- X unsigned char fps_ether[6]; /* current ethernet address */
- X#define SNAMESIZE 21 /* extra char for null at end */
- X char fps_name[SNAMESIZE];/* ascii name of the gateway */
- X char fps_file[SNAMESIZE];/* ascii name of srec file last loaded */
- X unsigned char fps_pforce; /* non-zero forces execution of prom loop */
- X unsigned char fps_reserve;
- X unsigned char fps_unused[70];
- X};
- X
- Xstruct fp_abstats {
- X int fpa_interrupts; /* Appletalk interrupts */
- X int fpa_ipackets; /* packets received */
- X int fpa_opackets; /* packets transmitted */
- X int fpa_crc; /* crc errors */
- X int fpa_ovr; /* receive overrun errors */
- X int fpa_iund; /* receive underrun errors */
- X int fpa_xx;
- X int fpa_yy;
- X int fpa_bad; /* bad packets received */
- X int fpa_coll; /* collisions */
- X int fpa_defer; /* times deferred to other packets */
- X int fpa_idleto; /* packets that timed out waiting for the end */
- X int fpa_zz;
- X int fpa_nodata; /* packets without data (nothing after rts) */
- X int fpa_ound; /* transmit underrun errors */
- X int fpa_badddp; /* bad ddp packets */
- X int fpa_spur; /* spurrious interrupts */
- X};
- X
- Xstruct fp_iestats {
- X struct scb *fpi_scbptr; /* status control block */
- X int fpi_ipackets; /* input packets */
- X int fpi_opackets; /* output packets */
- X int fpi_ierrors; /* input errors */
- X int fpi_oerrors; /* output errors */
- X int fpi_cmdbusy; /* busy waits */
- X};
- X
- Xstruct fp_promram {
- X short fpr_count; /* number of valid ptrs that follow */
- X char *fpr_jtable; /* jump table */
- X struct fp_bufinfo *fpr_bufs; /* buffer manager vector */
- X struct fp_state *fpr_state; /* Prompt program's state vector */
- X struct fp_abstats *fpr_abstats; /* AppleTalk statistics vector */
- X struct fp_iestats *fpr_iestats; /* Ethernet statistics vector */
- X char *fpr_1debug; /* first level debug flag */
- X char *fpr_2debug; /* second level debug flag */
- X char *fpr_3debug; /* third level debug flag */
- X char *fpr_unused[24]; /* remaining ptrs are not defined yet */
- X};
- X
- X/* X_RESET */
- X/* no parameters */
- X
- X/* X_USER0, X_USER1, X_USER2, X_USER3, X_USER4, X_USER5, X_USER6, X_USER7 */
- X/* parameters (if any) defined by user */
- X
- X/* X_BUFGET */
- Xstruct fp_bget {
- X struct pbuf *fpg_buf; /* address of buffer returned */
- X short fpg_type; /* type of buffer to be "gotten" */
- X};
- X
- X/* X_BUFFREE */
- Xstruct fp_bfree {
- X struct pbuf *fpf_buf; /* address of buffer to be freed */
- X struct pbuf *fpf_nxt; /* the freed buffer's link before it was freed*/
- X};
- X
- X/* X_BUFENQ and X_BUFDEQ */
- Xstruct fp_bqueue {
- X struct pqueue *fpq_q; /* addr of queue to enqueue to / dequeue from */
- X struct pbuf *fpq_buf; /* addr of buffer to be enqueued or dequeued */
- X};
- X
- X/* X_ERR */
- X/* no parameters */
- X
- X/* X_IDLE */
- X/* no parameters */
- X
- X/* X_KLAP */
- X/* The parameter is the address of a pbuf structure. See pbuf.h. */
- X
- X/* X_WHO */
- X/* no parameters */
- X
- X/* X_CA86 */
- X/* no parameters */
- X
- X/* X_RES86 */
- X/* no parameters */
- X
- X/* X_CLRINT */
- X/* no parameters */
- X
- X/* X_RCSID */
- X/* The parameter is the address of a character array which is filled
- X in with the current RCS identification string of this PROM version. */
- X
- X/* X_EXPROM */
- X/* no parameters */
- X
- X/* X_INIPROM */
- X/* no parameters */
- X
- X/* X_RES8530 */
- X/* no parameters */
- X
- X/* X_DMTSERV */
- X/* no parameters */
- X
- X/* X_SREC */
- X/* The parameter is the address of a character array which contains
- X the S-record to be interpreted and used by the gateway */
- X
- X/* X_SPL */
- X/* The parameter is the address short which becomes the next processor priority
- X level. The previous priority level is returned at the same location */
- X
- X/* X_NOTIMP */
- X/* no parameters */
- X
- END_OF_FILE
- if test 8803 -ne `wc -c <'cmdidx.h'`; then
- echo shar: \"'cmdidx.h'\" unpacked with wrong size!
- fi
- # end of 'cmdidx.h'
- fi
- if test -f 'kboot.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'kboot.h'\"
- else
- echo shar: Extracting \"'kboot.h'\" \(268 characters\)
- sed "s/^X//" >'kboot.h' <<'END_OF_FILE'
- X/*
- X * $Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/kboot.h,v 1.1 91/02/12 19:38:26 root Exp $
- X *
- X * $Log: kboot.h,v $
- X * Revision 1.1 91/02/12 19:38:26 root
- X * Initial revision
- X *
- X */
- X
- X#define KBOOTPROG 0x20000002
- X#define KBOOTVERS 1
- X#define KBOOTPROC_RELOAD 1
- END_OF_FILE
- if test 268 -ne `wc -c <'kboot.h'`; then
- echo shar: \"'kboot.h'\" unpacked with wrong size!
- fi
- # end of 'kboot.h'
- fi
- if test -f 'Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Makefile'\"
- else
- echo shar: Extracting \"'Makefile'\" \(966 characters\)
- sed "s/^X//" >'Makefile' <<'END_OF_FILE'
- XKBOOT = kboot.o getaa.o nitlib.o cmd.o icmp.o
- XAARPD = aarpd.o nitlib.o
- XCFLAGS = -g
- XETCDIR = /usr/rand/etc
- XMANDIR = /usr/rand/man/man8
- XSRCS1 = aarpd.c getaa.c
- XSRCS2 = cmd.c icmp.c kboot.c nitlib.c
- XINCS = aarpd.h appletalk.h config.h kbox.h patchlevel.h cmdidx.h kboot.h
- XMANS = aarpd.8 kboot.8
- X
- Xall: aarpd kboot
- X
- Xkboot: $(KBOOT)
- X cc -o kboot $(KBOOT)
- X
- Xaarpd: $(AARPD)
- X cc -o aarpd $(AARPD)
- X
- Xinstall:
- X install -c kboot $(ETCDIR)/kboot
- X install -c aarpd $(ETCDIR)/aarpd
- X
- Xinstall.man:
- X install -c kboot.8 $(MANDIR)/kboot.8
- X install -c aarpd.8 $(MANDIR)/aarpd.8
- X
- Xclean:
- X rm -f aarpd kboot *.o core *~
- X
- Xshar: $(SRCS1) $(SRCS2) $(INCS) $(MANS) Makefile README
- X shar -n1 -e2 $(SRCS2) > kboot1.shar
- X shar -n2 -e2 $(SRCS1) $(MANS) $(INCS) Makefile README > kboot2.shar
- X
- Xaarpd.o: appletalk.h aarpd.h config.h patchlevel.h
- Xkboot.o: appletalk.h kbox.h cmdidx.h config.h kboot.h patchlevel.h
- Xcmd.o: appletalk.h kbox.h cmdidx.h config.h
- Xicmp.o: kbox.h config.h
- Xnitlib.o: config.h
- END_OF_FILE
- if test 966 -ne `wc -c <'Makefile'`; then
- echo shar: \"'Makefile'\" unpacked with wrong size!
- fi
- # end of 'Makefile'
- fi
- if test -f 'README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'README'\"
- else
- echo shar: Extracting \"'README'\" \(4134 characters\)
- sed "s/^X//" >'README' <<'END_OF_FILE'
- XKboot is a program used to monitor, boot and configure Shiva Fastpaths
- Xfrom a sun running SunOS 4.x. It was originally written by Dan Tappan
- Xof BBN, and ran under SunOS 3.5. I've ported it to SunOS 4.x and
- Xadded support for KSTAR version 8.0 and up. Complaints, suggestions
- Xand bug fixes can be sent to me.
- X
- XBob Schwartzkopf
- XThe RAND Corporation
- X1700 Main Street
- XPO Box 2138
- XSanta Monica, Ca. 90407-2138
- Xbobs@rand.org
- X
- XThe kboot package consists of 2 separate programs, kboot and aarpd.
- Xkboot is the program that monitors, configures and downloads Shiva
- XFastpaths; aarpd implements some of the Appletalk ARP protocol.
- XAarpd obtains an Appletalk node number dynamically for the
- Xlocal host; kboot queries aarpd via an RPC call to learn the
- Xnode number it should use when communicating with Fastpaths.
- XPlease note that kboot and aarpd must be run on a sun on the same
- Xethernet as the Fastpaths it will be talking to, as it depends on
- Xbroadcasts to learn the Appeltalk addresses of each Fastpath specified
- Xin its configuration file.
- X
- XTo build kboot and aarpd:
- X
- X - Edit Makefile and set ETCDIR and MANDIR
- X
- X - Edit config.h as necessary
- X
- X - make
- X
- XTo install:
- X
- X - make install
- X
- X - make install.man
- X
- XOnce kboot and aarpd are installed you must create the following
- Xfiles in ETCDIR:
- X
- Xkbootcf - kboot configuration file.
- XKSTAR - KSTAR software, which comes with Fastpath Manager and is also
- X available via anonymous ftp from shiva.com.
- X
- XYou will also need a configuration file for each Fastpath. These
- Xfiles also are installed in ETCDIR with the name FASTPATH.config
- Xor FASTPATH.state, where FASTPATH is the hostname of the Fastpath.
- XThe .config files are ascii configuration files created by Fastpath
- XManager. The .state files are binary files created by kboot, which
- Xhas an option to read the state of a currently running Fastpath
- Xand save it to ETCDIR/FASTPATH.state.
- X
- XThe kboot configuration file (ETCDIR/kbootcf) contains a list of
- XFASTPATH hostnames followed by the name of the KSTAR image to download.
- XFor example, if you have 2 Fastpaths, one running 7.0.1 and the other
- Xrunning 8.0, you could copy the appropriate KSTAR software to
- XETCDIR/KSTAR-7.0.1 and ETCDIR/KSTAR-8.0. Your kbootcf file would
- Xthen look like:
- X
- X fastpath1 KSTAR-7.0.1
- X fastpath2 KSTAR-8.0
- X
- XKboot learns the ethernet address of each configured Fastpath by
- Xlooking at the ethernet header of the packets sent to it by each Fastpath.
- XIt verifies that address with the address in the ethers NIS map (or
- Xfile if you're not running NIS), so it is necessary that each
- Xconfigured Fastpath have its ethernet address entered in the ethers map.
- XKboot will complain about unknown Fastpaths if the ethers map
- Xis not correct.
- X
- XNOTE: The appletalk phase II zonelist (specified in Fastpath
- X Manager) is not included in the Fastpath configuration
- X structure. Hence it is not downloaded when a Fastpath
- X is configured. Instead, it is converted into s-records
- X and downloaded with the KSTAR software. Since a zonelist
- X is not part of the configuration structure, the configuration
- X read by kboot and stored in ETCDIR/FASTPATH.state will not
- X contain the zonelist in use by the Fastpath.
- X
- X The Fastpath Manager software does include the zonelist in
- X the ascii configuration file, and kboot knows how to read
- X it from there, convert it to s-records, and download it to
- X the Fastpath. Hence, if you're running Appletalk phase II,
- X and have a non empty zonelist, you cannot use the binary
- X state files generated by kboot. You must instead use
- X Fastpath manager to create an ascii configuration file which
- X includes the zonelist and copy it to ETCDIR.
- X
- X Since I have no documentation on the Fastpath I had to reverse
- X engineer the format of the s-records, the address where they're
- X stored in the Fastpath, and how they're encoded in the
- X configuration file. My thanks to Phil Budne of Shiva who
- X helped me with some of this stuff. I don't guarantee this
- X code is perfect (especially since we're not running phase II
- X yet), however the one test I ran did seem to work. Please
- X let me know if you have any problems with zonelists, or any
- X other part of kboot for that matter.
- END_OF_FILE
- if test 4134 -ne `wc -c <'README'`; then
- echo shar: \"'README'\" unpacked with wrong size!
- fi
- # end of 'README'
- fi
- echo shar: End of archive 2 \(of 2\).
- cp /dev/null ark2isdone
- MISSING=""
- for I in 1 2 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked both archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-
-
-