Google
 

Trailing-Edge - PDP-10 Archives - BB-R598A-RM_1983 - swskit-v3/listings/xpt/xpefwd.list
There are no other files named xpefwd.list in the archive.
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page   1
								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (1)

;	  0001	module XPEFWD	(
;	  0002			IDENT = 'X01150'
;	  0003			) =
;	  0004	begin
;	  0005	
;	  0006	!
;	  0007	!                    COPYRIGHT (c) 1980, 1981, 1982
;	  0008	!                    DIGITAL EQUIPMENT CORPORATION
;	  0009	!                        Maynard, Massachusetts
;	  0010	!
;	  0011	!     This software is furnished under a license and may  be  used
;	  0012	!     and copied only in accordance with the terms of such license
;	  0013	!     and with the inclusion of the above copyright notice.   This
;	  0014	!     software  or any other copies thereof may not be provided or
;	  0015	!     otherwise made available to any other person.  No  title  to
;	  0016	!     and ownership of the software is hereby transferred.
;	  0017	!
;	  0018	!     The information  in  this  software  is  subject  to  change
;	  0019	!     without  notice  and should not be construed as a commitment
;	  0020	!     by DIGITAL EQUIPMENT CORPORATION.
;	  0021	!
;	  0022	!     DIGITAL assumes no responsibility for the use or reliability
;	  0023	!     of  its  software  on  equipment  which  is  not supplied by
;	  0024	!     DIGITAL.
;	  0025	!
;	  0026	
;	  0027	!++
;	  0028	! FACILITY:	Transport
;	  0029	!
;	  0030	! ABSTRACT:
;	  0031	!
;	  0032	!	Transport forwarding module:  Forwards packets to other MCB
;	  0033	!	routines, and terminates packets which are not to be forwarded.
;	  0034	!
;	  0035	! ENVIRONMENT:	MCB
;	  0036	!
;	  0037	! AUTHOR: L. Webber , CREATION DATE: 23-Oct-79
;	  0038	!
;	  0039	! MODIFIED BY:
;	  0040	!
;	  0041	!	L. Webber, 23-Oct-79 : VERSION 1.00
;	  0042	!
;	  0043	! 1.01	L. Webber, 20-Dec-79
;	  0044	!	MCB interface modifications
;	  0045	!
;	  0046	! 1.02	L. Webber, 30-Jun-80
;	  0047	!	Modify to use MCBLIB macros
;	  0048	!
;	  0049	! 1.03	A. Peckham, 15-Oct-80
;	  0050	!	Take advantage of new function modifiers.
;	  0051	!
;	  0052	! 1.04  L. Webber, 17-Nov-80
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page   2
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (1)

;	  0053	!       Decrement ECL quota when queuing a message to ECL.
;	  0054	!
;	  0055	! 1.05	L. Webber, 11-Dec-80
;	  0056	!	Modify to support MCB 3.1
;	  0057	!
;	  0058	! 1.06	L. Webber, 10-Feb-81
;	  0059	!	Change from XPTFWD to XPEFWD; all entries are now CALL$
;	  0060	!	so they may be CALL$E'd.  All entries now have a "_"
;	  0061	!	in front of them, as: _TERMINATE.
;	  0062	!
;	  0063	! 1.07	L. Webber, 18-Feb-81
;	  0064	!	Fix maintenance of INPUTquota.
;	  0065	!	Add debugging code to maintain a count of DLL receive buffers
;	  0066	!	  outstanding to Transport.
;	  0067	!
;	  0068	! 1.08	L. Webber, 16-Mar-81
;	  0069	!	Fix _TERMINATE to call UNSPAWN to clean up a spawned CCB.
;	  0070	!
;	  0071	! 1.09	L. Webber, 4-Jun-81
;	  0072	!	Fix ECLFWD not to set C_LIN.
;	  0073	!
;	  0074	! 1.10	L. Webber, 25-Jun-81
;	  0075	!	Have FORWARDER check for negative as well as zero values of the
;	  0076	!	line quota (this is to accomodate some "high-priority" messages).
;	  0077	!
;	  0078	! 1.11	L. Webber, 26-Jun-81
;	  0079	!	Fix _TERMINATE to get rid of Transport's own (usually XCP) CCB.
;	  0080	!
;	  0081	! 1.12	L. Webber, 20-Jul-81
;	  0082	!	Modify _TERMINATE not to adjust input count when terminating a DC we
;	  0083	!	sent (it was already adjusted when the DC was sent).
;	  0084	!
;	  0085	! 1.13	A. Peckham, 19-Sep-81
;	  0086	!	Change CSBRT$ call to $MCB_RETURN_CCB_AND_BUFFER.
;	  0087	!
;	  0088	! 1.14	L. Webber, 23-Feb-82
;	  0089	!	Add DLLquota maintanance.
;	  0090	!
;	  0091	! 1.15	A. Peckham, 22-Apr-82
;	  0092	!       Eliminate GETLINE references.
;	  0093	!
;	  0094	!--
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page   3
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (2)

