;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; This is a Pilot Debugger script used to help in debugging the
; Net Library. It contains structure definitions for most of the
; Net Library structures.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Constants
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
var 	"netRcvPktQLen" 			#13
var 	"netNumCmdBlocks" 		#8
var 	"netMaxNumSockets"		#4
var 	"netMaxNetIFs"				#4
var	"netMaxNumPISockets"		#4

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Epilogue structures
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
typedef struct "timer"
	> MemPtr			"link"
	> UInt32			"expire"
	> MemPtr			"handler"
	> MemPtr			"cookie"
	typeend
	
typedef struct "packet"
	> packet			@"pkt_link"
	> MemPtr			"pkt_n"
	> UInt32			"pkt_tstamp"
	> UInt16			"pkt_flags"
	> UInt8Ptr		"pkt_buffer"
	> UInt16			"pkt_buflen"
	> UInt8Ptr		"pkt_data"
	> UInt16			"pkt_datalen"
	> UInt16			"opt_len"
	> MemPtr			"pkt_completion"
	> MemPtr			"pkt_private"
	> MemPtr			"pkt_rcv_info"
	typeend
typedef packet 	@"packetptr"


typedef struct "driver"
	> MemPtr			"init"
	> MemPtr			"send"
	> MemPtr			"ip_send"
	> MemPtr			"arp_send"
	> MemPtr			"device_ctl"
	> MemPtr			"close"
	> Char 			@"prefix"
	> Char 			@"name"
	> UInt16			"lnh"
	> UInt16			"lnt"
	> UInt16			"maxlen"
	> Int16				"type"
	> UInt16			"arp_hw_type"
	> MemPtr			"media_ctl"
	typeend
	
typedef struct "net_if" 
	> MemPtr			"link"
	> driver			@"driver"
	> Int16				"instance"
	> packet			@"inputq"
	> UInt16			"flags"
	> Char 			@"s_name"
	> UInt32			"ip_addr"
	> UInt32			"ip_mask"
	> UInt32			"ip_bcast"
	> MemPtr			"arp"
	> timer			"arp_tm"
	> Int16				"ha_len"
	> UInt8Ptr		"h_address"
	> MemPtr			"specific"
	> UInt16			"mtu"
	> UInt32			"speed"
	> UInt32			"status_tstamp"
	> UInt32			"ifInOctets"
	> UInt32			"ifInUcastPkts"
	> UInt32			"ifInNUcastPkts"
	> UInt32			"ifInDiscards"
	> UInt32			"ifInErrors"
	> UInt32			"ifInUnknownProtos"
	> UInt32			"ifOutOctets"
	> UInt32			"ifOutNUcastPkts"
	> UInt32			"ifOutDiscards"
	> UInt32			"ifOutErrors"
	> MemPtr			"ifSpecific"
	> MemPtr			"media_cookie"	
	typeend


; DNS Structures
typedef struct "dns_config"
	> MemPtr			"dns_transport"
	> UInt16			"n_servers"
	> MemPtr			"servers"
	> UInt16			"max_tries_per_server"
	> UInt32			"wait_for_buf_alloc"
	> UInt16			"max_buf_alloc_failures"
	> MemPtr			"search_path"
	> UInt32			"max_ttl"
	> MemPtr			"preferences"
	typeend
	
typedef struct "dns_server"
	> UInt32			"addr"
	typeend
	
