Trailing-Edge
-
PDP-10 Archives
-
TOPS-20_V6.1_DECnetSrc_7-23-85
-
mcb/xpt/xpesel.lst
There is 1 other file named xpesel.lst in the archive. Click here to see a list.
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 1
30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (1)
; 0001 module XPESEL (
; 0002 IDENT = 'X01090'
; 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 Select extension module: Contains INTERCEPT, which
; 0033 ! maintains the Link Translate Table.
; 0034 ! This routine was originally part of the XPTSEL module.
; 0035 !
; 0036 ! ENVIRONMENT: MCB
; 0037 !
; 0038 ! AUTHOR: L. Webber , CREATION DATE: 5-Mar-81
; 0039 !
; 0040 ! MODIFIED BY:
; 0041 !
; 0042 ! L. Webber, 5-Mar-81 VERSION 1.00
; 0043 !
; 0044 ! 1.01 L. Webber, 19-Mar-81
; 0045 ! Added $XPECLN to explicitly clean out an LTT entry.
; 0046 ! Broke SCAN out as a top-level routine so that both other routines
; 0047 ! could call it.
; 0048 !
; 0049 ! 1.02 L. Webber, 14-Apr-81
; 0050 ! Fix SCAN so that if it is given a 0 link address, any table entry
; 0051 ! containing the specified node address is a hit. This allows
; 0052 ! $XPECLN to clear out all links for a specified node.
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 2
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (1)
; 0053 !
; 0054 ! 1.03 L. Webber, 5-May-81
; 0055 ! Change INTERCEPT so that when a duplicate CI is found, the matching
; 0056 ! LTT entry is stolen for use by the new link. (Note: this will do
; 0057 ! horrible things if a real duplicate CI is encountered, i.e., one
; 0058 ! where the duplicated link does not correspond to a defunct logical
; 0059 ! link.)
; 0060 !
; 0061 ! 1.04 L. Webber, 25-Jun-81
; 0062 ! Add SEND_DC, a routine to format and send a DC message over a line.
; 0063 ! Modify $XPECLN to send a DC if it is killing an ILT entry whose
; 0064 ! "other end" (the one does not lead to the node responsible for the
; 0065 ! table entry being killed) is a Phase II or TOPS20 node.
; 0066 !
; 0067 ! 1.05 L. Webber, 21-Dec-81
; 0068 ! Add CLN_RETRY to clean a specified circuit's CCBs out of the retry
; 0069 ! queue. This is called when the circuit goes down.
; 0070 !
; 0071 ! 1.06 L. Webber, 3-Feb-81
; 0072 ! Fix CLN_RETRY to tell _TERMINATE not to decrement INPUTcount when
; 0073 ! returning a buffer; buffers on the retry queue aren't counted in
; 0074 ! the first place.
; 0075 !
; 0076 ! 1.07 L. Webber, 8-Feb-81
; 0077 ! Fix 1.06 not to modify the buffer's CCB when returning it.
; 0078 !
; 0079 ! 1.08 A. Peckham,20-Apr-82
; 0080 ! Move $XPECLN global to low psect.
; 0081 ! Eliminate GETLINE and GETNODE.
; 0082 !
; 0083 ! 1.09 A. Peckham,2-Jul-82
; 0084 ! Rename INTERCEPT to INTPH2.
; 0085 !
; 0086 !--
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 3
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (2)
; 0087
; 0088 !
; 0089 ! INCLUDE FILES:
; 0090 !
; 0091
; 0092 require 'XPTMAC';
; 0190
; 0191 !
; 0192 ! TABLE OF CONTENTS
; 0193 !
; 0194
; 0195 forward routine
; 0196 SCAN,
; 0197 INTPH2: CALL$,
; 0198 CLEAN_LINK: CALL$ novalue,
; 0199 SEND_DC: CALL$ novalue,
; 0200 CLN_RETRY: novalue;
; 0201
; 0202 !
; 0203 ! MACROS:
; 0204 !
; 0205
; 0206 !
; 0207 ! EQUATED SYMBOLS:
; 0208 !
; 0209
; 0210 !
; 0211 ! OWN STORAGE:
; 0212 !
; 0213
; 0214 literal JUMP_TO = %o'137';
; 0215
; 0216 psect
; 0217 global = XPEJMP (nowrite, execute);
; 0218
; 0219 global
; 0220 $XPECLN : vector [2] initial (JUMP_TO, CLEAN_LINK);
; 0221
; 0222 undeclare JUMP_TO;
; 0223
; 0224 !
; 0225 ! EXTERNAL REFERENCES:
; 0226 !
; 0227
; 0228 external routine
; 0229 _TERMINATE: CALL$ novalue;
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 4
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (3)
; 0230
; 0231 routine SCAN (TABLE,HALF,NODE,LINK) =
; 0232
; 0233 !++
; 0234 ! FUNCTIONAL DESCRIPTION:
; 0235 !
; 0236 ! Scans the Link Translate Table for an entry matching a specified one.
; 0237 !
; 0238 ! FORMAL PARAMETERS
; 0239 !
; 0240 ! TABLE Address of a BLISS value to be set to the address of
; 0241 ! the LTT entry found (if any).
; 0242 !
; 0243 ! HALF Address of a BLISS value to be set to the "half" of
; 0244 ! the table entry containing specified node/link pair:
; 0245 ! 0 for first half, 1 for second.
; 0246 !
; 0247 ! NODE Node address of node/link pair to find.
; 0248 !
; 0249 ! LINK Link address of node/link pair to find, or 0 for
; 0250 ! "any link for the node"
; 0251 !
; 0252 ! IMPLICIT INPUTS
; 0253 !
; 0254 ! Ph2link_table, Ph2link_allocation
; 0255 !
; 0256 ! ROUTINE VALUE: "Success" or "failure"
; 0257 ! COMPLETION CODES:
; 0258 !
; 0259 ! -1 Failure: LTT and HALF contents are undefined.
; 0260 ! other Index (from 1 to the number of entries) of the LTT
; 0261 ! entry of the first match found.
; 0262 !
; 0263 ! SIDE EFFECTS:
; 0264 !
; 0265 ! NONE.
; 0266 !
; 0267 !--
; 0268
; 0269 begin
; 0270
; 0271 require 'XPTSYM';
; 0308 bind LTT = .TABLE: ref block field(LTTfields);
; 0309
; 0310 NODE = .NODE<0,16,0>; ! Mask node address and
; 0311 LINK = .LINK<0,16,0>; ! link address to 16 bits
; 0312 LTT = .Ph2link_table; ! Address the first entry
; 0313
; 0314 incr I from 1 to .Ph2link_allocated do ! Scan the LTT entries
; 0315 begin
; 0316 .HALF = 0; ! Try the first pair first
; 0317 if ((.NODE eql .LTT[LTTnode1]) ! Compare the pair in
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 5
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (3)
; 0318 and ((.LINK eql 0) or ! the entry with
; 0319 (.LINK eql .LTT[LTTlink1]))) ! the specified pair
; 0320 then exitloop(.I); ! HIT
; 0321 .HALF = ..HALF + 1; ! Now try the second pair in the entry
; 0322 if ((.NODE eql .LTT[LTTnode2]) ! Compare the pair in
; 0323 and ((.LINK eql 0) or ! the entry with
; 0324 (.LINK eql .LTT[LTTlink2]))) ! the specified pair
; 0325 then exitloop(.I) ! HIT
; 0326 else LTT = LTT[LTTlen]; ! Go on to the next LTT entry
; 0327 end
; 0328 end; !End of SCAN
.TITLE XPESEL
.IDENT /X01090/
000000 .PSECT XPEJMP, RO
000000 000137 $XPECLN::
.WORD 137
000002 000000V .WORD U.3
.GLOBL .TERMINATE, .CRDAT
.SBTTL SCAN
000000 .PSECT $CODE$, RO
000000 004167 000000G ; SCAN
U.1: JSR R1,$SAVE5 ; 0231
000004 016605 000024 MOV 24(SP),R5 ; TABLE,* 0269
000010 016700 000002G MOV .CRDAT+2,R0 ; 0312
000014 016015 000026 MOV 26(R0),(R5)
000020 010002 MOV R0,R2 ; XPTDB,* 0314
000022 016604 000022 MOV 22(SP),R4 ; HALF,* 0316
000026 005000 CLR R0 ; I 0314
000030 000433 BR 4$
000032 005014 1$: CLR (R4) ; 0316
000034 011501 MOV (R5),R1 ; 0317
000036 026611 000020 CMP 20(SP),(R1) ; NODE,*
000042 001007 BNE 2$
000044 016601 000016 MOV 16(SP),R1 ; LINK,* 0318
000050 001431 BEQ 5$
000052 011503 MOV (R5),R3 ; 0319
000054 020163 000002 CMP R1,2(R3)
000060 001425 BEQ 5$ ; 0320
000062 005214 2$: INC (R4) ; 0321
000064 011501 MOV (R5),R1 ; 0322
000066 026661 000020 000004 CMP 20(SP),4(R1) ; NODE,*
000074 001007 BNE 3$
000076 016601 000016 MOV 16(SP),R1 ; LINK,* 0323
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 6
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (3)
000102 001414 BEQ 5$
000104 011503 MOV (R5),R3 ; 0324
000106 020163 000006 CMP R1,6(R3)
000112 001410 BEQ 5$ ; 0325
000114 062715 000010 3$: ADD #10,(R5) ; 0326
000120 005200 4$: INC R0 ; I 0314
000122 020062 000030 CMP R0,30(R2) ; I,*
000126 003741 BLE 1$
000130 012700 177777 MOV #-1,R0
000134 000207 5$: RTS PC ; 0231
; Routine Size: 47 words, Routine Base: $CODE$ + 0000
; Maximum stack depth per invocation: 7 words
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 7
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (4)
; 0329
; 0330 global
; 0331 routine INTPH2 (CCB,TYPE,DESTNODE,SRCNODE): CALL$ =
; 0332
; 0333 !++
; 0334 ! FUNCTIONAL DESCRIPTION:
; 0335 !
; 0336 ! This routine handles Phase II packets without routing headers.
; 0337 ! It maintains the Link Translate Table in the Transport Data Base
; 0338 ! and uses it to map link addresses into a destination node address.
; 0339 !
; 0340 ! The routine is called in two contexts: TYPE 0, when a message is
; 0341 ! received without a routing header and the link addresses must be
; 0342 ! mapped into a destination; and TYPE 1, when a Phase II message is
; 0343 ! received destined for another Phase II node and an LTT entry must
; 0344 ! be created and maintained to allow TYPE 0 calls for other messages
; 0345 ! on the same link.
; 0346 !
; 0347 ! FORMAL PARAMETERS
; 0348 !
; 0349 ! CCB - the pass-through CCB for the packet to be processed
; 0350 ! TYPE - the message type: 0 = packet has no header
; 0351 ! 1 = packet has a header or is a CI
; 0352 ! DESTNODE - the destination node address for the packet. This
; 0353 ! is an output for TYPE 0 and an input for TYPE 1.
; 0354 ! SRCNODE - the source node address for the packet. This is an
; 0355 ! output for TYPE 0 and an input for TYPE 1.
; 0356 !
; 0357 ! IMPLICIT INPUTS
; 0358 !
; 0359 ! Nty, Nid, Nnm, Tid
; 0360 !
; 0361 ! ROUTINE VALUE: "Success" or "failure" (TYPE 1 always returns "success")
; 0362 ! COMPLETION CODES:
; 0363 !
; 0364 ! CS_SUC Success; for TYPE 0, the destination or source node
; 0365 ! addresses are returned.
; 0366 ! - $XPT$E_FMT Failure; packet header format error. This may mean
; 0367 ! that the packet cannot be associated with an active
; 0368 ! LTT entry.
; 0369 ! - $XPT$E_RNG Failure; node number out of range.
; 0370 !
; 0371 ! SIDE EFFECTS:
; 0372 !
; 0373 ! Maintains and modifies the Link Translate Table.
; 0374 !
; 0375 !--
; 0376
; 0377 begin
; 0378
; 0379 local LINEb;
; 0380 require 'XPTSYM';
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 8
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (4)
; 0417 require 'MCBCOM';
; 0451 pointer PTR;
; 0452 local ILINE,MSGFLG,SLINK,DLINK,DLINKX,RET,HALF,PTRA,LTTx;
; 0453 local LTT: ref block field(LTTfields);
; 0454
; 0455 MAPBUF(.CCB,PTRA,RET); !Map to and address message buffer
; 0456 PTR = .PTRA;
; 0457
; 0458 !******************************!
; 0459 ! TYPE 0 - no routing header !
; 0460 !******************************!
; 0461
; 0462 if .TYPE eql 0 then begin
; 0463
; 0464 !
; 0465 ! Determine the source node address
; 0466 !
; 0467
; 0468 ILINE = .CCB[C_LIN]; !Determine input line
; 0469 LINEb = $XPT_GET_LINE_DB(.ILINE); ! and address its data base entry
; 0470 if ((.Nty neq PhTwo) !If the line doesn't have
; 0471 and (.Nty neq TOPS20)) ! a Phase II adjacent node
; 0472 then SIGNAL_STOP (CE_ERR) ! then return "failure"
; 0473 else .SRCNODE = .Nid; !Otherwise, pick up source node address
; 0474
; 0475 !
; 0476 ! Parse the NSP header for the message
; 0477 !
; 0478
; 0479 MSGFLG = getb(PTR); !NSP message flags
; 0480 DLINK = getw(PTR); !Destination link address
; 0481 SLINK = getw(PTR); !Source link address
; 0482
; 0483 !
; 0484 ! Scan the LTT for a match with the source node/link pair
; 0485 !
; 0486
; 0487 if SCAN (LTT,HALF,..SRCNODE,.SLINK)
; 0488
; 0489 !
; 0490 ! No match - only valid for CI and CC
; 0491 !
; 0492
; 0493 eql -1 then
; 0494 if ((.MSGFLG eql CI_MSGflgs) !Any CI or CC message
; 0495 or (.MSGFLG eql CC_MSGflgs)) !with no routing header
; 0496 then begin !must be assumed to be for self
; 0497 .DESTNODE = .Tid; ! Indicate that message is for Self
; 0498 INTPH2(.CCB,1,.DESTNODE, ! Re-call INTPH2
; 0499 .SRCNODE); ! for Type 1 processing
; 0500 return (CS_SUC) ! Return "success"
; 0501 end
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 9
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (4)
; 0502 else return (-$XPT$E_FMT) !Not a CI or CC message - invalid
; 0503
; 0504 !
; 0505 ! Match - pick up the destination node/link pair from the LTT
; 0506 !
; 0507
; 0508 else begin
; 0509 if .HALF eql 0 then LTT = LTT[LTTnode2]; !Choose which half to use
; 0510 .DESTNODE = .LTT[LTTnode];
; 0511 DLINKX = .LTT[LTTlink];
; 0512
; 0513 !
; 0514 ! Invalid destination pair - return error
; 0515 !
; 0516
; 0517 if ..DESTNODE gtru NN then
; 0518 return (-$XPT$E_RNG)
; 0519 else if .DLINK neq .DLINKX then
; 0520 return (-$XPT$E_FMT)
; 0521 !
; 0522 ! Destination pair is OK - return "success"
; 0523 ! Also, delete the table entry if the message is a DC
; 0524 !
; 0525
; 0526 else begin
; 0527 if .MSGFLG eql DC_MSGflgs then INTPH2(.CCB,1,.DESTNODE,.SRCNODE);
; 0528 return (CS_SUC)
; 0529 end
; 0530 end
; 0531 end
; 0532
; 0533
; 0534 !***********************************!
; 0535 ! TYPE 1 - routing header present !
; 0536 !***********************************!
; 0537
; 0538
; 0539 else begin
; 0540
; 0541 !
; 0542 ! Skip over the routing header, if any
; 0543 !
; 0544
; 0545 MSGFLG = getb(PTR);
; 0546 if biton(.MSGFLG,2) then begin !Routing header present -
; 0547 RET = getb(PTR); !Pick up dest. node name length
; 0548 PTR = ch$plus(.PTR,.RET); !Skip over name
; 0549 RET = getb(PTR); !Pick up source node name length
; 0550 PTR = ch$plus(.PTR,.RET); !Skip over name
; 0551 MSGFLG = getb(PTR); !Pick up NSP message flags
; 0552 end;
; 0553
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 10
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (4)
; 0554 !
; 0555 ! Pick up source and destination link addresses
; 0556 !
; 0557
; 0558 DLINK = getw(PTR);
; 0559 SLINK = getw(PTR);
; 0560
; 0561 !
; 0562 ! Message not CI, CC, DI or DC - ignore it
; 0563 !
; 0564
; 0565 select .MSGFLG of
; 0566 set
; 0567
; 0568 !
; 0569 ! CI message
; 0570 !
; 0571
; 0572 [CI_MSGflgs]: begin
; 0573 if SCAN(LTT,HALF,..SRCNODE,.SLINK) !Scan for a match on the source pair
; 0574 neq -1 then begin !Found: cannibalize the entry -
; P 0575 BPT(XPT$_ICPT0,..SRCNODE,.SLINK, ! flag the "duplicate
; 0576 ..DESTNODE,.DLINK); ! CI" event
; 0577 if .HALF eql 0 then ! determine which half of
; 0578 LTT = LTT[LTTnode2]; ! the entry the match was on
; 0579 LTT[LTTnode] = ..DESTNODE; ! fill in the
; 0580 LTT[LTTlink] = 0; ! other half
; 0581 end
; 0582 else !Not found -
; 0583 if SCAN(LTT,HALF,-1,-1) ! scan for a free entry
; 0584 eql -1 then BPT(XPT$_NFI) ! none found - ignore message
; 0585 else begin
; 0586 LTT[LTTnode1] = ..SRCNODE; ! fill in pair 1 in the entry
; 0587 LTT[LTTlink1] = .SLINK; ! with the source pair from the msg
; 0588 LTT[LTTnode2] = ..DESTNODE; ! fill in node slot 2 with dest. node
; 0589 LTT[LTTlink2] = 0; ! and clear link slot 2 for CC
; 0590 end
; 0591 end;
; 0592
; 0593 !
; 0594 ! CC, DI or DC message - scan LTT for match on destination node/link pair
; 0595 !
; 0596
; 0597 [CC_MSGflgs,DI_MSGflgs,DC_MSGflgs]: begin
; 0598 RET = SCAN (LTT,HALF,..DESTNODE,.DLINK);
; 0599 LTTx = .LTT;
; 0600 if .RET eql -1 then begin !No match - BUG
; 0601 if .MSGFLG neq DC_MSGflgs then
; 0602 BPT(XPT$_ICPT1,.MSGFLG,..SRCNODE,.SLINK,..DESTNODE,.DLINK);
; 0603 return(CS_SUC)
; 0604 end
; 0605 else if .HALF eql 0 then LTT = LTT[LTTnode2]; !Match - choose half
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 11
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (4)
; 0606 end;
; 0607
; 0608 !
; 0609 ! CC or DI message - fill in second half of LTT entry
; 0610 !
; 0611
; 0612 [CC_MSGflgs,DI_MSGflgs]: begin
; 0613 if ..SRCNODE neq .LTT[LTTnode] then !No source node match - BUG
; P 0614 BPT(XPT$_ICPT2,.MSGFLG,..SRCNODE,.SLINK,
; 0615 ..DESTNODE,.DLINK)
; 0616 else LTT[LTTlink] = .SLINK; !Fill in other link entry
; 0617 end;
; 0618
; 0619 !
; 0620 ! DC message - delete matched entry from LTT
; 0621 !
; 0622
; 0623 [DC_MSGflgs]: begin
; 0624 if ((..SRCNODE eql .LTT[LTTnode]) ! If the source node/link
; 0625 and (.SLINK eql .LTT[LTTlink])) ! pair matches the
; 0626 then begin ! LLT entry,
; 0627 LTT = .LTTx; ! clear out
; 0628 incr I from 0 to 3 do ! the entry
; 0629 VECTOR[.LTT,.I] = -1; !
; 0630 end;
; 0631 ! then BPT(XPT$_ICPT2,.MSGFLG,..SRCNODE, !* Old "unmatch" code:
; 0632 ! .SLINK,..DESTNODE,.DLINK); !* eliminate eventually
; 0633 end;
; 0634 tes;
; 0635
; 0636 return (CS_SUC) !Always return success; caller never looks
; 0637 end;
; 0638 end; !End of INTPH2
.GLOBL KISAR6, GTLINE
.SBTTL INTPH2
000000 162706 000016 INTPH2::
U.2: SUB #16,SP ; 0331
000004 016503 000002 MOV 2(R5),R3 ; CCB(.AP.),* 0455
000010 016367 000016 000000G MOV 16(R3),KISAR6
000016 016300 000020 MOV 20(R3),R0 ; *,PTRA
000022 016366 000022 000002 MOV 22(R3),2(SP) ; *,RET
000030 010001 MOV R0,R1 ; PTRA,PTR 0456
000032 005765 000004 TST 4(R5) ; TYPE(.AP.) 0462
000036 001402 BEQ 1$
000040 000167 000420 JMP 12$
000044 005000 1$: CLR R0 ; ILINE 0468
000046 156300 000010 BISB 10(R3),R0 ; *,ILINE
000052 004767 000000G JSR PC,GTLINE ; 0469
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 12
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (4)
000056 010002 MOV R0,R2 ; *,LINEB
000060 126227 000002 000004 CMPB 2(R2),#4 ; *(LINEB),* 0470
000066 001414 BEQ 2$
000070 126227 000002 000005 CMPB 2(R2),#5 ; *(LINEB),* 0471
000076 001410 BEQ 2$
000100 012746 177760 MOV #-20,-(SP) ; 0472
000104 012746 000001 MOV #1,-(SP)
000110 004767 000000G JSR PC,$STOP
000114 022626 CMP (SP)+,(SP)+
000116 000403 BR 3$ ; 0470
000120 016275 000004 000010 2$: MOV 4(R2),@10(R5) ; *(LINEB),SRCNODE(.AP.) 0473
000126 005002 3$: CLR R2 ; MSGFLG 0479
000130 152102 BISB (R1)+,R2 ; PTR,MSGFLG
000132 112166 000014 MOVB (R1)+,14(SP) ; PTR,X 0480
000136 112166 000015 MOVB (R1)+,15(SP) ; PTR,X
000142 016666 000014 000004 MOV 14(SP),4(SP) ; X,DLINK
000150 112166 000014 MOVB (R1)+,14(SP) ; PTR,X 0481
000154 112166 000015 MOVB (R1)+,15(SP) ; PTR,X
000160 016604 000014 MOV 14(SP),R4 ; X,SLINK
000164 012746 000014 MOV #14,-(SP) ; 0487
000170 060616 ADD SP,(SP) ; LTT,*
000172 012746 000014 MOV #14,-(SP)
000176 060616 ADD SP,(SP) ; HALF,*
000200 016566 000010 000012 MOV 10(R5),12(SP) ; SRCNODE(.AP.),*
000206 017646 000012 MOV @12(SP),-(SP)
000212 010446 MOV R4,-(SP) ; SLINK,*
000214 004767 177422 JSR PC,U.1
000220 062706 000010 ADD #10,SP
000224 005200 INC R0 ; 0493
000226 001033 BNE 5$
000230 020227 000030 CMP R2,#30 ; MSGFLG,* 0494
000234 001403 BEQ 4$
000236 020227 000050 CMP R2,#50 ; MSGFLG,* 0495
000242 001060 BNE 8$
000244 016700 000002G 4$: MOV .CRDAT+2,R0 ; 0497
000250 016075 000056 000006 MOV 56(R0),@6(R5) ; *,DESTNODE(.AP.)
000256 016646 000006 MOV 6(SP),-(SP) ; 0498
000262 016546 000006 MOV 6(R5),-(SP) ; DESTNODE(.AP.),*
000266 012746 000001 MOV #1,-(SP)
000272 010346 MOV R3,-(SP)
000274 012746 000004 MOV #4,-(SP)
000300 012746 000136' MOV #INTPH2,-(SP)
000304 004767 000000G JSR PC,$CALL
000310 022626 CMP (SP)+,(SP)+
000312 000167 000644 JMP 19$ ; 0496
000316 005766 000010 5$: TST 10(SP) ; HALF 0509
000322 001003 BNE 6$
000324 062766 000004 000012 ADD #4,12(SP) ; *,LTT
000332 016516 000006 6$: MOV 6(R5),(SP) ; DESTNODE(.AP.),* 0510
000336 017676 000012 000000 MOV @12(SP),@0(SP) ; LTT,*
000344 016600 000012 MOV 12(SP),R0 ; LTT,* 0511
000350 016001 000002 MOV 2(R0),R1 ; *,DLINKX
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 13
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (4)
000354 016700 000002G MOV .CRDAT+2,R0 ; 0517
000360 027660 000000 000016 CMP @0(SP),16(R0)
000366 101403 BLOS 7$
000370 012700 177776 MOV #-2,R0
000374 000405 BR 9$
000376 026601 000004 7$: CMP 4(SP),R1 ; DLINK,DLINKX 0519
000402 001404 BEQ 10$
000404 012700 177774 8$: MOV #-4,R0
000410 000167 000760 9$: JMP 28$
000414 020227 000110 10$: CMP R2,#110 ; MSGFLG,* 0527
000420 001017 BNE 11$
000422 016646 000006 MOV 6(SP),-(SP)
000426 016646 000002 MOV 2(SP),-(SP)
000432 012746 000001 MOV #1,-(SP)
000436 010346 MOV R3,-(SP)
000440 012746 000004 MOV #4,-(SP)
000444 012746 000136' MOV #INTPH2,-(SP)
000450 004767 000000G JSR PC,$CALL
000454 062706 000014 ADD #14,SP
000460 000167 000704 11$: JMP 27$ ; 0519
000464 005002 12$: CLR R2 ; MSGFLG 0545
000466 152102 BISB (R1)+,R2 ; PTR,MSGFLG
000470 032702 000002 BIT #2,R2 ; *,MSGFLG 0546
000474 001416 BEQ 13$
000476 112166 000002 MOVB (R1)+,2(SP) ; PTR,RET 0547
000502 105066 000003 CLRB 3(SP) ; RET
000506 066601 000002 ADD 2(SP),R1 ; RET,PTR 0548
000512 112166 000002 MOVB (R1)+,2(SP) ; PTR,RET 0549
000516 105066 000003 CLRB 3(SP) ; RET
000522 066601 000002 ADD 2(SP),R1 ; RET,PTR 0550
000526 005002 CLR R2 ; MSGFLG 0551
000530 152102 BISB (R1)+,R2 ; PTR,MSGFLG
000532 112166 000014 13$: MOVB (R1)+,14(SP) ; PTR,X 0558
000536 112166 000015 MOVB (R1)+,15(SP) ; PTR,X
000542 016666 000014 000004 MOV 14(SP),4(SP) ; X,DLINK
000550 112166 000014 MOVB (R1)+,14(SP) ; PTR,X 0559
000554 112166 000015 MOVB (R1)+,15(SP) ; PTR,X
000560 016604 000014 MOV 14(SP),R4 ; X,SLINK
000564 020227 000030 CMP R2,#30 ; MSGFLG,* 0565
000570 001115 BNE 17$
000572 012746 000014 MOV #14,-(SP) ; 0573
000576 060616 ADD SP,(SP) ; LTT,*
000600 012746 000014 MOV #14,-(SP)
000604 060616 ADD SP,(SP) ; HALF,*
000606 017503 000010 MOV @10(R5),R3 ; SRCNODE(.AP.),*
000612 010346 MOV R3,-(SP)
000614 010446 MOV R4,-(SP) ; SLINK,*
000616 004767 177020 JSR PC,U.1
000622 062706 000010 ADD #10,SP
000626 005200 INC R0 ; 0574
000630 001434 BEQ 15$
000632 016646 000004 MOV 4(SP),-(SP) ; DLINK,* 0576
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 14
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (4)
000636 017546 000006 MOV @6(R5),-(SP) ; DESTNODE(.AP.),*
000642 010446 MOV R4,-(SP) ; SLINK,*
000644 010346 MOV R3,-(SP)
000646 012746 100052 MOV #-77726,-(SP)
000652 012746 000005 MOV #5,-(SP)
000656 004767 000000G JSR PC,$IGNAL
000662 005766 000024 TST 24(SP) ; HALF 0577
000666 001003 BNE 14$
000670 062766 000004 000026 ADD #4,26(SP) ; *,LTT 0578
000676 017576 000006 000026 14$: MOV @6(R5),@26(SP) ; DESTNODE(.AP.),LTT 0579
000704 016600 000026 MOV 26(SP),R0 ; LTT,* 0580
000710 005060 000002 CLR 2(R0)
000714 062706 000014 ADD #14,SP ; 0574
000720 000441 BR 17$ ; 0572
000722 012746 000014 15$: MOV #14,-(SP) ; 0583
000726 060616 ADD SP,(SP) ; LTT,*
000730 012746 000014 MOV #14,-(SP)
000734 060616 ADD SP,(SP) ; HALF,*
000736 012746 177777 MOV #-1,-(SP)
000742 011646 MOV (SP),-(SP)
000744 004767 176672 JSR PC,U.1
000750 062706 000010 ADD #10,SP
000754 005200 INC R0 ; 0584
000756 001010 BNE 16$
000760 012746 100103 MOV #-77675,-(SP)
000764 012746 000001 MOV #1,-(SP)
000770 004767 000000G JSR PC,$IGNAL
000774 022626 CMP (SP)+,(SP)+
000776 000412 BR 17$ ; 0583
001000 016600 000012 16$: MOV 12(SP),R0 ; LTT,* 0586
001004 010310 MOV R3,(R0)
001006 010460 000002 MOV R4,2(R0) ; SLINK,* 0587
001012 017560 000006 000004 MOV @6(R5),4(R0) ; DESTNODE(.AP.),* 0588
001020 005060 000006 CLR 6(R0) ; 0589
001024 020227 000050 17$: CMP R2,#50 ; MSGFLG,* 0565
001030 001406 BEQ 18$
001032 020227 000070 CMP R2,#70 ; MSGFLG,*
001036 001403 BEQ 18$
001040 020227 000110 CMP R2,#110 ; MSGFLG,*
001044 001061 BNE 22$
001046 012746 000014 18$: MOV #14,-(SP) ; 0598
001052 060616 ADD SP,(SP) ; LTT,*
001054 012746 000014 MOV #14,-(SP)
001060 060616 ADD SP,(SP) ; HALF,*
001062 017546 000006 MOV @6(R5),-(SP) ; DESTNODE(.AP.),*
001066 016646 000012 MOV 12(SP),-(SP) ; DLINK,*
001072 004767 176544 JSR PC,U.1
001076 010066 000012 MOV R0,12(SP) ; *,RET
001102 016603 000022 MOV 22(SP),R3 ; LTT,LTTX 0599
001106 020027 177777 CMP R0,#-1 ; RET,* 0600
001112 001026 BNE 20$
001114 020227 000110 CMP R2,#110 ; MSGFLG,* 0601
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 15
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (4)
001120 001420 BEQ 19$
001122 016616 000014 MOV 14(SP),(SP) ; DLINK,* 0602
001126 017546 000006 MOV @6(R5),-(SP) ; DESTNODE(.AP.),*
001132 010446 MOV R4,-(SP) ; SLINK,*
001134 017546 000010 MOV @10(R5),-(SP) ; SRCNODE(.AP.),*
001140 010246 MOV R2,-(SP) ; MSGFLG,*
001142 012746 100063 MOV #-77715,-(SP)
001146 012746 000006 MOV #6,-(SP)
001152 004767 000000G JSR PC,$IGNAL
001156 062706 000014 ADD #14,SP
001162 062706 000010 19$: ADD #10,SP ; 0600
001166 000500 BR 27$
001170 005766 000020 20$: TST 20(SP) ; HALF 0605
001174 001003 BNE 21$
001176 062766 000004 000022 ADD #4,22(SP) ; *,LTT
001204 062706 000010 21$: ADD #10,SP ; 0597
001210 020227 000050 22$: CMP R2,#50 ; MSGFLG,* 0565
001214 001403 BEQ 23$
001216 020227 000070 CMP R2,#70 ; MSGFLG,*
001222 001031 BNE 25$
001224 027576 000010 000012 23$: CMP @10(R5),@12(SP) ; SRCNODE(.AP.),LTT 0613
001232 001421 BEQ 24$
001234 016646 000004 MOV 4(SP),-(SP) ; DLINK,* 0615
001240 017546 000006 MOV @6(R5),-(SP) ; DESTNODE(.AP.),*
001244 010446 MOV R4,-(SP) ; SLINK,*
001246 017546 000010 MOV @10(R5),-(SP) ; SRCNODE(.AP.),*
001252 010246 MOV R2,-(SP) ; MSGFLG,*
001254 012746 100073 MOV #-77705,-(SP)
001260 012746 000006 MOV #6,-(SP)
001264 004767 000000G JSR PC,$IGNAL
001270 062706 000016 ADD #16,SP
001274 000404 BR 25$ ; 0613
001276 016600 000012 24$: MOV 12(SP),R0 ; LTT,* 0616
001302 010460 000002 MOV R4,2(R0) ; SLINK,*
001306 020227 000110 25$: CMP R2,#110 ; MSGFLG,* 0565
001312 001026 BNE 27$
001314 027576 000010 000012 CMP @10(R5),@12(SP) ; SRCNODE(.AP.),LTT 0624
001322 001022 BNE 27$
001324 016600 000012 MOV 12(SP),R0 ; LTT,* 0625
001330 020460 000002 CMP R4,2(R0) ; SLINK,*
001334 001015 BNE 27$
001336 010366 000012 MOV R3,12(SP) ; LTTX,LTT 0627
001342 005000 CLR R0 ; I 0628
001344 010001 26$: MOV R0,R1 ; I,* 0629
001346 006301 ASL R1
001350 066601 000012 ADD 12(SP),R1 ; LTT,*
001354 012711 177777 MOV #-1,(R1)
001360 005200 INC R0 ; I 0628
001362 020027 000003 CMP R0,#3 ; I,*
001366 003766 BLE 26$
001370 012700 000001 27$: MOV #1,R0 ; 0462
001374 062706 000016 28$: ADD #16,SP ; 0331
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 16
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (4)
001400 000207 RTS PC
; Routine Size: 385 words, Routine Base: $CODE$ + 0136
; Maximum stack depth per invocation: 18 words
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 17
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (5)
; 0639
; 0640 global
; 0641 routine CLEAN_LINK (NODE,LINK): CALL$ novalue =
; 0642
; 0643 !++
; 0644 ! FUNCTIONAL DESCRIPTION:
; 0645 !
; 0646 ! Cleans out the Link Translate Table. All entries containing the
; 0647 ! node/link pair specified are deleted from the table. If the link
; 0648 ! address specified is 0, all entries containing the specified node
; 0649 ! address are deleted.
; 0650 !
; 0651 ! The purpose of this routine is to allow a link which has been closed
; 0652 ! due to timeout or other abnormal conditions, and which has not gone
; 0653 ! through the standard DI/DC interchange which would clean the link out
; 0654 ! of the Link Translate Table, to be cleaned out explicitly by NSP (for
; 0655 ! a local link) or the Decision module (for a route-through link).
; 0656 !
; 0657 ! FORMAL PARAMETERS
; 0658 !
; 0659 ! NODE Node address of link(s) to be deleted. This will be the
; 0660 ! local node address (if NSP called), or the address of a
; 0661 ! node that has become unreachable.
; 0662 !
; 0663 ! LINK Link address of link(s) to be deleted, or 0 for "all links
; 0664 ! for the node".
; 0665 !
; 0666 ! IMPLICIT INPUTS
; 0667 !
; 0668 ! NONE.
; 0669 !
; 0670 ! ROUTINE VALUE:
; 0671 ! COMPLETION CODES:
; 0672 !
; 0673 ! NONE.
; 0674 !
; 0675 ! SIDE EFFECTS:
; 0676 !
; 0677 ! Any messages which come into Transport for the link will cause
; 0678 ! debugging SIGNALS (if present) to be invoked by INTPH2.
; 0679 !
; 0680 !--
; 0681
; 0682 begin
; 0683
; 0684 local LINEb,NODEb;
; 0685 require 'XPTSYM';
; 0722 local HALF,DN,DL,SL,DN_L,DN_P,SN_L,SN_P;
; 0723 local LTT: ref block field(LTTfields);
; 0724 local CCB: ref block field(C_XPT_fields);
; 0725
; 0726 while (SCAN(LTT,HALF,.NODE,.LINK) neq -1) ! Scan for a matching entry
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 18
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (5)
; 0727 do begin
; 0728 if .HALF eql 0 then begin
; 0729 DN = .LTT[LTTnode2];
; 0730 DL = .LTT[LTTlink2];
; 0731 SL = .LTT[LTTlink1];
; 0732 end
; 0733 else begin
; 0734 DN = .LTT[LTTnode1];
; 0735 DL = .LTT[LTTlink1];
; 0736 SL = .LTT[LTTlink2];
; 0737 end;
; 0738 NODEb = $XPT_GET_NODE_DB(.DN);
; 0739 LINEb = $XPT_GET_LINE_DB(.OL);
; 0740 if (not .Local_node
; 0741 and ((.Nty eql PhTwo) or (.Nty eql TOPS20))
; 0742 and (.Nid eql .DN)
; 0743 and $MCB_GET_CCB_AND_BUFFER(22,CCB)) then begin
; 0744 CCB[C_XPT_ALLOCATION] = 22;
; 0745 DN_L = .Nnml;
; 0746 DN_P = byt$ptr(Nnm);
; 0747 SN_L = .NODEname_length;
; 0748 SN_P = byt$ptr(NODEname,0);
; 0749 SEND_DC(.CCB,.LINEb,.DN_L,.DN_P,.SN_L,.SN_P,.DL,.SL,NO_PATH_ERROR);
; 0750 end;
; 0751 LTT[LTTnode1] = -1; ! Found one -
; 0752 LTT[LTTlink1] = -1; ! clear it out
; 0753 LTT[LTTnode2] = -1;
; 0754 LTT[LTTlink2] = -1;
; 0755 end;
; 0756
; 0757 end; !End of CLEAN_LINK
.GLOBL GTNODE, $CBBGT
.SBTTL CLEAN.LINK
000000 162706 000032 CLEAN.LINK::
U.3: SUB #32,SP ; 0641
000004 012746 000032 1$: MOV #32,-(SP) ; 0726
000010 060616 ADD SP,(SP) ; LTT,*
000012 012746 000032 MOV #32,-(SP)
000016 060616 ADD SP,(SP) ; HALF,*
000020 016546 000002 MOV 2(R5),-(SP) ; NODE(.AP.),*
000024 016546 000004 MOV 4(R5),-(SP) ; LINK(.AP.),*
000030 004767 176204 JSR PC,U.1
000034 062706 000010 ADD #10,SP
000040 005200 INC R0
000042 001572 BEQ 6$
000044 016602 000030 MOV 30(SP),R2 ; LTT,* 0729
000050 011766 000006 MOV (PC),6(SP) ; 0730
000054 060266 000006 ADD R2,6(SP)
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 19
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (5)
000060 012766 000002 000004 MOV #2,4(SP) ; 0731
000066 060266 000004 ADD R2,4(SP)
000072 005766 000026 TST 26(SP) ; HALF 0728
000076 001012 BNE 2$
000100 016266 000004 000002 MOV 4(R2),2(SP) ; *,DN 0729
000106 017666 000006 000022 MOV @6(SP),22(SP) ; *,DL 0730
000114 017666 000004 000024 MOV @4(SP),24(SP) ; *,SL 0731
000122 000410 BR 3$ ; 0728
000124 011266 000002 2$: MOV (R2),2(SP) ; *,DN 0734
000130 017666 000004 000022 MOV @4(SP),22(SP) ; *,DL 0735
000136 017666 000006 000024 MOV @6(SP),24(SP) ; *,SL 0736
000144 016600 000002 3$: MOV 2(SP),R0 ; DN,* 0738
000150 004767 000000G JSR PC,GTNODE
000154 010066 000020 MOV R0,20(SP) ; *,NODEB
000160 111000 MOVB (R0),R0 ; NODEB,* 0739
000162 004767 000000G JSR PC,GTLINE
000166 010016 MOV R0,(SP) ; *,LINEB
000170 032776 000400 000020 BIT #400,@20(SP) ; *,NODEB 0740
000176 001102 BNE 5$
000200 126027 000002 000004 CMPB 2(R0),#4 ; *(LINEB),* 0741
000206 001404 BEQ 4$
000210 126027 000002 000005 CMPB 2(R0),#5 ; *(LINEB),*
000216 001072 BNE 5$
000220 011600 4$: MOV (SP),R0 ; LINEB,* 0742
000222 026066 000004 000002 CMP 4(R0),2(SP) ; *(LINEB),DN
000230 001065 BNE 5$
000232 012701 000026 MOV #26,R1 ; 0743
000236 004767 000000G JSR PC,$CBBGT
000242 103460 BCS 5$
000244 010403 MOV R4,R3 ; $MCB$R4,CCB
000246 012763 000026 000034 MOV #26,34(R3) ; *,*(CCB) 0744
000254 011601 MOV (SP),R1 ; LINEB,* 0745
000256 116100 000007 MOVB 7(R1),R0 ; *(LINEB),*
000262 010066 000010 MOV R0,10(SP) ; *,DN.L
000266 010166 000012 MOV R1,12(SP) ; LINEB,DN.P 0746
000272 062766 000010 000012 ADD #10,12(SP) ; *,DN.P
000300 016700 000002G MOV .CRDAT+2,R0 ; 0747
000304 016066 000114 000014 MOV 114(R0),14(SP) ; *,SN.L
000312 010066 000016 MOV R0,16(SP) ; XPTDB,SN.P 0748
000316 062766 000116 000016 ADD #116,16(SP) ; *,SN.P
000324 012746 000047 MOV #47,-(SP) ; 0749
000330 016646 000026 MOV 26(SP),-(SP) ; SL,*
000334 016646 000026 MOV 26(SP),-(SP) ; DL,*
000340 016646 000024 MOV 24(SP),-(SP) ; SN.P,*
000344 016646 000024 MOV 24(SP),-(SP) ; SN.L,*
000350 016646 000024 MOV 24(SP),-(SP) ; DN.P,*
000354 016646 000024 MOV 24(SP),-(SP) ; DN.L,*
000360 010146 MOV R1,-(SP) ; LINEB,*
000362 010346 MOV R3,-(SP) ; CCB,*
000364 012746 000011 MOV #11,-(SP)
000370 012746 000000V MOV #U.4,-(SP)
000374 004767 000000G JSR PC,$CALL
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 20
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (5)
000400 062706 000026 ADD #26,SP ; 0743
000404 012712 177777 5$: MOV #-1,(R2) ; 0751
000410 011276 000004 MOV (R2),@4(SP) ; 0752
000414 011262 000004 MOV (R2),4(R2) ; 0753
000420 011276 000006 MOV (R2),@6(SP) ; 0754
000424 000167 177354 JMP 1$ ; 0726
000430 062706 000032 6$: ADD #32,SP ; 0641
000434 000207 RTS PC
; Routine Size: 143 words, Routine Base: $CODE$ + 1540
; Maximum stack depth per invocation: 25 words
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 21
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (6)
; 0758
; 0759 global
; 0760 routine SEND_DC (CCB,LINEb,DEST_L,DEST_P,SOURCE_L,SOURCE_P,
; 0761 DESTLNK,SRCLNK,REASON): CALL$ novalue =
; 0762
; 0763 !++
; 0764 ! FUNCTIONAL DESCRIPTION:
; 0765 !
; 0766 ! Constructs and sends a Phase II DC message over a given line.
; 0767 !
; 0768 ! FORMAL PARAMETERS
; 0769 !
; 0770 ! CCB CCB to use to send the DC.
; 0771 ! CCB[C_BIAS] A buffer large enough to contain the DC
; 0772 ! CCB[C_ADDR] (anywhere from 12 to 22 bytes)
; 0773 ! CCB[C_XPT_ALLOCATION] The length of the buffer
; 0774 ! (for its eventual release)
; 0775 !
; 0776 ! DEST_L Length of the destination node name. If this value
; 0777 ! is zero, a routing header is not built.
; 0778 !
; 0779 ! DEST_P Pointer to the destination node name.
; 0780 !
; 0781 ! SOURCE_L Length of the source node name.
; 0782 !
; 0783 ! SOURCE_P Pointer to the source name name.
; 0784 !
; 0785 ! DESTLNK Destination link address.
; 0786 !
; 0787 ! SRCLNK Source link address.
; 0788 !
; 0789 ! REASON DC reason code.
; 0790 !
; 0791 ! IMPLICIT INPUTS
; 0792 !
; 0793 ! NONE.
; 0794 !
; 0795 ! ROUTINE VALUE:
; 0796 ! COMPLETION CODES:
; 0797 !
; 0798 ! NONE.
; 0799 !
; 0800 ! SIDE EFFECTS:
; 0801 !
; 0802 ! NONE.
; 0803 !
; 0804 !--
; 0805
; 0806 begin
; 0807
; 0808 require 'XPTSYM';
; 0845 map CCB: ref block field(C_XPT_fields);
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 22
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (6)
; 0846 pointer P;
; 0847
; 0848 P = .CCB[C_ADDR]; ! Address message buffer
; 0849 if .DEST_L neq 0 then begin ! Build a routing header:
; 0850 putb(PH2_RTflgs,P); ! Routing flags
; 0851 putb(.DEST_L,P); ! Dest. node name length
; 0852 P = ch$move(.DEST_L,.DEST_P,.P); ! Destination node name
; 0853 putb(.SOURCE_L,P); ! Source node name length
; 0854 P = ch$move(.SOURCE_L,.SOURCE_P,.P); ! Source node name
; 0855 end; ! Build the message:
; 0856 putb(DC_MSGflgs,P); ! Message flags
; 0857 putw(.DESTLNK,P); ! Destination link address
; 0858 putw(.SRCLNK,P); ! Source link address
; 0859 putw(.REASON,P); ! Reason code
; 0860 CCB[C_CNT] = ch$diff(.P,.CCB[C_ADDR]); ! Set up message length
; 0861
; 0862 CCB[C_XPT_TYPE] = NOcode; ! Set "don't use counters" code
; 0863
; 0864 CCB[C_HANDLE] = .TLIhandle;
; 0865 CCB[C_FNC] = FC_XME; ! Send the
; 0866 CCB[C_MOD] = TM_DAT; ! message out
; 0867 $MCB_SCHEDULE_CCB(.CCB);
; 0868
; 0869 end; !End of SEND_DC
.GLOBL $SCHED
.SBTTL SEND.DC
000000 005746 SEND.DC::
U.4: TST -(SP) ; 0760
000002 016504 000002 MOV 2(R5),R4 ; CCB(.AP.),* 0848
000006 016401 000020 MOV 20(R4),R1 ; *,P
000012 016500 000006 MOV 6(R5),R0 ; DEST.L(.AP.),* 0849
000016 001426 BEQ 1$
000020 112721 000106 MOVB #106,(R1)+ ; *,P 0850
000024 110021 MOVB R0,(R1)+ ; *,P 0851
000026 010046 MOV R0,-(SP) ; 0852
000030 016546 000010 MOV 10(R5),-(SP) ; DEST.P(.AP.),*
000034 010146 MOV R1,-(SP) ; P,*
000036 004767 000000G JSR PC,BL$MOV
000042 010001 MOV R0,R1 ; *,P
000044 116521 000012 MOVB 12(R5),(R1)+ ; SOURCE.L(.AP.),P 0853
000050 016516 000012 MOV 12(R5),(SP) ; SOURCE.L(.AP.),* 0854
000054 016546 000014 MOV 14(R5),-(SP) ; SOURCE.P(.AP.),*
000060 010146 MOV R1,-(SP) ; P,*
000062 004767 000000G JSR PC,BL$MOV
000066 010001 MOV R0,R1 ; *,P
000070 062706 000012 ADD #12,SP ; 0849
000074 112721 000110 1$: MOVB #110,(R1)+ ; *,P 0856
000100 016516 000016 MOV 16(R5),(SP) ; DESTLNK(.AP.),X 0857
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 23
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (6)
000104 111621 MOVB (SP),(R1)+ ; X,P
000106 116621 000001 MOVB 1(SP),(R1)+ ; X,P
000112 016516 000020 MOV 20(R5),(SP) ; SRCLNK(.AP.),X 0858
000116 111621 MOVB (SP),(R1)+ ; X,P
000120 116621 000001 MOVB 1(SP),(R1)+ ; X,P
000124 016516 000022 MOV 22(R5),(SP) ; REASON(.AP.),X 0859
000130 111621 MOVB (SP),(R1)+ ; X,P
000132 116621 000001 MOVB 1(SP),(R1)+ ; X,P
000136 010164 000022 MOV R1,22(R4) ; P,* 0860
000142 166464 000020 000022 SUB 20(R4),22(R4)
000150 112764 000006 000032 MOVB #6,32(R4) ; 0862
000156 016500 000004 MOV 4(R5),R0 ; LINEB(.AP.),* 0864
000162 016064 000030 000010 MOV 30(R0),10(R4)
000170 112764 000002 000012 MOVB #2,12(R4) ; 0865
000176 105064 000013 CLRB 13(R4) ; 0866
000202 004767 000000G JSR PC,$SCHED ; 0867
000206 005726 TST (SP)+ ; 0760
000210 000207 RTS PC
; Routine Size: 69 words, Routine Base: $CODE$ + 2176
; Maximum stack depth per invocation: 7 words
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 24
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (7)
; 0870
; 0871 global
; 0872 routine CLN_RETRY (LINEb): novalue =
; 0873
; 0874 !++
; 0875 ! FUNCTIONAL DESCRIPTION:
; 0876 !
; 0877 ! This routine cleans out of the retry queue all CCBs which:
; 0878 !
; 0879 ! 1) arrived over a specific circuit, or
; 0880 ! 2) have as a destination the adjacent node over that circuit.
; 0881 !
; 0882 ! FORMAL PARAMETERS
; 0883 !
; 0884 ! LINEb Address of a circuit's data base entry.
; 0885 !
; 0886 ! IMPLICIT INPUTS
; 0887 !
; 0888 ! NONE.
; 0889 !
; 0890 ! ROUTINE VALUE:
; 0891 ! COMPLETION CODES:
; 0892 !
; 0893 ! NONE.
; 0894 !
; 0895 ! SIDE EFFECTS:
; 0896 !
; 0897 ! NONE.
; 0898 !
; 0899 !--
; 0900
; 0901 begin
; 0902
; 0903 require 'XPTSYM';
; 0940 local CCB: ref block field(C_XPT_fields);
; 0941
; 0942 local TEMP_QUEUE: vector[2];
; 0943 local LEN;
; 0944 pointer P;
; 0945
; 0946 $MCB_INITIALIZE_QUEUE(TEMP_QUEUE);
; 0947
; 0948 !
; 0949 ! Pick up each CCB on the retry queue. If the CCB doesn't "belong" to
; 0950 ! the specified circuit, place in the temporary holding queue.
; 0951 !
; 0952
; 0953 while $MCB_DEQUEUE_CCB(REqueue,CCB) do
; 0954 if not
; 0955 ((.CCB[C_LIN] eql .LINEnumber) ! CCB arrived over circuit
; 0956 or begin
; 0957 MAP$(.CCB[C_BIAS]); ! Map to and
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 25
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (7)
; 0958 P = .CCB[C_ADDR]; ! address buffer
; 0959 if bitoff((getb(P)),%o'10') then ! No header -
; 0960 FALSE ! for local node
; 0961 else begin
; 0962 LEN = getb(P); ! Pick up dest. name length
; 0963 ((.LEN eql .Nnml) ! Name length must match
; 0964 and ch$eql(.LEN,.P,.LEN, ! and names must compare
; 0965 byt$ptr(Nnm),0)) ! equal
; 0966 end
; 0967 end)
; 0968 then CMQIN$(TEMP_QUEUE,.CCB) ! No match - keep this one
; 0969 else begin
; 0970 local SAVE; ! Otherwise -
; 0971 SAVE = .CCB[C_XPT_TYPE]; ! throw the CCB
; 0972 CCB[C_XPT_TYPE] = NOcode; ! out (but don't
; 0973 _TERMINATE(.CCB,CE_DIS); ! affect the quotas)
; 0974 CCB[C_XPT_TYPE] = .SAVE;
; 0975 end;
; 0976
; 0977 !
; 0978 ! Now put back everything we kept into the retry queue.
; 0979 !
; 0980
; 0981 while CMQRM$(TEMP_QUEUE,CCB) do
; 0982 CMQIN$(REqueue,.CCB);
; 0983
; 0984 end; !End of CLN_RETRY
.GLOBL $CMQRM, $CMQIN
.SBTTL CLN.RETRY
000000 004167 000000G CLN.RETRY::
U.5: JSR R1,$SAVE5 ; 0872
000004 162706 000006 SUB #6,SP
000010 005066 000002 CLR 2(SP) ; $MCB$HIS.QUEUE 0946
000014 012766 000002 000004 MOV #2,4(SP) ; *,$MCB$HIS.QUEUE+2
000022 060666 000004 ADD SP,4(SP) ; $MCB$HIS.QUEUE,$MCB$HIS.QUEUE+2
000026 016602 000024 MOV 24(SP),R2 ; LINEB,* 0955
000032 016703 000002G 1$: MOV .CRDAT+2,R3 ; 0953
000036 062703 000110 ADD #110,R3
000042 004767 000000G JSR PC,$CMQRM
000046 103474 BCS 4$
000050 010405 MOV R4,R5 ; $MCB$R4,CCB
000052 126562 000010 000026 CMPB 10(R5),26(R2) ; *(CCB),* 0955
000060 001444 BEQ 3$
000062 016567 000016 000000G MOV 16(R5),KISAR6 ; *(CCB),* 0957
000070 016501 000020 MOV 20(R5),R1 ; *(CCB),P 0958
000074 132721 000010 BITB #10,(R1)+ ; *,P 0959
000100 001425 BEQ 2$
000102 112116 MOVB (R1)+,(SP) ; P,LEN 0962
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 26
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (7)
000104 105066 000001 CLRB 1(SP) ; LEN
000110 116200 000007 MOVB 7(R2),R0 ; 0963
000114 021600 CMP (SP),R0 ; LEN,*
000116 001016 BNE 2$
000120 011646 MOV (SP),-(SP) ; LEN,* 0965
000122 010146 MOV R1,-(SP) ; P,*
000124 016646 000004 MOV 4(SP),-(SP) ; LEN,*
000130 010246 MOV R2,-(SP)
000132 062716 000010 ADD #10,(SP)
000136 005046 CLR -(SP)
000140 004767 000000G JSR PC,BL$EQL
000144 062706 000012 ADD #12,SP
000150 006000 ROR R0
000152 103407 BLO 3$
000154 012703 000002 2$: MOV #2,R3 ; 0968
000160 060603 ADD SP,R3 ; TEMP.QUEUE,*
000162 010504 MOV R5,R4 ; CCB,*
000164 004767 000000G JSR PC,$CMQIN
000170 000720 BR 1$ ; 0954
000172 012703 000032 3$: MOV #32,R3 ; 0971
000176 060503 ADD R5,R3 ; CCB,*
000200 111304 MOVB (R3),R4 ; *,SAVE
000202 112713 000006 MOVB #6,(R3) ; 0972
000206 012746 177520 MOV #-260,-(SP) ; 0973
000212 010546 MOV R5,-(SP) ; CCB,*
000214 012746 000002 MOV #2,-(SP)
000220 012746 000000G MOV #.TERMINATE,-(SP)
000224 004767 000000G JSR PC,$CALL
000230 110413 MOVB R4,(R3) ; SAVE,* 0974
000232 062706 000010 ADD #10,SP ; 0969
000236 000675 BR 1$ ; 0953
000240 012703 000002 4$: MOV #2,R3 ; 0981
000244 060603 ADD SP,R3 ; TEMP.QUEUE,*
000246 004767 000000G JSR PC,$CMQRM
000252 103410 BCS 5$
000254 010405 MOV R4,R5 ; $MCB$R4,CCB
000256 016703 000002G MOV .CRDAT+2,R3 ; 0982
000262 062703 000110 ADD #110,R3
000266 004767 000000G JSR PC,$CMQIN
000272 000762 BR 4$ ; 0981
000274 062706 000006 5$: ADD #6,SP ; 0872
000300 000207 RTS PC
; Routine Size: 97 words, Routine Base: $CODE$ + 2410
; Maximum stack depth per invocation: 15 words
; 0985
; 0986 end !End of module XPESEL
; 0987 eludom
XPESEL 25-Jan-1983 09:58:21 TOPS-20 Bliss-16 2A(530) Page 27
X01090 30-Dec-1982 21:21:52 NETPKG:<XPT>XPESEL.BLI.8 (7)
; OTS external references
.GLOBL $SAVE5, $CALL, $STOP, $IGNAL, BL$EQL
.GLOBL BL$MOV
; PSECT SUMMARY
;
; Psect Name Words Attributes
; XPEJMP 2 RO , I , LCL, REL, CON
; $CODE$ 741 RO , I , LCL, REL, CON
; LIBRARY STATISTICS
;
; -------- Symbols -------- Blocks
; File Total Loaded Percent Read
;
; NETPKG:<MCB>XPORTX.L16.15 599 2 0 0
; NETPKG:<MCB>MCBLIB.L16.15 372 41 11 0
; NETPKG:<MCB>NMXLIB.L16.13 200 0 0 0
; NETPKG:<XPT>XPTLIB.L16.3 510 196 38 0
; Size: 741 code + 2 data words
; Run Time: 00:13.3
; Elapsed Time: 00:45.9
; Memory Used: 69 pages
; Compilation Complete