;	  0095	
;	  0096	!
;	  0097	! INCLUDE FILES:
;	  0098	!
;	  0099	
;	  0100	require 'XPTMAC';
;	  0198	
;	  0199	!
;	  0200	! TABLE OF CONTENTS
;	  0201	!
;	  0202	
;	  0203	forward routine
;	  0204		_SNDBUF: CALL$ novalue,
;	  0205		_FORWARDER: CALL$,
;	  0206		DLL_Q: novalue,
;	  0207		_ECLFWD: CALL$,
;	  0208		_TERMINATE: CALL$ novalue;
;	  0209	
;	  0210	!
;	  0211	! MACROS:
;	  0212	!
;	  0213	
;	  0214	!
;	  0215	! EQUATED SYMBOLS:
;	  0216	!
;	  0217	
;	  0218	!
;	  0219	! OWN STORAGE:
;	  0220	!
;	  0221	
;	  0222	!
;	  0223	! EXTERNAL REFERENCES:
;	  0224	!
;	  0225	
;	  0226	external routine
;	  0227	    UNSPAWN: novalue;
;	  0228	
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page   4
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (3)

;	  0229	
;	  0230	global
;	  0231	routine _SNDBUF (LINEb,CCB): CALL$ novalue =
;	  0232	
;	  0233	!++
;	  0234	! FUNCTIONAL DESCRIPTION:
;	  0235	!
;	  0236	! This routine is called to unconditionally forward a packet to the
;	  0237	! Transport Line Interface Layer.  If the packet cannot be sent, it
;	  0238	! will be discarded.
;	  0239	!
;	  0240	! FORMAL PARAMETERS
;	  0241	!
;	  0242	!	LINEb	The data base of the output line on which it is
;	  0243	!		to be forwarded.
;	  0244	!	CCB	The CCB for the packet to be forwarded; the packet is assumed
;	  0245	!		to be an unpaired SDB which belongs to Transport.
;	  0246	!
;	  0247	! IMPLICIT INPUTS
;	  0248	!
;	  0249	!	LINEstate
;	  0250	!
;	  0251	! ROUTINE VALUE:
;	  0252	! COMPLETION CODES:
;	  0253	!
;	  0254	!	NONE.
;	  0255	!
;	  0256	! SIDE EFFECTS:
;	  0257	!
;	  0258	!	NONE.
;	  0259	!
;	  0260	!--
;	  0261	
;	  0262	begin
;	  0263	map CCB: ref block field (C_XPT_fields);
;	  0264	require 'XPTSYM';
;	  0301	
;	  0302	!
;	  0303	!  Make sure the output line is up
;	  0304	!
;	  0305	
;	  0306	if ((.CCB[C_XPT_TYPE] neq INITcode)!Buffer is not from Line Support
;	  0307	and (.LINEstate neq RU))		!  and line is not in "run" state:
;	  0308	    then $MCB_RETURN_CCB_AND_BUFFER(.CCB[C_XPT_ALLOCATION],.CCB) !  get rid of CCB/buffer
;	  0309	
;	  0310	!
;	  0311	!  OK - now send out the packet
;	  0312	!
;	  0313	
;	  0314	else DLL_Q(.CCB,.LINEb);
;	  0315	end;				!End of _SNDBUF
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page   5
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (3)


						.TITLE	XPEFWD
						.IDENT	/X01150/

						.GLOBL	UNSPAWN, .CRDAT, $CBBRT


						.SBTTL	.SNDBUF
000000						.PSECT	$CODE$,  RO 

000000	016504  000004 			.SNDBUF::
					U.1:	MOV	4(R5),R4			; CCB(.AP.),*				0306
