.TITLE RMFNSP - GET NSP DATA FOR RM DISPLAY .IDENT /V01.00/ ; ; COPYRIGHT (C) 1979, 1980 BY ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; ; 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. ; ; ; MODULE DESCRIPTION: ; ; GET NSP DATA FOR SPECIFIED NODE FOR REMOTE (RM) NODE DISPLAY ; ; ; ; DISTRIBUTED SYSTEMS SOFTWARE ENGINEERING ; ; IDENT HISTORY: ; ; 1.00 01-APR-80 ; DECNET-11M/S V3.0 ; DECNET-11M-PLUS V1.0 ; .SBTTL MACROS .MCALL SLTDF$,PDVDF$,NSDDB$ NSDDB$ ; DEFINE NSP'S DDB OFFSETS AND SYMBOLS PDVDF$ ; DEFINE PDV OFFSETS AND SYMBOLS SLTDF$ ; DEFINE SLT OFFSETS AND SYMBOLS .SBTTL RMFNSP - FIND NODE INFORMATION ;+ ; ; RMFNSP - GET NODE INFORMATION FOR SPECIFIED NODE ; ; INPUTS: ; $RMNNN - NODE ADDRESS FOR SPECIFIED NODE ; ; OUPUTS: ; $RMTYS - ADDRESS OF STRING FOR NODE TYPE ; $RMSTS - ADDRESS OF STRING FOR NODE STATE ; $RMMHC - MAXIMUM HOPS, MAXIMUM COST ; $RMDEV - DEVICE NAME ; $RMCTL - CONTROLLER NUMBER ; $RMUNT - UNIT NUMBER (-1 IF NOT MUX DEVICE) ; $RMTRI - STATION NUMBER (-1 IF NOT MULTIPOINT DEVICE) ; $RMPDI - NSP'S PDV INDEX ; $RMPDV - NSP'S PDV ADDRESS ; $RMDDB - ADDRESS OF NSP'S DDB ; ;- .PSECT PAGE1 ; FORCE ALLOCATION TO FOLLOW PAGE CODE RMFNSP::CALL $SWSTK,90$ ;; ENTER SYSTEM STATE MOV #^RNSP,R2 ;; GET NSP'S PROCESS NAME CALL $PDVID ;; LOCATE NSP'S PDV BCC 10$ ;; BR IF FOUND JMP 90$ ;; BR IF NOT THERE 10$: MOV R2,$RMPDI ;; SAVE NSP'S PDV INDEX ADD $PDVTA,R2 ;; POINT TO NSP'S PDV MOV (R2),$RMPDV ;; SAVE NSP'S PDV ADDRESS MOV (R2),R1 ;; GET NSP'S PDV ADDRESS MOV Z.DAT(R1),R1 ;; GET NSP'S DDB ADDRESS MOV R1,$RMDDB ;; SAVE NSP'S DDB ADDRESS BNE 15$ ;; BR IF IT'S THERE JMP 90$ ;; BR IF NSP'S DDB NOT FOUND ; ; CHECK FOR PHASE II NODE ; 15$: MOV N$PLD(R1),R0 ;; GET NUMBER OF PLD'S MOV N$PLD+2(R1),R2 ;; POINT TO FIRST PLD 20$: CMP P$NOD(R2),$RMNNN ;; PLD FOR SPECIFIED NODE? BEQ 30$ ;; BR IF YES ADD #P$LEN,R2 ;; POINT TO NEXT PLD DEC R0 ;; MORE? BGT 20$ ;; BR IF YES BR 40$ ;; 30$: BIT #PF$PH2*400,P$LST(R2) ;; PHASE II NODE? BEQ 40$ ;; BR IF NO BIS #RM$PH2,$RMFLG ;; INDICATE PHASE II NODE MOV #$RMPH2,$RMTYS ;; STORE ADDRESS OF TYPE STRING MOV #$RMUNR,$RMSTS ;; ASSUME NODE IS UNREACHABLE CMPB #PS$UP,P$LST(R2) ;; IS NODE REACHABLE? BNE 90$ ;; BR IF NO MOV #$RMRCH,$RMSTS ;; STORE ADDRESS OF NODE STATE STRING BR 50$ ;; CONTINUE ; ; CHECK FOR REACHABILITY (PHASE III NODE) ; 40$: MOV #$RMUNR,$RMSTS ;; ASSUME UNREACHABLE MOV $RMNNN,R0 ;; GET SPECIFIED NODE ADDRESS CMP R0,N$NOD(R1) ;; NOT IN REACHABILITY LIST? BHIS 90$ ;; BR IF NO ASL R0 ;; MAKE IT AN INDEX ADD N$NOD+2(R1),R0 ;; POINT TO CORRECT ROL .IF DF,M$$MGE MOV KISAR5,-(SP) ;; SAVE CURRENT MAPPING MOV $RMPDV,R1 ;; POINT AT NSP'S PDV MOV Z.DSP(R1),KISAR5 ;; MAP TO NSP SPACE .IFTF MOV (R0),R2 ;; GET PLB ADDRESS .IFT MOV (SP)+,KISAR5 ;; RESTORE MAPPING TST R2 ;; IS NODE REACHABLE? .ENDC BEQ 90$ ;; BR IF UNREACHABLE MOV #$RMRCH,$RMSTS ;; INDICATE NODE IS REACHABLE ; ; CHECK NODE TYPE (PHASE III NODE) ; MOV #$RMEND,$RMTYS ;; ASSUME END NODE BIT #PF$END*400,P$LST(R2) ;; IS IT AN END NODE? BNE 50$ ;; BR IF YES MOV #$RMROU,$RMTYS ;; MUST BE ROUTING NODE ; ; GET LINE-ID ; 50$: MOVB #-1,$RMUNT ;; ASSUME NOT MULTIPLEXOR DEVICE MOVB #-1,$RMTRI ;; ASSUME NOT MULTIPOINT DEVICE CLR R0 ;; BISB P$CHN(R2),R0 ;; GET CHANNEL NUMBER MOV R0,$RMCHN ;; SAVE IT ASL R0 ;; CREATE AN INDEX MOV $RMPDV,R1 ;; GET NSP'S PDV ADD #Z.MAP,R1 ;; POINT TO LLC MAPPING TABLE ADD R0,R1 ;; INDEX INTO TABLE USING CHANNEL NUMBER CLR R5 ;; BISB 1(R1),R5 ;; GET STATION NUMBER CLR R0 ;; BISB (R1),R0 ;; GET SLN ASL R0 ;; MAKE IT AN INDEX ADD $SLTMA,R0 ;; INDEX INTO SLT VECTOR MOV (R0),R0 ;; GET SLT ADDRESS CLR R1 ;; BISB L.DDM(R0),R1 ;; GET DDM PDV INDEX ADD $PDVTA,R1 ;; INDEX INTO PDV VECTOR MOV (R1),R1 ;; GET PDV ADDRESS MOV Z.NAM(R1),$RMDEV ;; SAVE DEVICE NAME MOVB L.CTL(R0),$RMCTL ;; SAVE CONTROLLER NUMBER BIT #ZF.MUX,Z.FLG(R1) ;; MUX DEVICE? BEQ 60$ ;; BR IF NO MOVB L.UNT(R0),$RMUNT ;; SAVE UNIT NUMBER IF MUX DEVICE 60$: TSTB L.NSTA(R0) ;; MULTIPOINT DEVICE? BEQ 70$ ;; BR IF NO MOVB R5,$RMTRI ;; SAVE STATION NUMBER ; ; GET MINIMUM HOPS, MINIMUM COST ; 70$: BIT #RM$PH2,$RMFLG ;; PHASE 2 NODE? BNE 90$ ;; BR IF YES MOV $RMDDB,R1 ;; GET NSP'S DDB ADDRESS MOV $RMNNN,R0 ;; GET NODE ADDRESS DEC R0 ;; NO ZERO ENTRY IN TABLE ASL R0 ;; MAKE IT AN INDEX ADD N$MHMC+2(R1),R0 ;; POINT TO CORRECT WORD IN TABLE .IF DF,M$$MGE CMP #140000,R0 ;; IS ADDRESS IN POOL? BHI 80$ ;; BR IF YES BIC #140000,R0 ;; MUST BE MAPPED TO APR5 BIS #120000,R0 ;; 80$: MOV KISAR5,-(SP) ;; SAVE CURRENT MAPPING MOV $RMPDV,R1 ;; POINT AT NSP'S PDV MOV Z.DSP(R1),KISAR5 ;; MAP TO NSP SPACE MOV (R0),R1 ;; SAVE MINIMUM HOPS, MINIMUM COST MOV (SP)+,KISAR5 ;; RESTORE MAPPING MOV R1,$RMMHC ;; SAVE MINIMUM HOPS, MINIMUM COST .IFF MOV (R0),$RMMHC ;; SAVE MINIMUM HOPS, MINIMUM COST .ENDC 90$: RETURN .END