//Pup0.decl -- Network-independent Pup level 0 declarations
// Copyright Xerox Corporation 1979, 1980

//	Last modified March 9, 1980  5:16 PM by Taft

get "pupparams.decl"


//----------------------------------------------------------------------------
manifest
//----------------------------------------------------------------------------
[
netTypeEther = 1	//Nova or Alto
netTypeMCA = 2		//Data General type 4038
netTypeArpa = 3		//Parc version
netTypeSLA = 4		//Data General type 4073
netTypePR = 5		//Packet Radio Network
]

//----------------------------------------------------------------------------
structure Port:
//----------------------------------------------------------------------------
[
net byte
host byte
socket↑1,2 word
]
manifest lenPort = size Port/16


//----------------------------------------------------------------------------
structure Pup:  //basic raw pup
//----------------------------------------------------------------------------
[
length word
transport byte =
   [
   hopCnt bit 4
   blank bit 4
   ]
type byte
id↑1,2 word 
dPort: @Port
sPort: @Port
bytes↑1,532 byte = words↑1,266 word  //actual length varies
//checksum word  //for documentation only--actual position varies
]
manifest pupOvBytes = 22  // Pup overhead (header + checksum)
manifest pupOvWords = pupOvBytes/2


//----------------------------------------------------------------------------
structure PBI:  //packet buffer item
//----------------------------------------------------------------------------
[
link word		//queue link
queue word		//where to put it when done (output only)
socket word		//owning socket
ndb word		//pointer to ndb for this packet
status word =
   [
   usage bit		//true if input PBI, false if output
   allNets bit		//PBI to be sent on all connected nets
   bypassZeroNet bit	//don't send if net identity unknown
   blank bit 13
   ]
timer word		//retransmission timer (used by BSP)
packetLength word	//length of packet in words in PBI
encapsulation word 2
pup: @Pup
]
manifest lenPBIOverhead = offset PBI.pup/16

//----------------------------------------------------------------------------
structure PF:	//packet filter
//----------------------------------------------------------------------------
[
link word
predicate word		//do you want this packet?
queue word		//where to queue it if you do
]
manifest lenPF = size PF/16

//----------------------------------------------------------------------------
structure NDB:  //network data block (net-independent portion)
//----------------------------------------------------------------------------
[
link word
localNet word		//local net number. zero if unknown
localHost word		//local host number
netType byte		//kind of network
deviceNum byte		//instance of type networkType
numGPBI word		//pbis allowed to gateway for this net
pfQ:			//queue of packet filters
   [
   head word
   tail word
   ]
pupPF: @PF		//Pup package PF is wired in
encapsulatePup word	//procedure to encapsulate a Pup
level0Transmit word	//procedure to send a pbi
level0Stats word	//procedure to access interface statistics
destroy word		//procedure to destroy NDB and associated driver
]
manifest lenNDB = size NDB/16