000004	126427  000032  000002 			CMPB	32(R4),#2
000012	001411 					BEQ	1$
000014	127527  000002  000010 			CMPB	@2(R5),#10			; LINEB(.AP.),*				0307
000022	001405 					BEQ	1$
000024	016401  000034 				MOV	34(R4),R1			;					0308
000030	004767  000000G				JSR	PC,$CBBRT
000034	000207 					RTS	PC				;					0306
000036	010446 				1$:	MOV	R4,-(SP)			;					0314
000040	016546  000002 				MOV	2(R5),-(SP)			; LINEB(.AP.),*
000044	004767  000000V				JSR	PC,U.3
000050	022626 					CMP	(SP)+,(SP)+
000052	000207 					RTS	PC				;					0231

; Routine Size:  22 words,	Routine Base:  $CODE$ + 0000
; Maximum stack depth per invocation:  3 words
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page   6
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (4)

;	  0316	
;	  0317	global
;	  0318	routine _FORWARDER (CCB,OLINE): CALL$ =
;	  0319	
;	  0320	!++
;	  0321	! FUNCTIONAL DESCRIPTION:
;	  0322	!
;	  0323	! This routine is called to conditionally forward a packet to the
;	  0324	! Transport Line Interface Layer.  If the packet cannot be forwarded
;	  0325	! because of unreachability or congestion, the packet is returned
;	  0326	! to the caller with an error code.
;	  0327	!
;	  0328	! FORMAL PARAMETERS
;	  0329	!
;	  0330	!	CCB	Spawned CCB for packet to be forwarded.
;	  0331	!	OLINE	Channel number for output line.
;	  0332	!
;	  0333	! IMPLICIT INPUTS
;	  0334	!
;	  0335	!	LINEstate
;	  0336	!
;	  0337	! ROUTINE VALUE: "Success", "unreachable", or "congestion"
;	  0338	! COMPLETION CODES:
;	  0339	!
;	  0340	!	CS_SUC	Success: packet has been forwarded.
;	  0341	!	CE_DIS	Unreachable destination: packet is rejected.
;	  0342	!	CE_RTE	Congestion: packet is rejected.
;	  0343	!
;	  0344	! SIDE EFFECTS:
;	  0345	!
;	  0346	!	NONE.
;	  0347	!
;	  0348	!--
;	  0349	
;	  0350	begin
;	  0351	map CCB: ref block field (C_XPT_fields);
;	  0352	local LINEb;
;	  0353	require 'XPTSYM';
;	  0390	
;	  0391	!
;	  0392	!  Make sure the output line is up
;	  0393	!
;	  0394	
;	  0395	LINEb = $XPT_GET_LINE_DB(.OLINE);       ! Address line data base entry
;	  0396	if .LINEstate neq RU then		!Output line is not in "run" state:
;	  0397	    return (CE_DIS)			!  reject the packet
;	  0398	
;	  0399	!
;	  0400	!  Check the output quota
;	  0401	!
;	  0402	
;	  0403	else if .LINEquota leq 0 then		!Quota exhausted:
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page   7
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (4)

;	  0404	    return (CE_RTE)			!  reject the packet
;	  0405	
;	  0406	!
;	  0407	!  OK - send out the packet
;	  0408	!
;	  0409	
;	  0410	else begin
;	  0411	    LINEquota = .LINEquota - 1;		!Decrement the quota
;	  0412	    CCB[C_XPT_TYPE] = FWDcode;          !Set buffer type
;	  0413	    DLL_Q (.CCB,.LINEb);		!Queue up the packet
;	  0414	    return (CS_SUC)			!Return "success"
;	  0415	    end
;	  0416	end;				!End of _FORWARDER


						.GLOBL	GTLINE


						.SBTTL	.FORWARDER
000000	016500  000004 			.FORWARDER::
					U.2:	MOV	4(R5),R0			; OLINE(.AP.),*				0395
000004	004767  000000G				JSR	PC,GTLINE
000010	010001 					MOV	R0,R1				; *,LINEB
000012	121127  000010 				CMPB	(R1),#10			; LINEB,*				0396
000016	001403 					BEQ	1$
000020	012700  177520 				MOV	#-260,R0
000024	000207 					RTS	PC
000026	012700  000036 			1$:	MOV	#36,R0				;					0403
000032	060100 					ADD	R1,R0				; LINEB,*
000034	105710 					TSTB	(R0)
000036	003003 					BGT	2$
000040	012700  177730 				MOV	#-50,R0
000044	000207 					RTS	PC
000046	105310 				2$:	DECB	(R0)				;					0411
000050	016500  000002 				MOV	2(R5),R0			; CCB(.AP.),*				0412
000054	112760  000004  000032 			MOVB	#4,32(R0)
000062	010046 					MOV	R0,-(SP)			;					0413
000064	010146 					MOV	R1,-(SP)			; LINEB,*
000066	004767  000000V				JSR	PC,U.3
000072	022626 					CMP	(SP)+,(SP)+			;					0410
000074	012700  000001 				MOV	#1,R0				;					0403
000100	000207 					RTS	PC				;					0318

