Google
 

Trailing-Edge - PDP-10 Archives - TOPS-20_V6.1_DECnetSrc_7-23-85 - mcb/nsp/nspdata.req
There is 1 other file named nspdata.req in the archive. Click here to see a list.
!                    COPYRIGHT (c) 1980, 1981, 1982
!                    DIGITAL EQUIPMENT CORPORATION
!                        Maynard, Massachusetts
!
!     This software is furnished under a license and may  be  used
!     and copied only in accordance with the terms of such license
!     and with the inclusion of the above copyright notice.   This
!     software  or any other copies thereof may not be provided or
!     otherwise made available to any other person.  No  title  to
!     and ownership of the software is hereby transferred.
!
!     The information  in  this  software  is  subject  to  change
!     without  notice  and should not be construed as a commitment
!     by DIGITAL EQUIPMENT CORPORATION.
!
!     DIGITAL assumes no responsibility for the use or reliability
!     of  its  software  on  equipment  which  is  not supplied by
!     DIGITAL.
!
!++
!
!macros and other good stuff
!
!--
!

literal
	NSPbom = %O'40',
	NSPeom = %O'100';

$field
	LONG_WORD =
	set
	LOW = [$integer],
	HI = [$integer]
	tes;

compiletime
	$nsp$length = $field_set_size;

macro
	$long_word =
		$sub_block(%expand %number ($nsp$length))% ;

undeclare
	$nsp$length;

!+
! Macro to conditionally align addresses for 36-bit compilation
!-

macro
    CMQPT$( queue, ccb) =
	begin
	ccb = .queue;
	queue = ..ccb;
	if .ccb eql 0 then false else true
	end%;

macro
    CMP_LSS( a, b) =
	(2048 lssu ((((b) + 2048) - (a)) and %o'7777'))%;
macro
    CMP_LEQ( a, b) =
	(2048 lequ ((((b) + 2048) - (a)) and %o'7777'))%;
macro
    CMP_EQL( a, b) =
	(0 eqlu (((b) - (a)) and %o'7777'))%;

macro
    CMP_NEQ( a, b) =
	(0 nequ (((b) - (a)) and %o'7777'))%;

!
!
!++
!
!field mappings for Network Services Layer data bases
!
!--
!
!