typedef struct "dns_preference_list"
	> UInt32			"addr"
	> UInt32			"mask"
	typeend
	


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Command Block
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
typedef struct "NetLibCmdPBType" 
	> NetLibCmdPBType		@"nextP"			
	> UInt8 	 				"checkoutCount"
	
	> Boolean 				"done"
	> UInt32 				"callerTaskID"
	> UInt32 				"uniqueID"

	> UInt8			 		"cmd"
	> Err 					"result"
	> UInt8					"param"[#20] 	\-
	typeend
	
typedef NetLibCmdPBType	@"NetLibCmdPBPtr"

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  NetIOVec
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
typedef struct "NetIOVecType"
	> UInt8Ptr			"bufP"
	> UInt16				"bufLen"
	typeend
	
typedef	NetIOVecType	@"NetIOVecPtr"

typedef struct "NetIOParamType"
	> UInt8Ptr			"addrP"
	> UInt16				"addrLen"
	> NetIOVecPtr		"iov"
	> UInt16				"iovLen"
	> UInt8Ptr			"accessRights"
	> UInt16				"accessRightsLen"
	typeend
	

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  Socket
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
typedef struct "NetSocketLingerType"
	> Int16				"onOff"
	> Int16				"time"
	typeend

typedef struct "NetSocketType" 
	> UInt16	 			"rcvOpen-sendOpen-nonBlocking"
	> UInt16				"socketRef"
	> UInt8 				"type"
	> UInt8 				"filler"  \-
	> Err					"err"
	> NetSocketLingerType "linger" \-

	> MemPtr				"conn.tcbP_or_udpP"
	> NetLibCmdPBPtr	"conn.tcp.pendConnectCmdP"
	> UInt16				"conn.tcp.flags"
	> NetLibCmdPBPtr	"conn.tcp.pendAcceptCmdP"
	> MemPtr				"conn.tcp.acceptTcbP"
	> UInt16				"conn.tcp.remoteWindowSize"
	> UInt16				"conn.tcp.localWindowSize"

	> UInt16 				"rcvStart"
	> UInt16 				"rcvEnd"
	> packetptr			"rcvPacketP"[netRcvPktQLen]
	> UInt32				"rcvHostIPAddr"[netRcvPktQLen] \-
	> UInt16				"rcvHostPort"[netRcvPktQLen] \-
	
	> UInt16				"rcvUrgentPktOffset"
	> UInt32				"rcvUrgentByteOffset"
	
	> UInt32				"rcvBytesAdded"
	> UInt32				"rcvBytesRemoved"
	
	> Boolean 			"rcvClientBlocking"
	> UInt32 				"rcvClientTaskID"
	
	> UInt16 				"rcvMinSize"
	
	> MemPtr				"rcvRecordP"
	> NetIOVecType 	"rcvIOBuf" \-
	> NetIOVecPtr 		"rcvIOVP"
	> UInt16 				"rcvIOVLen"
	typeend
typedef NetSocketType	@"NetSocketPtr"
	





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Network Interface Info structure
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
typedef struct "NetIFInfoType" 
	> UInt32					"creator"
	> UInt16					"instance"
	> MemHandle				"codeH"
	> MemPtr					"procP"
	> net_if					@"netP"
	> UInt16					"cardNo"
	> LocalID				"dbID"
	typeend
typedef NetIFInfoType @"NetIFInfoPtr"

typedef struct "NetIFCallbacksType"
	> MemPtr					"ip_rcv"
	> MemPtr					"ip_advise_if_down"
	> MemPtr					"ip_advise_if_up"
	> MemPtr					"pkt_alloc"
	> MemPtr					"pkt_free"
	> MemPtr					"traceMsg"
	> MemPtr					"traceMsgPrintF"
	> MemPtr					"tm_init"
	> MemPtr					"tm_cancel"
	> MemPtr					"tm_set"
	> MemPtr					"netGiveTime"
	> MemPtr					"add_address"
	> MemPtr					"settingGet"
	> MemPtr					"settingSet"
	> MemPtr					"raw_rcv"
	> MemPtr					"setSocketErr"
	> MemPtr					"tracePkt"
	> MemPtr					"netSemReserve"
	> MemPtr					"netSemRelease"
	typeend
		

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Globals
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
typedef struct "NetGlobalsType" 
	> UInt32					"lockSemID"
	> UInt8 					"openCount"
	> UInt8					"flags"
	> MemPtr					"shadowGlobalsP"
	
	> UInt16 					"refNum"
	> Int32 					"mailboxID"
	> UInt32 					"netTaskID"
	> UInt32					"timerID"
	> MemPtr					"glueCallInHandler"
	
	> timer					"closeTimer" \-
	
	> UInt16 					"cmdPBsCheckedOut"
	> UInt32					"cmdPBUniqueID"
	> NetLibCmdPBPtr		"cmdPBHeadP"					
	> NetLibCmdPBType 	"cmdPB"[netNumCmdBlocks] \-
	
	> UInt16					"openSockets"
	> UInt16					"openRawIPSockets"
	> NetSocketPtr 		"socketP"[netMaxNumSockets]
	
	> UInt16					"piLibRefNum"[netMaxNumPISockets]
	
	> UInt16					"numNetIFs"
	> NetIFInfoType		"netIFInfo"[netMaxNetIFs] \-
	
	> UInt8					"connected"
	> UInt8					"filler"
	
	> MemPtr					"hostTableP"
	
	> UInt32					"traceBits"
	> UInt8					"traceRoll"
	> MemPtr					"traceBufP"
	> UInt16					"traceStart"
	> UInt16					"traceSize"
	
	> UInt16					"udpNextPort"
	
	> UInt16					"dnsFlags"
	> dns_config			"dnsConfig" \-
	> dns_server			"dnsServers"[4] \-
	> dns_preference_list "dnsPreferences" \-
	> MemPtr					"dnsSearchPath"[3] \-
	> Char					"dnsDomainName"[#256] \-
	
	> UInt16					"prefsDBCardNo"
	> LocalID				"prefsDBID"
	
	> UInt32					"tcpSendSpaceAvailable"
	
	> NetIFCallbacksType	"ifCallbacks" \-
	
	> UInt16					"ifThreads"
	
	> MemPtr					"cmdPBCheckoutP"
	> MemPtr					"cmdPBCheckinP"
	> MemPtr					"globalsLockP"
	> MemPtr					"globalsUnlockP"
	> MemPtr					"ifGetCodePtrP"
	> MemPtr					"ifGetFromPrefsP"
	> MemPtr					"ifAttachToPrefsP"
	> MemPtr					"ifDetachFromPrefsP"
	> MemPtr					"ifSettingGetP"
	> MemPtr					"ifSettingSetP"
	> MemPtr					"settingGetP"
	> MemPtr					"settingSetP"
	> MemPtr					"traceInitP"
	> MemPtr					"traceDoneP"
	> MemPtr					"traceEventStoreP"
	> MemPtr					"traceEventGetP"
	> MemPtr					"traceMsgPrintF"
	
	typeend
typedef NetGlobalsType	@"NetGlobalsPtr"

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SLIP Globals
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
typedef struct "SlipGlobalsType" 
	> UInt16					"serWakes"
	> UInt16					"serRefNum"
	> Boolean				"serOpen"
	> UInt32					"emTaskID"
	> MemPtr					"callbacksP"
	> UInt8					"escend"[2]
	> UInt8					"escesc"[2]
	> Boolean				"escaped"
	> packet					@"rcvPktP"
	> UInt8Ptr				"serRcvBufP"
	typeend
	

;################################################################
; Macros
;##############################################################
var 	"GSysLibTableP" 	00000140
var	"GSysLibNet"		00000272

;This alias assumes that each lib entry entry is 8 bytes. 
; It gets the Net Globals pointer from the second long word in
; the entry for the Net Library.
alias "NetGlobals" 		"dm @(@GSysLibTableP+(@.w(GSysLibNet))*10+4) NetGlobalsType"