; Routine Size:  33 words,	Routine Base:  $CODE$ + 0054
; Maximum stack depth per invocation:  3 words
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page   8
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (5)

;	  0417	
;	  0418	routine DLL_Q (CCB,LINEb): novalue =
;	  0419	
;	  0420	!++
;	  0421	! FUNCTIONAL DESCRIPTION:
;	  0422	!
;	  0423	! Queues a packet CCB to the Transport Line Interface Layer.
;	  0424	!
;	  0425	! FORMAL PARAMETERS
;	  0426	!
;	  0427	!	CCB	CCB to be queued
;	  0428	!	LINEb	Output line data base
;	  0429	!
;	  0430	! IMPLICIT INPUTS
;	  0431	!
;	  0432	!	NONE.
;	  0433	!
;	  0434	! ROUTINE VALUE:
;	  0435	! COMPLETION CODES:
;	  0436	!
;	  0437	!	NONE.
;	  0438	!
;	  0439	! SIDE EFFECTS:
;	  0440	!
;	  0441	!	NONE.
;	  0442	!
;	  0443	!--
;	  0444	
;	  0445	begin
;	  0446	map CCB: ref block field (C_XPT_fields);
;	  0447	require 'XPTSYM';
;	  0484	
;	  0485	CCB[C_HANDLE] = .TLIhandle;             ! Move in destination = TLI
;	  0486	CCB[C_FNC] = FC_XME;                    ! Function is "transmit enable"
;	  0487	CCB[C_MOD] = TM_DAT;                    !  with a side of "data"
;	  0488	$MCB_SCHEDULE_CCB(.CCB);                ! Send the buffer
;	  0489	end;				!End of DLL_Q


						.GLOBL	$SCHED


						.SBTTL	DLL.Q
000000	010446 				; DLL.Q
					U.3:	MOV	R4,-(SP)			;					0418
000002	016604  000006 				MOV	6(SP),R4			; CCB,*					0485
000006	016600  000004 				MOV	4(SP),R0			; LINEB,*
000012	016064  000030  000010 			MOV	30(R0),10(R4)
000020	112764  000002  000012 			MOVB	#2,12(R4)			;					0486
000026	105064  000013 				CLRB	13(R4)				;					0487
000032	004767  000000G				JSR	PC,$SCHED			;					0488
000036	012604 					MOV	(SP)+,R4			;					0418
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page   9
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (5)

000040	000207 					RTS	PC

; Routine Size:  17 words,	Routine Base:  $CODE$ + 0156
; Maximum stack depth per invocation:  2 words
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page  10
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (6)

;	  0490	
;	  0491	global
;	  0492	routine _ECLFWD (CCB,SOURCE,DEST,RTS): CALL$ =
;	  0493	
;	  0494	!++
;	  0495	! FUNCTIONAL DESCRIPTION:
;	  0496	!
;	  0497	! This routine is called to conditionally forward a packet to a
;	  0498	! Transport user.  If the packet cannot be forwarded because of
;	  0499	! congestion, the packet is returned to the caller with an error
;	  0500	! code.
;	  0501	!
;	  0502	! FORMAL PARAMETERS
;	  0503	!
;	  0504	!	CCB	CCB for packet to be forwarded.
;	  0505	!	SOURCE	Source node address
;	  0506	!	DEST	Destination node address
;	  0507	!	RTS	"Return to sender" flag to be passed to user.
;	  0508	!
;	  0509	! IMPLICIT INPUTS
;	  0510	!
;	  0511	!	ECLquota
;	  0512	!
;	  0513	! ROUTINE VALUE: "Success" or "congestion"
;	  0514	! COMPLETION CODES:
;	  0515	!
;	  0516	!	CS_SUC	Success: packet has been forwarded to user.
;	  0517	!	CE_RTE	Congestion: packet is rejected.
;	  0518	!
;	  0519	! SIDE EFFECTS:
;	  0520	!
;	  0521	!	NONE.
;	  0522	!
;	  0523	!--
;	  0524	
;	  0525	begin
;	  0526	map CCB: ref block field (C_XPT_fields);
;	  0527	require 'XPTSYM';
;	  0564	local CCB_P: ref block field(C_FIELDS);
;	  0565	
;	  0566	!
;	  0567	!  Check the ECL quota
;	  0568	!
;	  0569	
;	  0570	if .ECLquota eql 0 then			!Quota exhausted:
;	  0571	    return (CE_RTE)			!  return "congestion"
;	  0572	else ECLquota = .ECLquota - 1;          !Otherwise - decrement
;	  0573	
;	  0574	!
;	  0575	!  OK - forward to user
;	  0576	!
;	  0577	
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page  11
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (6)

