[comp.protocols.appletalk] kboot part 2/3

bobs@randvax.UUCP (Rober Schwartzkopf) (01/30/91)

#! /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 3)."
# Contents:  aarpd.8 kboot.8 aarpd.h appletalk.h config.h kbox.h
#   patchlevel.h Makefile README
# Wrapped by bobs@chumley on Tue Jan 29 17:41:52 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
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'\" \(3549 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 [-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 \-m Fastpath
XRead and print various things about the specified Fastpath.
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 \-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.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
Xwedges a Fastpath if KSTAR 8.0 is downloaded to it.  If someone can
Xfigure out what I'm doing wrong, please send email to bobs@rand.org.
X.LP
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.
END_OF_FILE
if test 3549 -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'\" \(4957 characters\)
sed "s/^X//" >'kbox.h' <<'END_OF_FILE'
X/*
X * $Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/kbox.h,v 1.1 91/01/29 17:37:47 root Exp $
X *
X * $Log:	kbox.h,v $
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  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#define send_whereis(kp)	send_gen (kp, X_WHEREIS, 5)
X#define send_where2(kp)		send_gen (kp, X_WHERE2, 5)
X#define send_rcsid(kp)		send_gen (kp, X_RCSID, 5)
X#define send_version(kp)	send_gen (kp, X_VERSION, 5)
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;
END_OF_FILE
if test 4957 -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'\" \(221 characters\)
sed "s/^X//" >'patchlevel.h' <<'END_OF_FILE'
X/*
X * $Header: /tmp_mnt/home/src/rand/etc/kboot/RCS/patchlevel.h,v 1.1 91/01/29 17:37:51 root Exp $
X *
X * $Log:	patchlevel.h,v $
X * Revision 1.1  91/01/29  17:37:51  root
X * Initial revision
X * 
X */
X
X#define PATCHLEVEL	1
END_OF_FILE
if test 221 -ne `wc -c <'patchlevel.h'`; then
    echo shar: \"'patchlevel.h'\" unpacked with wrong size!
fi
# end of 'patchlevel.h'
fi
if test -f 'Makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(1011 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
XSRCS	= aarpd.c cmd.c getaa.c icmp.c kboot.c nitlib.c
XINCS1	= aarpd.h appletalk.h config.h kbox.h patchlevel.h
XINCS2	= cmdidx.h cmdmacro.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:	$(SRCS) $(INCS1) $(INCS2) $(MANS) Makefile README
X	shar -n1 -e3 $(SRCS) > kboot1.shar
X	shar -n2 -e3 $(MANS) $(INCS1) Makefile README > kboot2.shar
X	shar -n3 -e3 $(INCS2) > kboot3.shar
X
Xaarpd.o:	appletalk.h aarpd.h config.h patchlevel.h
Xkboot.o:	appletalk.h kbox.h cmdidx.h cmdmacro.h config.h patchlevel.h
Xcmd.o:		appletalk.h kbox.h cmdidx.h cmdmacro.h config.h
Xicmp.o:		kbox.h config.h
Xnitlib.o:	config.h
END_OF_FILE
if test 1011 -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 3\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 3 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