$field
	NSP_FIELDS =
	set
	NSPtimer =  [$short_integer],	!short timer service word
	%if %bliss (bliss36) %then $align (fullword) %fi
	NSPself = [$short_integer],	!node addr this NSP
	%if %bliss (bliss36) %then $align (fullword) %fi
	NSPact_tim = [$short_integer],		!NSP's inactivity timer value
	%if %bliss (bliss36) %then $align (fullword) %fi
	NSPdelay = [$byte],		!NSP's delay factor
	%if %bliss (bliss36) %then $align (fullword) %fi
	NSPweight = [$byte],		!round trip delay factor
	%if %bliss (bliss36) %then $align (fullword) %fi
	NSPretrans = [$short_integer],	!retransmission threshold
	%if %bliss (bliss36) %then $align (fullword) %fi
	NSPmax = [$short_integer],	!number of ports other than OPEN
	%if %bliss (bliss36) %then $align (fullword) %fi

	NSPports = [$addresx],		!address of table of port descriptors
	$overlay(NSPports)
	BIASports = [$addresx],
	$continue
	ADDRports = [$addresx],

	%if %bliss (bliss36) %then $align (fullword) %fi
	NSPtotal = [$short_integer],	!total ports NSP can handle
	%if %bliss (bliss36) %then $align (fullword) %fi
	NSPt_rsv = [$short_integer],	!number of NSP reserve ports

	%if %bliss (bliss36) %then $align (fullword) %fi
	NSPreserved = [$addresx],	!address of reserved data base
	$overlay(NSPreserved)
	BIASresv = [$addresx],
	$continue
	ADDRresv = [$addresx],

	NSPnodes = [$addresx],		!address of table of node descriptors
	$overlay(NSPnodes)
	BIASnodes = [$addresx],
	$continue
	ADDRnodes = [$addresx],

	%if %bliss (bliss36) %then $align (fullword) %fi
	NSPevent_buf = [$pointer],	!byte pointer to event buffer
	NSPt_nodes = [$short_integer],	!total nodes NSP can handle
	NSPnxt_port = [$short_integer],	!next port-id for resource check
	NSPbuf = [$short_integer],	!NSP's segment size
	$overlay(NSPbuf)
	L_NSPbuf = [$byte],
	H_NSPbuf = [$byte],
	$continue
	NSPsc_pix = [$byte],		!Session Control's process index
	NSPns0_pix = [$byte],		!NSP's process 0 index
	NSPns1_pix = [$byte],		!NSP's process 1 index
	NSPns2_pix = [$byte],		!NSP's process 2 index
	NSPxpt_pix = [$byte],		!Transport's process index
	%if %bliss (bliss36) %then $align (fullword) %fi
	NSPversion = [$byte],		!NSP's version number
	$align(fullword)
	MSGFLG = [$byte],
	$overlay(MSGFLG)
	fill1 = [$bits(2)],
	TYPE = [$bits(2)],
	SUBTYPE = [$bits(3)],
	$continue
	L_DSTADDR = [$byte],
	H_DSTADDR = [$byte],
	L_SRCADDR = [$byte],
	H_SRCADDR = [$byte],
	LSFLAGS = [$byte],
	$overlay(LSFLAGS)
	FCMOD = [$bits(2)],
	FCVALINT = [$bits(2)],
	$align(fullword)
	ACKNUM = [$short_integer],
	$overlay(ACKNUM)
	NUMBER = [$bits(12)],
	QUAL = [$bits(3)],
	Q_FLG = [$bit],
	$continue
	$align(fullword)
	SEGNUM = [$short_integer],
	$align(fullword)
	REASON = [$short_integer],
	SEGSIZE = [$short_integer],
	SERVICES = [$byte],
	$overlay(SERVICES)
	fill5 = [$bits(2)],
	FCOPT = [$bits(2)],
	$continue
	FCVAL = [$byte],
	INFO = [$byte],
	$overlay(INFO)
	VER = [$bits(2)],
	NSPrunning = [$bit] 		!NSP's state
	tes;

literal
	NSP_size = $field_set_size;

!
!
!
!
!++
!
!field mappings for Node Descriptors
!
!--
!
!

$field
	NODE_FIELDS =
	set
	NDaddr = [$integer],		!node address 
	NDactive = [$integer],		!number of ports to this node
        NDtime_zeroed = [$time],        !time zeroed
	NDb_rcv = [$long_word],		!user bytes received from this node
	NDb_xmt = [$long_word],		!user bytes transmitted to this node
	NDm_rcv = [$long_word],		!NSP messages reveived
	NDm_xmt = [$long_word],		!NSP messages transmitted
	NDc_rcv = [$integer],		!CI's received
	NDc_xmt = [$integer],		!CI's transmitted
	NDc_rej = [$integer],		!No-Resource messages sent to this node
	NDtimeout = [$integer],		!number of NSP message retransmissions
	NDdelay = [$integer]		!round trip delay in seconds
	tes;

literal
	ND_size = $field_set_size;
!
!
!++
!
!field mappings for Session Control Port Descriptors
!
!--
!
!

$field
	some_fields =
	set
	PORTstate = [$tiny_integer],		!state of port
	$overlay(PORTstate)
	MSGtyp = [$tiny_integer],
	$continue
	CHANNEL = [$byte],			!channel to transmit on
	NODErem = [$short_integer],		!remote node address
	ADDRloc = [$short_integer],		!local link address
	$overlay(ADDRloc)
	PID = [$byte],
	ADDran = [$byte],
	$continue
	ADDRrem = [$short_integer],		!remote link address
	$overlay(ADDRrem)
	L_rem_addr = [$byte],
	H_rem_addr = [$byte],
	$continue
	NODElnk = [$addresx],		!address of node descriptor to use
	SOME_END = [$sub_block(0)]
	tes;

literal
	RDB_size = $field_set_size;

