boot3/OS/NetBoot/ATBootEqu.h
Elliot Nunn 5b0f0cc134 Bring in CubeE sources
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included.

The Tools directory, containing mostly junk, is also excluded.
2017-12-26 10:02:57 +08:00

256 lines
9.3 KiB
C

/*
File: ATBootEqu.h
Contains: C equates for the atboot driver and protocol in general
Written by: Patrick Dyson
Copyright: © 1989-1990 by Apple Computer, Inc., all rights reserved.
Change History (most recent first):
<5> 3/9/90 PWD Added support for no guest boot, changed wildcard match string,
grew driver globals to include number of failed attempts and the
last big error.
<4> 2/20/90 PWD fixed equates for boot blocks, allow arbitrary sized user record
replies that pass through to the downloaded code.
<3> 1/25/90 PWD fixed equates for boot blocks.
<1.1> 12/12/89 PWD Added support for self-authenticating images
<1.0> 10/30/89 PWD Adding to EASE
To Do:
*/
/*EASE$$$ READ ONLY COPY of file ÒATBootEqu.hÓ
** 1.1 PWD 12/12/1989 Added support for self-authenticating images
** 1.0 PWD 10/30/1989 Adding to EASE
** END EASE MODIFICATION HISTORY */
#include <BootDefines.h>
#define BOOTDDPTYPE 10
#define BOOTSOCKET 10
#define userNameLength 34 /* bytes in a user name */
/* round-trip smoothing */
#define SMOOTHING_FACTOR 4
/* image reception errors */
#define IMAGE_TOO_BIG -2 /* not enough memory to receive image */
#define NOT_FOUND -3 /* a valid server didn't respond in the timeout */
#define TIMED_OUT -4 /* image didn't make it in time */
#define SIGNATURE_BAD -5 /* image signature didn't match pram */
#define DS_ERROR -6 /* internal error (nil pointer somewhere) */
/* signature sizes */
#define HASH_SIZE 16 /* output of hash routine in bytes */
#define STORED_SIZE 8 /* our stored hash value */
#define STORED_WILDCARD 'PWD ' /* matches anything... */
#define GUEST_BOOTING 0x40 // no guest boot if 0
#define CHECK_USER_RECORD 0x20 // XOR in hash of user record if 1
/* buffer sizes and maximum number of servers */
#define INVALID_ADDR -1L /* node FF is invalid... */
#define INVALID_IMAGE 0xFFFF /* a bogus image id */
#define MAX_SERVERS 2 /* how many nbp can look for... */
/* space for name, addr, and nbp internal */
#define MAX_NBP_BUFFER MAX_SERVERS*(sizeof(EntityName)+9)
/* space for iopb, wds, packetptr */
#define MAX_LOOKUP_FAILURES 5 // NOT_FOUND errors tolerated
#define IS_INVALID(a) ((a.aNet == 0xFFFF) && (a.aNode == 0xFF) && (a.aSocket == 0xFF))
#define SET_INVALID(a) a.aNet = 0xFFFF; \
a.aNode = 0xFF; \
a.aSocket = 0xFF;
/*
* Errors returned by the server.
*/
#define ERROR_BASE -6000
#define SERVER_ERROR (ERROR_BASE - 1)
/*
* Offsets within a received packet
*/
typedef struct {
unsigned char packetType; /* The command number */
unsigned char packetVersion; /* Protocol version number */
unsigned short packetImage; /* The image this block belongs to */
unsigned short packetBlockNo; /* The block of the image (starts with 1) */
unsigned char packetData[512];/* the data portion of the packet */
} BootBlock,*BootBlockPtr;
// This defines a user record.
// Some of these fields can be determined on the fly by the boot server,
// while others are stored on disk by the boot server
typedef struct
{
char serverName[serverNameLength]; // server name to boot off of
char serverZone[zoneNameLength]; // and the zone it lives in
char serverVol[volNameLength]; // the volume name
short serverAuthMeth; // authentication method to use (none, clear txt, rand)
unsigned long sharedSysDirID; // dir id of shared system folder
unsigned long userDirID; // dir id of the user's private system folder
unsigned long finderInfo[8]; // blessed folder dir id, startup folder dir id etc...
unsigned char bootBlocks[138]; // see Inside Mac V-135
unsigned short bootFlag; // server based flags
unsigned char pad[306-18]; // <pd 5>pad to ddpMaxData
}userRecord;
// This defines the user record reply sent to workstations.
typedef struct
{
unsigned char Command; /* record or image request command word */
unsigned char pversion; /* version of boot protocol spoken by requestor */
unsigned short osID; /* type and version of os */
unsigned int userData; /* time stamp goes here */
unsigned short blockSize; /* size of blocks we will send */
unsigned short imageID; /* image ID */
short result; /* error codes */
unsigned int imageSize; /* size of image in blocks */
userRecord userRec; /* tell user where to go */
}BootPktRply;
typedef struct
{
unsigned short imageID; /* */
unsigned char section; /* "section" of the image the bitmap refers to */
unsigned char flags; /* ??? */
unsigned short replyDelay;
unsigned char bitmap[512]; /* bitmap of the section of the image requested */
}bir; // Boot Image Req
// This defines the structure of packets received from
// workstations.
typedef struct
{
unsigned char Command; /* record or image request command word */
unsigned char pversion; /* version of boot protocol spoken by requestor */
unsigned bir bir; /* on request type (record or image request) */
}requestBuf;
typedef struct {
short bogus; /* this tuple timed out or returned error */
int time_sent; /* tickcount when this server was sent a packet */
AddrBlock server_addr /* where is this server? */
} server_tuple;
typedef struct {
unsigned char type; /* packet type */
unsigned char version; /* protocol version */
unsigned short machineID; /* our machineID */
unsigned int timestamp; /* when this was sent */
char userName[userNameLength]; /* key to finding their record */
} UserRecordRequest;
typedef struct
{
unsigned char Command; /* type of request this is */
unsigned char pversion; /* version of this protocol */
unsigned short imageID; /* ? */
unsigned short result; /* error field */
}ImageDone;
typedef struct
{
unsigned short osID; /* type and version of os */
unsigned long userData; /* time stamp goes here */
char userName[userNameLength]; /* key to finding thier record */
userRecord userRec; /* the user's "boot blocks" */
}uru; // user record update request
typedef struct {
unsigned short bootImageID; /* set <> -1 if we know our image */
unsigned short machineID; /* our machine ID */
Ptr bitmapBase; /* ptr to receive bitmap */
unsigned short lastBlockNo; /* number of blocks to receive */
unsigned short packetsReceived; /* how many packets have we gotten */
Ptr imageBuffer; /* ptr to image buffer */
unsigned short blockSize; /* size of single blocks in bytes */
int trafficTimer; /* Time when the last packet from our server for
our image arrived (ticks) */
int progressTimer; /* Time that the last NEW block for our image arrived */
int retransThreshold; /* Time between retransmissions (4*roundtrip) */
short roundTrip; /* Time to base retransmissions on */
short backOff; /* multiplier for retransmission */
int lastRetransmission; /* time of last transmission */
AddrBlock server_addr; /* set to our server address (<> -1) */
server_tuple *tuple_table; /* the tuple table of server candidates */
union {
UserRecordRequest userRecord;
BootPktRply userReply;
char readPacketArea[586]; /* socket listener read area */
} u ;
} SocketListenerGlobals,*SktLsnGPtr;
typedef struct {
MPPParamBlock MPPpb; /* a param block to queue this up with */
WDSElement wds[3]; /* the write data structure that describes this */
UserRecordRequest record; /* the data to send (packet to pass to DDP) */
} RequestPacket;
typedef struct {
MPPParamBlock MPPpb; /* a param block to queue this up with */
WDSElement wds[3]; /* the write data structure that describes this */
requestBuf record; /* the data to send (packet to pass to DDP) */
} ImageRequestPacket;
typedef struct {
char myEntry[50]; /* what to look for */
Ptr nbpBuffer; /* where to put it */
short errCode; /* what happened */
MPPParamBlock myABRecord; /* pb to ask with */
} nbpLookupRecord;
typedef struct {
short netBootRefNum; // refnum of the .netBoot driver (0 if not open)
short error; // last error recorded (from protocol or signature)
Ptr netimageBuffer; // place to put the downloaded image
unsigned int netImageSignature[4]; // the downloaded image signature (generated)
AddrBlock netServerAddr; // source server address
BootPktRply ur; // the user record returned by the server
Ptr StartGlobals; // a place for the start code to store things
bootVars *pram; // the pram record, read in
short numAttempts; // number of failed attempts
short bigError; // the error that makes us net boot
} DGlobals;
typedef struct {
char privates[76];
long randSeed;
BitMap screenBits;
Cursor arrow;
Pattern dkGray;
Pattern ltGray;
Pattern gray;
Pattern black;
Pattern white;
GrafPtr thePort;
GrafPtr globs;
GrafPort ourPort; // place to stash our port when we open it
short curIcon;
} GrafWorld;
extern pascal OSErr ATPBOpen(ParamBlockRec *pb,Boolean aSync); /* from ATBootUtil.a */
typedef short (*j_code)( short command,
DGlobals *g,
int **var1,
int **var2);
extern int myGetA5(); /* return A5 */
extern void mySetA5(int oldA5); /* set A5 to the passed value */
extern void go_rom(Ptr p);
extern void do_erase();
#define hashSize 4
#define maxSBoxCount 8
#define errorFile 2 /* normally set up for standard error */
#define NUMTIMES 100
typedef unsigned long int sBox[256];
typedef unsigned long int rotatedsBox[4][8][256];
typedef unsigned long int sBoxs[8][256];