;	  0578	CCB[C_FNC] = FC_RCP;			!Function is "receive complete"
;	  0579	CCB[C_MOD] = XM_DAT;			!Modifier is "data message"
;	  0580	CCB[C_XPT_SOURCE] = .SOURCE;		!  and source node address
;	  0581	CCB[C_XPT_DESTINATION] = .DEST;         !  and destination node address
;	  0582	CCB[C_STS] = (if .RTS then CE_DIS	!Status = "return to sender"
;	  0583	    else CS_SUC);			!  or "regular packet"
;	  0584	begin
;	  0585	local NODEb: ref NODEblock;
;	  0586	NODEb = $XPT_GET_NODE_DB(.DEST);
;	  0587	CCB[C_PIX] = .User;			!Move in destination PIX
;	  0588	end;
;	  0589	$MCB_SCHEDULE_CCB (.CCB);		!Queue to the destination process
;	  0590	return(CS_SUC)				!Return "success"
;	  0591	end;				!End of _ECLFWD


						.GLOBL	GTNODE


						.SBTTL	.ECLFWD
000000	016700  000002G			.ECLFWD::
					U.4:	MOV	.CRDAT+2,R0			;					0570
000004	062700  000102 				ADD	#102,R0
000010	105710 					TSTB	(R0)
000012	001003 					BNE	1$
000014	012700  177730 				MOV	#-50,R0				;					0571
000020	000207 					RTS	PC
000022	105310 				1$:	DECB	(R0)				;					0572
000024	016504  000002 				MOV	2(R5),R4			; CCB(.AP.),*				0578
000030	112764  000016  000012 			MOVB	#16,12(R4)
000036	105064  000013 				CLRB	13(R4)				;					0579
000042	016564  000004  000024 			MOV	4(R5),24(R4)			; SOURCE(.AP.),*			0580
000050	016564  000006  000026 			MOV	6(R5),26(R4)			; DEST(.AP.),*				0581
000056	032765  000001  000010 			BIT	#1,10(R5)			; *,RTS(.AP.)				0582
000064	001403 					BEQ	2$
000066	012700  177520 				MOV	#-260,R0
000072	000402 					BR	3$
000074	012700  000001 			2$:	MOV	#1,R0
000100	010064  000014 			3$:	MOV	R0,14(R4)
000104	016500  000006 				MOV	6(R5),R0			; DEST(.AP.),*				0586
000110	004767  000000G				JSR	PC,GTNODE
000114	111064  000011 				MOVB	(R0),11(R4)			; NODEB,*				0587
000120	004767  000000G				JSR	PC,$SCHED			;					0589
000124	012700  000001 				MOV	#1,R0				;					0525
000130	000207 					RTS	PC				;					0492

; Routine Size:  45 words,	Routine Base:  $CODE$ + 0220
; Maximum stack depth per invocation:  1 word
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page  12
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (7)