field
	more_fields =
	set
	$overlay(SOME_END)
	TIMERdat = [$short_integer],		!Data Segment timer
	$continue
	TIMERoth = [$short_integer],		!Other Data timer
	TIMERcon = [$short_integer],		!connect timer
	$align( fullword)
	NUMdat = [$short_integer],	!next segment number to transmit
	$align( fullword)
	NUMsent = [$short_integer],	!highest segment transmitted
	$align( fullword)
	NUMoth = [$short_integer],	!next Other Data msg to transmit
	$align( fullword)
	NUMhigh = [$short_integer],	!highest segment number from SC
	$align( fullword)
	ACKdat_xmt = [$short_integer],	!# last Data ACK sent
	$align( fullword)
	ACKoth_xmt = [$short_integer],	!# last Other Data ACK sent
	$align( fullword)
	ACKrcv_dat = [$short_integer],	!# last Data ACK received
	$align( fullword)
	TIMERinact = [$byte],		!inactivity timer
	FLOWdat_rem = [$byte],		!data permission count
	FLOWint_rem = [$byte],		!interrupt permission count
	FLOWloc_typ = [$bits(2)],	!flow control type
	FLOWsw_rem = [$bit],		!send/no-send switch
	FLOWtyp_rem = [$bits(2)],	!remote flow control type
	FLAGdat_ack = [$bit],		!send Data ACK flag
	FLAGoth_ack = [$bit],		!send Other ACK flag
	FLAGsnd_dc = [$bit],		!DC message to send flag
	FLAGinuse = [$bit],		!port in use by SC flag
	FLAGnew_msg = [$bit],		!complete message has been sent flag
	VERSIONrem = [$bits(2)],	!remote version number
	CONFIDENCE = [$bit],		!confidence variable
	FLAGseg = [$bit],		!segmentation flag
	$align(fullword)
	BUFFsync_dsc = [$addresx],	!holding spot for DI CCB's
	BUFFrcv_int = [$addresx],	!addr of Interrupt msg needing CCB
	BUFFctl = [$addresx],		!addr of stalled control msg CCB
	COUNTdat_retrans = [$byte],	!number of Data retransmissions
	COUNToth_retrans = [$byte],	!number of Other retransmissions
	COUNTres = [$integer],		!number of CCB's held by this port
	COUNTloc_int = [$short_integer],!Interrupt permissions outstanding
	DELAYmsg_num = [$short_integer],	!segment being timed
	$align( fullword)
	DELAYstr_tim = [$short_integer],	!round trip delay start time
	OTHstate = [$byte],		!state of Other sub-channel
	OTHtyp = [$byte],		!Other message being sent
	DATres = [$addresx],		!addr of stalled data queue head
	OTHres = [$addresx],		!addr of stalled other queue head
	SIZEseg = [$short_integer],		!seg size for transmission
	$overlay(SIZEseg)
	L_SIZEseg = [$byte],
	H_SIZEseg = [$byte],
	$continue
	MSG_chain = [$addresx],		!current CCB being segmented
	INT_queue = [$addresx],		!data message queue
		$overlay(INT_queue)
		INThead = [$addresx],
		$continue
		INTtail = [$addresx],
	MSG_queue = [$addresx],		!data message queue
		$overlay(MSG_queue)
		MSGhead = [$addresx],
		$continue
		MSGtail = [$addresx],
	INTR_queue = [$addresx],	!Interrupt request queue
		$overlay(INTR_queue)
		INTRhead = [$addresx],
		$continue
		INTRtail = [$addresx],
	DATR_queue = [$addresx],	!Data request queue
		$overlay(DATR_queue)
		DATRhead = [$addresx],
		$continue
		DATRtail = [$addresx],
	ACK_queue = [$addresx],		!waiting to be ACK'ed queue
		$overlay(ACK_queue)
		ACKhead = [$addresx],
		$continue
		ACKtail = [$addresx],
	OTHack_queue = [$addresx],	!Other Data waiting to be ACK'ed
		$overlay(OTHack_queue)
		OTHhead = [$addresx],
		$continue
		OTHtail = [$addresx],
	REAS_PTR = [$addresx],		!reassembly message pointer
	BUFF_queue = [$addresx],	!queue of receive buffers
		$overlay(BUFF_queue)
		BUFFhead = [$addresx],
		$continue
		BUFFtail = [$addresx],
	RCVmsg_queue = [$addresx],	!queue of stalled receives
		$overlay(RCVmsg_queue)
		RCVhead = [$addresx],
		$continue
		RCVtail = [$addresx]
	tes;

