/*Pup.h -- All-level Pup declarations
Last modified March 9, 1980 5:16 PM by Taft
C version modified July 9, 1982 2:17 PM by Swinehart
November 13, 1982 4:21 PM by Stewart
requires #include <Env.h> and <Queue.h>
November 23, 1982 9:58 AM by Stewart, added maxNetworks
November 28, 1982 5:31 PM by Stewart, formatting
February 10, 1983 3:39 PM by Stewart, Route changed
July 7, 1983 10:52 AM by Stewart, Route changed
/*----------------------------------------------------------------------- */
#define defaultPupDataBytes 230
/* Total bytes, including header & encapsulation, = 256 */
#define typePup 02
/* 01000, swapped */
#define ecNoEthernetInterface (Swab(2230))
#define ecBadEtherStatus (Swab(2231))
#define ecZeroHostAddress (Swab(2232))
/*----------------------------------------------------------------------- */
/*----------------------------------------------------------------------- */
struct PupSocket { /* Host-relative "connection" ID */
/*----------------------------------------------------------------------- */
word LS;
word ms;
};
#define lenPupSocket (sizeof (struct PupSocket)/2)
#define maxPupSockets 10
/*----------------------------------------------------------------------- */
struct Port {
/*----------------------------------------------------------------------- */
byte net;
byte host;
struct PupSocket socket;
};
#define lenPort (sizeof(struct Port)/2)
/*----------------------------------------------------------------------- */
union PupData {
/*----------------------------------------------------------------------- */
word words[1/*266*/]; /* actual length varies; yours probably lower */
byte bytes [2/*defaultDataBytes*/];
};
/*----------------------------------------------------------------------- */
struct Pup { /* basic raw pup */
/*----------------------------------------------------------------------- */
word length;
byte transport; /* = { bit hopCnt 4; bit blank 4; }; */
byte type;
word id[2];
struct Port dPort;
struct Port sPort;
union PupData data;
word checksum;
}; /* for documentation only--actual position varies */
#define pupOvBytes 22
#define pupOvWords (pupOvBytes/2)
/* Pup overhead (header + checksum) */
/*----------------------------------------------------------------------- */
struct EtherEncapsulation { /* Ethernet specific header */
/*----------------------------------------------------------------------- */
byte dst;
byte src;
int type;
struct Pup pup;
};
#define lenEtherEncapsulation 2
/*----------------------------------------------------------------------- */
struct PBI { /*packet buffer item */
/* ---------------------------------------------------------------------------- */
struct PBI *link; /*queue link */
struct Queue *queue; /* where to put packet after transmission */
int clientWord; /* Give client a value in each PBI */
struct Pup *pup; /* encapsulation precedes Pup */
};
#define lenPBIOverhead 4
/* one or the other of PortProc and q will be used */
struct SocketEntry {
struct Port port;
int *PortProc;
struct Queue *q;
};
#define lenSocketEntry (sizeof (struct SocketEntry)/2)
struct Route {
byte host; /* Gateway host to reach target net */
byte hops; /* hops to reach target net , FF if unknown */
byte age; /* age of entry in seconds */
};
#define lenRoute (sizeof(struct Route))
#define maxNetworks 256
/* Error protocol */
#define typeError 4
/* Sys.errors codes */
#define ecNoSuchSocket (Swab(2220))
#define ecBadAllocation (Swab(2221))
#define ecNoNetworkInterface (Swab(2222))
#define ecPupRTFull (Swab(2223))