;	  0592	
;	  0593	global
;	  0594	routine _TERMINATE (CCB,CODE): CALL$ novalue =
;	  0595	
;	  0596	!++
;	  0597	! FUNCTIONAL DESCRIPTION:
;	  0598	!
;	  0599	! This routine is called to "terminate" a CCB or spawned/pass-through
;	  0600	! CCB pair.  "Termination" consists of releasing the spawned CCB and its
;	  0601	! SDB (if either exist) and returning the pass-through CCB to its owning
;	  0602	! process with a specified success or error code.
;	  0603	!
;	  0604	! FORMAL PARAMETERS
;	  0605	!
;	  0606	!	CCB	First or only CCB to terminate.
;	  0607	!	CODE	Success/failure code to return to the originating process.
;	  0608	!		This value is only used if the originating process is a
;	  0609	!		Transport user; if the terminated CCB is sent back to the
;	  0610	!		Data Link Layer, no status is returned.
;	  0611	!
;	  0612	! IMPLICIT INPUTS
;	  0613	!
;	  0614	!	NONE.
;	  0615	!
;	  0616	! ROUTINE VALUE:
;	  0617	! COMPLETION CODES:
;	  0618	!
;	  0619	!	NONE.
;	  0620	!
;	  0621	! SIDE EFFECTS:
;	  0622	!
;	  0623	!	NONE.
;	  0624	!
;	  0625	!--
;	  0626	
;	  0627	begin
;	  0628	map CCB: ref block field (C_XPT_fields);
;	  0629	local LINEb;
;	  0630	require 'XPTSYM';
;	  0667	local ADJ;
;	  0668	local CCB_P: ref block field(C_XPT_fields);
;	  0669	
;	  0670	!
;	  0671	!  Process spawned CCB if any
;	  0672	!
;	  0673	
;	  0674	if ((.CCB[C_OWN] eql PD_XPT) and	!Parameter
;	  0675	(.CCB[C_STK] neq 0)) then begin		!  is a
;	  0676	    CCB_P = .CCB[C_STK];		!  spawned CCB:
;	  0677	    UNSPAWN(.CCB);			!  clean it up
;	  0678	    end
;	  0679	else CCB_P = .CCB;			!Parameter is pass-through CCB
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page  13
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (7)

;	  0680	
;	  0681	!
;	  0682	!  Return pass-through CCB to a Transport user
;	  0683	!
;	  0684	
;	  0685	if .CCB_P[C_FNC] eql FC_XME then begin
;	  0686	    INPUTquota = .INPUTquota + 1;	!Increase admission quota
;	  0687	    CCB_P[C_FNC] = FC_XCP;		!Function = "transmit complete"
;	  0688	    CCB_P[C_STS] = .CODE;		!Move in success/failure code
;	  0689	    LLCRS$ (.CCB_P);			!Return CCB to user
;	  0690	    end
;	  0691	
;	  0692	!
;	  0693	!  Return pass-through CCB to the Transport Line Interface Layer
;	  0694	!
;	  0695	
;	  0696	else if .CCB_P[C_FNC] eql FC_RCP then begin
;	  0697	    LINEb = $XPT_GET_LINE_DB(.CCB_P[C_LIX]);    ! Address line data base entry
;	  0698	    if .CCB[C_XPT_TYPE] neq NOcode then	
;	  0699	    begin					!Decrement receive
;	  0700		INPUTcount = .INPUTcount - 1;		!  buffer count
;	  0701		DLLquota = .DLLquota + 1;		!  and global quota
;	  0702		end;
;	  0703	    CCB_P[C_FNC] = FC_RCE;			!Function = "receive enable"
;	  0704	    LLCRS$ (.CCB_P);				!Queue CCB back to DLL
;	  0705	    end
;	  0706	
;	  0707	!
;	  0708	!  Return our own CCB to the pool
;	  0709	!
;	  0710	
;	  0711	else if .CCB_P[C_OWN] eql PD_XPT
;	  0712	     then begin
;	  0713	          if .CCB_P[C_XPT_ALLOCATION] neq 0
;	  0714	          then begin
;	  0715	               MAP$(.CCB_P[C_BIAS]);
;	  0716	               $MCB_RETURN_BUFFER(.CCB_P[C_XPT_ALLOCATION],.CCB_P[C_ADDR]);
;	  0717	               end;
;	  0718	          $MCB_RETURN_CCB(.CCB_P);
;	  0719	          end
;	  0720	
;	  0721	!  
;	  0722	!
;	  0723	!  How did we get here?
;	  0724	!
;	  0725	
;	  0726	else BPT(XPT$_IFC,CCB_P[C_FNC]);
;	  0727	
;	  0728	end;				!End of _TERMINATE


						.GLOBL	KISAR6, $CORRT, $CCBRT
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page  14
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (7)



						.SBTTL	.TERMINATE
000000	016501  000002 			.TERMINATE::
					U.5:	MOV	2(R5),R1			; CCB(.AP.),*				0674
