*DECK NPREGLL USETEXT CET USETEXT KDIS USETEXT KHDRX USETEXT LLCB USETEXT NBT USETEXT NHEADER USETEXT NIPDEF USETEXT OVERLAY USETEXT PARAMP USETEXT PARAMS USETEXT PT USETEXT SUPMSG USETEXT TNT PRGM NPREGLL; # PROCESS SUPERVISORY MESSAGE REG/LL # STARTIMS; # *1DC NPREGLL * * 1. PROC NAME AUTHOR DATE * NPREGLL E. GEE 86/10/01 * * 2. FUNCTIONAL DESCRIPTION * THIS ROUTINE IS RESPONSIBLE FOR PROCESSING THE SUPERVISORY * MESSAGE REG/LL. * * 3. METHOD USED * CALL OMSG TO ISSUE DAYFILE MSG TO RECORD RECEIPT OF REG/LL MSG. * IF SPECIAL CDCNET REG/LL/R SUPERVISORY MESSAGE, * CREATE REG/LL/N SUPERVISORY MESSAGE. * CALL NXBLINK TO QUEUE REG/LL/N SUPERVISORY MESSAGE. * CHECK IF LOGICAL LINK CONTROL BLOCK ALREADY EXISTS, * IF NO LOGICAL LINK CONTROL BLOCK EXISTS, * VERIFY TERMINAL NODE IS ACCEPTABLE. * SET BAD REG/LL FLAG IF TERMINAL NODE IS UNACCEPTABLE. * IF TERMINAL NODE IS ACCEPTABLE, * IF BUFFER LEVEL IS NONZERO, * IF TERMINAL NODE TABLE NEEDS TO BE EXPANDED, * CALL MSETIL TO SET NIP/PIP INTERLOCK BEFORE EXPANSION. * CALL MGROW TO EXPAND TERMINAL NODE TABLE. * CALL MCLRIL TO CLEAR NIP/PIP INTERLOCK AFTER EXPANSION. * CALL OVERLAY BLDLLCB TO BUILD LOGICAL LINK CONTROL BLOCK. * ELSE (LOGICAL LINK CONTROL BLOCK ALREADY EXISTS), * IF CS SUPERVISION BROKEN, * CALL OVERLAY HCSUPCB TO SEND SUP/CB SUP MSG TO CS. * IF BUFFER LEVEL IS ZERO, * IF THIS IS THE FIRST TIME, NIP WAS INFORMED ABOUT LLK DOWN, * CALL RELCONN TO BREAK ALL CONNECTIONS ON THIS LLK. * IF NO CONNECTIONS REMAIN ON THIS LOGICAL LINK, * CALL OVERLAY RELLLCB TO RELEASE LLCB. * ELSE (PRU CONNECTIONS REMAIN TO BE CLEANED UP), * SET RELEASE LLCB FLAG. * ELSE (BUFFER LEVEL IS NONZERO), * CLEAR RELEASE LLCB FLAG. * IF REGULATION LEVEL CHANGED, * CALL OVERLAY NPREGCN TO PROCESS REGULATION CHANGE. * IF NAM ST DISPLAY NEEDS TO BE UPDATED, * CALL KPUT TO UPDATE NAM ST DISPLAY. * * 4. ENTRY PARAMETERS * NBTIDX INDEX OF NBT ENTRY BEING PROCESSED * PARAMP1 DATA BLOCK HEADER ADDRESS * * 5. EXIT PARAMETERS * PARAMS5 TRUE IF REG/LL SUP MSG REJECTED BECAUSE A * BAD TERMINAL NODE WAS SPECIFIED IN THE * NETWORK HEADER. * * 6. COMDECKS CALLED * CET COUPLER EQUIPMENT TABLE * KDIS K-DISPLAY TABLE * KHDRX K-DISPLAY HEADER TABLE * LLCB LOGICAL LINK CONTROL BLOCK TEMPLATE * NBT NETWORK BUFFER TABLE * NHEADER NETWORK BLOCK HEADER TEMPLATE * NIPDEF CONSTANT DEFINITIONS * OVERLAY OVERLAY TABLE * PARAMP BUFFER FOR PASSING PARAMS TO/FROM PRI OVL * PARAMS BUFFER FOR PASSING PARAMS TO/FROM SEC OVL * PT GLOBAL VARIABLES AND POINTERS * SUPMSG SUPERVISORY MESSAGE TEMPLATE * TNT TERMINAL NODE TABLE * * 7. ROUTINES AND OVERLAYS CALLED * BLDLLCB OVL CREATE LOGICAL LINK CONTROL BLOCK * HCSUPCB OVL GENERATE SUPERVISORY MESSAGE SUP/CB * KPUT UPDATE NAM K-DISPLAY BUFFER * MCLRIL CLEAR NIP/PIP INTERLOCK * MGETS GET BUFFER * MGROW INCREASE SIZE OF BUFFER * MSETIL SET NIP/PIP INTERLOCK * NPREGCN OVL PROCESS CONNECTION REGULATION * NXBLINK LINK DOWNLINE MSG TO OUTBOUND CHAIN * OMSG ISSUE DAYFILE MESSAGE * OVLCALL LOAD AND EXECUTE OVERLAY * RELCONN RELEASE CONNECTIONS ON A LOGICAL LINK * RELLLCB OVL RELEASE LOGICAL LINK CONTROL BLOCK * XCDD CONVERT INTEGER TO DECIMAL DISPLAY * XTRACE TRACE CALLS * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION. * *** EST XXX - NIP/REGLL DN=AAA,SN=BBB,RL=L. *** * * THIS PROGRAM IS A PRIMARY OVERLAY LOADED BY SUBROUTINE * OVLCALL. WHEN EXECUTION HAS COMPLETED, A JUMP IS MADE TO * LOCATION RJMAIN TO THE CALLING PROGRAM. * * W A R N I N G - THIS PROGRAM CANNOT EXCEED THE PRIMARY * OVERLAY BUFFER SIZE MINUS 5 (560B WORDS). * * THIS OVERLAY IS CALLED BY NPNIPSM. * # STOPIMS; # **** EXTERNAL ENTRY POINTS # XREF BEGIN PROC KPUT ; # UPDATE K-DISPLAY BUFFER # PROC MCLRIL ; # CLEAR NIP/PIP INTERLOCK # PROC MGETS; # GET BUFFER # PROC MGROW ; # EXPAND TNT TABLE # PROC MRELS; # RELEASE BUFFER SPACE # PROC MSETIL ; # SET PIP/NIP INTERLOCK # PROC NXBLINK; # QUEUE DOWNLINE MSG FOR PIP # PROC OMSG; # ISSUE ERROR DAYFILE MESSAGE # PROC OVLCALL; # LOAD AND EXECUTE OVERLAY # PROC RELCONN ; # RELEASE NETWORK CONNECTION # PROC XTRACE; # RECORD PROCEDURE CALL # FUNC XCDD C(10) ; # CONVERT INTEGER TO DEC DISPLAY# LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL # END # LOCAL VARIABLES # ARRAY DFMSG1 P(5) ; BEGIN ITEM DFMSGH C(00,00,40) = ["EST XXX - NIP/REGLL DN= ,SN= ,RL= ."]; ITEM DFEST U(00,24,18); # EST ORDINAL OF FRONT END # ITEM DFDN C(02,18,3); # DESTINATION NODE NUMBER # ITEM DFSN C(03,00,3); # SOURCE NODE NUMBER # ITEM DFRL C(03,42,1); # BUFFER REGULATION LEVEL # ITEM DFZERO U(04,00,60) = [0]; END ITEM BUFADDR; # BUFFER FOR REG/LL/N SUP MSG # ITEM I; # LOOP CONTROL VARIABLE # ITEM IDXHN; # HOST NODE NUMBER # ITEM IDXTN; # TERMINAL NODE NUMBER # ITEM KN U; #**********************************************************************# BEGIN # BEGIN NPREGLL CODE # CONTROL IFEQ DEBUG,1 ; # RECORD PROCEDURE CALL # XTRACE("NPRLL") ; CONTROL FI; PARAMS5 = FALSE; # INITIALIZE FOR REG/LL NOT # # REJECTED # # ISSUE REGULATION LEVEL DAYFILE MESSAGE # P = PARAMP1 + DBHSIZE; # LOCATION OF NETWORK HEADER # P = P + NBHSIZE; # LOCATION OF REG/LL SUP MSG # IDXTN = SN[0]; # TNT ENTRY INDEX # IDXHN = DN[0]; # HOST NODE NUMBER # I = XCDD(IDXHN); # DESTINATION NODE # DFDN[0] = C<7,3>I; I = XCDD(IDXTN); # SOURCE NODE # DFSN[0] = C<7,3>I; I = XCDD(REGB[0]); # REGULATION LEVEL # DFRL[0] = C<9,1>I; DFEST[0] = (NBTEST1[NBTIDX]+27)*64*64 + (NBTEST2[NBTIDX]+27)*64 + NBTEST3[NBTIDX]+27; # EST ORDINAL # OMSG(DFMSG1,0); # CHECK FOR SPECIAL CDCNET REG/LL SUPERVISORY MESSAGE # IF (IDXTN EQ 0) AND (IDXHN EQ 0) THEN # SPECIAL CDCNET REG/LL SUP MSG # BEGIN # SEND REG/LL/N SUP MSG BACK TO MDI WITH APPROPRIATE NODE NUMBER # IDXHN = NBTHN[NBTIDX]; # HOST NODE NUMBER # IDXTN = NBTTN[NBTIDX+1]; # TERMINAL NODE FOR CDCNET LLK # DN[0] = IDXHN; # HOST NODE FOR LOGICAL LINK # SN[0] = IDXTN; # TERMINAL NODE FOR LOGICAL LINK# MGETS(LREG + BLKHSIZE + NBHSIZE, BUFADDR,TRUE); # GET BUFFER # P = BUFADDR + BLKHSIZE; # NETWORK ADDRESS WORD # DN[0] = IDXTN; # TERMINAL NODE FOR CDCNET LLK # SN[0] = IDXHN; # HOST NODE FOR LOGICAL LINK # BT[0] = NETCMD; # NETWORK CHARACTER TYPE # NHACT[0] = CT8ASCII; # CHAR TYPE IS 8 BIT ASCII # CC[0] = NREGLLN; # LENGTH OF REG/LL/N SUP MSG # P = BUFADDR + BLKHSIZE + NBHSIZE; # ADDR OF SM TEXT # SPMSG0[0] = REGLLW0[0]; # WORD ZERO OF SUP MSG # RB[0] = TRUE; # SET NORMAL RESPONSE BIT # NXBLINK(BUFADDR,NBTIDX+OSTFET);# QUEUE REG/LL/N SUP MSG # END # CHECK FOR ALREADY EXISTING LOGICAL LINK CONTROL BLOCK # P = 0; # INIT TO NO LLK EXISTS # PARAMS2 = 0; # INIT LINK ADDR FOR BLDLLCB # IF IDXTN LQ TNTBS[0] - TNTHSIZE THEN # SN IS WITHIN TNT TABLE SIZE # BEGIN P = TNTLLAD[IDXTN]; # TNT ENTRY FOR SPECIFIED SN # FOR I = I WHILE (P NQ 0 ) AND # MORE LLCBS TO CHECK # (LLCBHN[0] NQ IDXHN) # NOT THE CORRECT LLCB# DO BEGIN PARAMS2 = P; # SAVE FOR CALL TO BLDLLCB # P = LLCBFP[0]; # CHECK NEXT LLCB IN CHAIN # END END IF P EQ 0 THEN # NO EXISTING LLCB FOUND # BEGIN # VERIFY TERMINAL NODE IS ACCEPTABLE, I.E. IT CAN NOT BE THE SAME AS HOST NODE. ALSO FOR CDCNET IT CANNOT BE THE SAME AS ANY OTHER HOST NODE NUMBER IN CET TABLE. # IF IDXTN EQ IDXHN THEN # BAD REG/LL SUP MSG # BEGIN PARAMS5 = TRUE; # SET FLAG FOR BAD NETWORK MSG # END ELSE # DN IS NOT THE SAME AS SN # BEGIN IF NBTET[NBTIDX] EQ "NQ" THEN # CDCNET FRONT END # BEGIN FOR I= CETHSIZE STEP 1 UNTIL CETBS[0] - 1 DO # LOOP THROUGH CET TABLE # BEGIN IF CETHN[I] EQ IDXTN THEN # HN IN CET TABLE MATCHES SN # BEGIN PARAMS5 = TRUE; # ERROR IN CONFIGURATION # END END END END IF NOT PARAMS5 THEN # ACCEPTABLE SN WAS SPECIFIED # BEGIN IF REGB[0] NQ BUFLCD THEN # NONZERO BUFFER LEVEL - LLK UP # BEGIN IF IDXTN GR TNTBS - TNTHSIZE THEN # NEED TO EXPAND TNT # BEGIN MSETIL(0) ; # REQ INTERLOCK,TNT MAY BE MOVED# MGROW(P,IDXTN + TNTHSIZE,TRUE); # EXPAND TNT # PTTNT[0] = P ; # RESET TNT PTR # MCLRIL ; # CLEAR THE NIP/PIP INTERLOCK # END # CREATE NEW LOGICAL LINK CONTROL BLOCK # OVLNAME = BLDLLCBP; # NAME OF OVERLAY TO LOAD # PARAMS1 = PARAMP1 + DBHSIZE; # NETWORK BLOCK HEADER ADDRESS# OVLCALL; END END END ELSE # LLCB ALREADY EXISTS # BEGIN # CHECK FOR CS SUPERVISION BROKEN. IF SO, NEED TO INFORM CS # IF (LLCBCS[0] ) AND # CS THINKS IT HAS SUPERVISION # (NOT REGC ) AND # CS NO LONGER HAS SUPERVISION # (PROCAN[CSORD] NQ 0) # CS IS RUNNING IN THIS HOST # THEN # TELL CS IT LOST SUPERVISION # BEGIN # SEND SUP/CB SUPERVISORY MESSAGE TO CS # OVLNAME = HCSUPCBP; # NAME OF OVERLAY TO LOAD # PARAMS1 = IDXHN; # HOST NODE OF THIS LLK # PARAMS2 = IDXTN; # TERMINAL NODE OF THIS LLK # OVLCALL ; # LOAD AND EXECUTE OVERLAY # END IF REGB[0] EQ BUFLCD THEN # ZERO BUFFER LEVEL - LLK DOWN # BEGIN # LOGICAL LINK IS DOWN. BREAK ALL CONNECTIONS IF THIS IS THE FIRST TIME NIP RECEIVED REG/LL FOR THIS LOGICAL LINK WITH BUFFER LEVEL = 0. # IF NOT LLCBWOF[0] THEN # 1ST NOTIFICATION OF LLK DOWN # BEGIN RCBRK = RCCB"LLF" ; # LL FAILED = 15 FOR CR/CB/U # RELCONN(P,LLFAIL); # BREAK ALL CONS ON THIS LLK # END IF LLCBNPC[0] EQ 0 THEN # NO CONNECTIONS ON LLK # BEGIN # RELEASE LOGICAL LINK CONTROL BLOCK # PARAMS2 = P; # ADDR OF LLCB TO RELEASE # OVLNAME = RELLLCBP; # NAME OF OVERLAY TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # END ELSE # PRU CONNECTIONS TO RELEASE # BEGIN LLCBWOF[0] = TRUE; # SET FLAG FOR LLCB TO RELEASE # END END ELSE # NONZERO BUFFER LEVEL - LLK UP # BEGIN LLCBWOF[0] = FALSE; # CLEAR FLAG TO RELEASE LLK # IF LLCBNRL[0] NQ REGB THEN # REGULATION LEVEL CHANGED # BEGIN IF LLCBNRL[0] GR REGB THEN # LOWERING REGULATION LEVEL # BEGIN PARAMS3 = 1; # SET FLAG FOR PUTTING CN IN REG# END ELSE # RAISING REGULATION LEVEL # BEGIN PARAMS3 = 0; # SET FLAG FOR TAKING CN OUT OF # END # REGULATION # # CALL NPREGCN TO PUT CONNECTIONS IN REGULATION OR TAKE THEM OUT OF REGULATION # PARAMS1 = P ; # ADDRESS OF LLCB # PARAMS2 = REGB ; # NEW REGULATION LEVEL # OVLNAME = NPREGCNP ; # NAME OF OVERLAY TO LOAD # OVLCALL ; # LOAD AND EXECUTE OVERLAY # END LLCBCS[0] = REGC; # UPDATE CS INDICATOR # LLCBNS[0] = REGN; # UPDATE NS INDICATOR # LLCBNRL[0] = REGB; # UPDATE NETWORK REGULATION LVL # IF KDST[0] AND # NAM ST DISPLAY IS UP # LLCBKNDX[0] NQ 0 AND LLCBKNDX[0] GQ KDLGLST[0] AND LLCBKNDX[0] LQ KDLGLND[0] THEN BEGIN # UPDATE LOGICAL LINK STATUS ON NAM ST DISPLAY # IF KDESTST[0] EQ 0 THEN BEGIN KN = LLCBKNDX[0] - KDLGLST[0]; END ELSE BEGIN IF KDAPPST[0] EQ 0 THEN BEGIN KN = LLCBKNDX[0] + KDESTND[0] - KDESTST[0]; END ELSE BEGIN KN = LLCBKNDX[0] + KDESTND[0] + KDAPPND[0] - KDAPPST[0]; END END KPUT(KHDRNP[0],KN,KPLGN,LLCBNRL[0]); # UPDATE NAM ST DISPLY# IF LLCBCS[0] THEN # CS USING LLK TO SUPERVISE NPU # BEGIN KPUT(KHDRNP[0],KN,KPLGS,"S"); # UPDATE NAM ST DISPLAY # END ELSE # NO CS SUPERVISION ON THIS LLK # BEGIN KPUT(KHDRNP[0],KN,KPLGS," "); # UPDATE NAM ST DISPLAY # END END END END GOTO RJMAIN; # RETURN TO CALLING PROGRAM # END # NPREGLL # TERM