literal
	PDB_size = $field_set_size;

macro
	PORT_fields = some_fields, more_fields%;

!
!++
!
!

literal
	False = (1 eql 0),
	True = (1 eql 1),
	V3_1 = 1,
	V3_2 = 0,
	FLOWnone = 0,
	CI_SIZE = 9,
	CC_SIZE = 9,
	CA_SIZE = 3,
	DI_SIZE = 5,
	FLOWseg = 1,
	FLOWmsg = 2,
	FLOWrsv = 3,
	OTHready = 0,
	OTHsent = 1,
	OTHtimeout = 2,
	OTHinterrupt = 1,
	OTHirequest = 2,
	OTHdrequest = 4,
	FLG_BOM = %O'40',
	FLG_EOM = %O'100',
	FLG_BEOM = %O'140',
	FLG_NBEOM = 0,
	FLG_CI = %O'30',
	FLG_CC = %O'50',
	FLG_CA = %O'44',
	FLG_DI = %O'70',
	FLG_DC = %O'110',
	FLG_REQ = %O'20',
	FLG_INT = %O'60',
	FLG_DAT_ACK = %O'4',
	FLG_OTH_ACK = %O'24',
	FLG_NOP = %O'10',
	FC_SEND = %O'2',
	FC_DONT = %O'1',
	FC_NCHG = %O'0',
	FC_DATA = %O'0',
	FC_INTERRUPT = %O'1',
	LS_RSV = %O'2',
	Q_ACK = 0,
	Q_NAK = 1,
	N_RES = -2,
	N_LNK = -1,
	MSG_NONE = -3,
	hdb_size = 12,
	NSP_class_event = 3,
	evb_size = 40,
	invmsg = 0,
	invflw = 1,
	dbruse = 2;


macro	PUT2BYTES( val, ptr) =
	begin
	local temp;
	temp = val;
	ch$wchar_a( .temp<0,8>, ptr);
	ch$wchar_a( .temp<8,8>, ptr);
	end%;

macro	GET2BYTES( ptr) =
	begin
	local temp;
	temp<0,8> = ch$rchar_a( ptr);
	temp<8,8> = ch$rchar_a( ptr);
	.temp
	end%;

structure
    BYTE_VECTOR [I; N] =
    %if %bliss (bliss16)
    %then
	[N] (BYTE_VECTOR + I)<0, 8>
    %fi
    %if %bliss (bliss36)
    %then
	[N/4] (BYTE_VECTOR + I/4)<(I mod 4)*9, 9>
    %fi;

bind SC = %if %bliss(bliss36)
	%then %rad50_10'SC'
	%else %rad50_11'SC'
	%fi;
bind NSP = %if %bliss(bliss36)
	%then %rad50_10'NSP'
	%else %rad50_11'NSP'
	%fi;
bind XPT = %if %bliss(bliss36)
	%then %rad50_10'XPT'
	%else %rad50_11'XPT'
	%fi;

bind XPE = %if %bliss(bliss36)
	%then %rad50_10'XPE'
	%else %rad50_11'XPE'
	%fi;

bind NS1 = %if %bliss(bliss36)
	%then %rad50_10'NS1'
	%else %rad50_11'NS1'
	%fi;

bind NS2 = %if %bliss(bliss36)
	%then %rad50_10'NS2'
	%else %rad50_11'NS2'
	%fi;

DECLARE_SEVERITY( NSP, SEVERE, INFO);

$NSP_SEVERE( NSP$_ERR, ' CE_ERR from Transport')
$NSP_SEVERE( NSP$_NTE, ' CE_NTE from Transport')
$NSP_SEVERE( NSP$_RNG, ' Dispatch out of range')
$NSP_SEVERE( NSP$_DSP, ' Illegial dispatch')
$NSP_SEVERE( NSP$_ICE, ' NSP Internal Confusion Error')


$NSP_INFO( NSP$_MSG, 'Invalid received msg')
$NSP_INFO( NSP$_RTE, 'Transport Congestion Rejection')
$NSP_INFO( NSP$_RUS, 'Node Data Base Reused')
$NSP_INFO( NSP$_CFN, 'Confidence has gone false')

! End of [NSPDATA]