000004	016700  000002G				MOV	.CRDAT+2,R0
000010	126160  000006  000004 			CMPB	6(R1),4(R0)
000016	001012 					BNE	1$
000020	005761  000004 				TST	4(R1)				;					0675
000024	001407 					BEQ	1$
000026	016102  000004 				MOV	4(R1),R2			; *,CCB.P				0676
000032	010146 					MOV	R1,-(SP)			;					0677
000034	004767  000000G				JSR	PC,UNSPAWN
000040	005726 					TST	(SP)+				;					0675
000042	000401 					BR	2$				;					0674
000044	010102 				1$:	MOV	R1,R2				; *,CCB.P				0679
000046	012703  000012 			2$:	MOV	#12,R3				;					0685
000052	060203 					ADD	R2,R3				; CCB.P,*
000054	121327  000002 				CMPB	(R3),#2
000060	001012 					BNE	3$
000062	016700  000002G				MOV	.CRDAT+2,R0
000066	105260  000104 				INCB	104(R0)				;					0686
000072	112713  000014 				MOVB	#14,(R3)			;					0687
000076	016562  000004  000014 			MOV	4(R5),14(R2)			; CODE(.AP.),*(CCB.P)			0688
000104	000424 					BR	5$				;					0689
000106	121327  000016 			3$:	CMPB	(R3),#16			;					0696
000112	001025 					BNE	6$
000114	005000 					CLR	R0				;					0697
000116	156200  000010 				BISB	10(R2),R0			; *(CCB.P),*
000122	004767  000000G				JSR	PC,GTLINE
000126	126127  000032  000006 			CMPB	32(R1),#6			;					0698
000134	001406 					BEQ	4$
000136	105360  000043 				DECB	43(R0)				; *(LINEB)				0700
000142	016700  000002G				MOV	.CRDAT+2,R0
000146	105260  000035 				INCB	35(R0)				;					0701
000152	112713  000004 			4$:	MOVB	#4,(R3)				;					0703
000156	010204 				5$:	MOV	R2,R4				; CCB.P,*				0704
000160	004767  000000G				JSR	PC,$SCHED
000164	000207 					RTS	PC				;					0696
000166	016700  000002G			6$:	MOV	.CRDAT+2,R0			;					0711
000172	126260  000006  000004 			CMPB	6(R2),4(R0)			; *(CCB.P),*
000200	001016 					BNE	8$
000202	016201  000034 				MOV	34(R2),R1			; *(CCB.P),*				0713
000206	001407 					BEQ	7$
000210	016267  000016  000000G			MOV	16(R2),KISAR6			; *(CCB.P),*				0715
000216	016200  000020 				MOV	20(R2),R0			; *(CCB.P),*				0716
000222	004767  000000G				JSR	PC,$CORRT
000226	010204 				7$:	MOV	R2,R4				; CCB.P,*				0718
000230	004767  000000G				JSR	PC,$CCBRT
000234	000207 					RTS	PC				;					0711
000236	010346 				8$:	MOV	R3,-(SP)			;					0726
000240	012746  100022 				MOV	#-77756,-(SP)
XPEFWD								25-Jan-1983 09:56:56	TOPS-20 Bliss-16 2A(530)	    Page  15
X01150								30-Dec-1982 21:20:19	NETPKG:<XPT>XPEFWD.BLI.8 (7)

000244	012746  000002 				MOV	#2,-(SP)
000250	004767  000000G				JSR	PC,$IGNAL
000254	062706  000006 				ADD	#6,SP
000260	000207 					RTS	PC				;					0594

; Routine Size:  89 words,	Routine Base:  $CODE$ + 0352
; Maximum stack depth per invocation:  4 words


;	  0729	end				!End of Module XPEFWD
;	  0730	eludom



;					OTS external references
						.GLOBL	$IGNAL


;					PSECT SUMMARY
;
;	Psect Name			Words	  Attributes
;	 $CODE$				  206	    RO ,  I  ,  LCL,  REL,  CON




;				LIBRARY STATISTICS
;
;					     -------- Symbols --------    Blocks
;	File				     Total    Loaded   Percent      Read
;
;  NETPKG:<MCB>XPORTX.L16.15		       599         0         0         0
;  NETPKG:<MCB>MCBLIB.L16.15		       372        37         9         0
;  NETPKG:<MCB>NMXLIB.L16.13		       200         0         0         0
;  NETPKG:<XPT>XPTLIB.L16.3		       510       166        32         0





; Size:		206 code + 0 data words
; Run Time:	00:05.5
; Elapsed Time:	00:18.1
; Memory Used:	38 pages
; Compilation Complete
ADDRESS				 152+	 154+	 155+	 157+	 158+	 160+	 161+	 167+	 168+	 171+	 172+	 173+
ADJ				 667
BPT				 181+#	 193+#	 726
BUFCHK				 185+	 186+#	 195+	 196+#
CALL$				 204	 205	 207	 208	 231#	 318#	 492#	 594#
CCB				 231	 263	 306	 308	 314	 318	 351	 412#	 413	 418	 446	 485#
				 486#	 487#	 488	 492	 526	 578#	 579#	 580#	 581#	 582#	 587#	 589
				 594	 628	 674	 675	 676	 677	 679	 698
CCB_P				 564	 668	 676#	 679#	 685	 687#	 688#	 689	 696	 697	 703#	 704
				 711	 713	 715	 716	 718	 726
CE_DIS				 397	 582
CE_RTE				 404	 571
CHKBUF				 188+*	 189+
CS_SUC				 414	 583	 590
C_ADDR				 716
C_BIAS				 715
C_FIELDS			 564
C_FNC				 486	 578	 685	 687	 696	 703	 726
C_HANDLE			 485
C_LIX				 697
C_MOD				 487	 579
C_OWN				 674	 711
C_PIX				 587
C_STK				 675	 676
C_STS				 582	 688
C_XPT_ALLOCATION		 308	 713	 716
C_XPT_DESTINATION		 581
C_XPT_FIELDS			 263	 351	 446	 526	 628	 668
C_XPT_SOURCE			 580
C_XPT_TYPE			 306	 412	 698
DEST				 492	 581	 586
DLLQUOTA			 701#
DLL_Q				 206	 314	 413	 418*
ECLQUOTA			 570	 572#
FC_RCE				 703
FC_RCP				 578	 696
FC_XCP				 687
FC_XME				 486	 685
FWDCODE				 412
GETQ				 152+#
GETW				 131+#	 154+	 155+
I				 176+	 178+
INITCODE			 306
INPUTCOUNT			 700#
INPUTQUOTA			 686#
J				 176+	 178+
LINEBLOCK			 291+	 380+	 474+	 554+	 657+
LINEB				 231	 289+	 291+	 314	 352	 378+	 380+	 395#	 413	 418	 472+	 474+
				 552+	 554+	 629	 655+	 657+	 697#
LINEQUOTA			 403	 411#
LINESTATE			 307	 396
LLCRS$				 689	 704
M				 176+	 177+
MAP$				 715
MATRIX				 176+#	 178+
MCB$GAW_PROCESS_DATA_BASE	 294+	 295+	 298+	 383+	 384+	 387+	 477+	 478+	 481+	 557+	 558+	 561+
				 660+	 661+	 664+
N				 176+	 177+
NL				 176+	 178+
NODEBLOCK			 286+	 375+	 469+	 549+	 585	 652+
NODEB				 284+	 286+	 373+	 375+	 467+	 469+	 547+	 549+	 585	 586#	 650+	 652+
NOP				 193+	 194+	 196+
NO_LINEB			 290+	 379+	 473+	 553+	 656+
NO_NODEB			 285+	 374+	 468+	 548+	 651+
OLINE				 318	 395
PD_XPT				 674	 711
PTR				 131+	 134+	 135+	 138+	 141+	 142+	 148+	 149+	 152+	 154+	 155+	 157+
				 160+	 161+	 162+	 163+	 167+	 168+
PUTQ				 157+#
PUTW				 138+#	 167+	 168+
RTS				 492	 582
RU				 307	 396
TLIHANDLE			 485
TM_DAT				 487
UNIT				 176+#	 177+	 178+
UNSPAWN				 227*	 677
USER				 587
VALUE				 138+	 139+	 141+	 142+	 147+
X				 133+	 134+#	 135+#	 136+	 146+	 147+#	 148+	 149+
XM_DAT				 579
XPEFWD				   1#
XPT$_IFC			 726
XPTDBBLOCK			 300+	 389+	 483+	 563+	 666+
XPTDB				 297+	 298+#	 299+	 386+	 387+#	 388+	 480+	 481+#	 482+	 560+	 561+#	 562+
				 663+	 664+#	 665+
ZEROQ				 171+#
_ECLFWD				 207	 492*
_FORWARDER			 205	 318*
_SNDBUF				 204	 231*
_TERMINATE			 208	 594*
$MCB_RETURN_BUFFER		 716
$MCB_RETURN_CCB_AND_BUFFER	 308
$MCB_RETURN_CCB			 718
$MCB_SCHEDULE_CCB		 488	 589
$XPT_GET_LINE_DB		 395	 697
$XPT_GET_NODE_DB		 586
%CTCE				 139+	 158+
%REMAINING			 183+