*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<NHEADER> = PARAMP1 + DBHSIZE; # LOCATION OF NETWORK HEADER #
P<SMNIP> = P<NHEADER> + 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<NHEADER> = 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<SUPMSG> = 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<LLCB> = 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<LLCB> = TNTLLAD[IDXTN]; # TNT ENTRY FOR SPECIFIED SN #
FOR I = I WHILE (P<LLCB> NQ 0 ) AND # MORE LLCBS TO CHECK #
(LLCBHN[0] NQ IDXHN) # NOT THE CORRECT LLCB#
DO
BEGIN
PARAMS2 = P<LLCB>; # SAVE FOR CALL TO BLDLLCB #
P<LLCB> = LLCBFP[0]; # CHECK NEXT LLCB IN CHAIN #
END
END
IF P<LLCB> 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<TNT>,IDXTN + TNTHSIZE,TRUE); # EXPAND TNT #
PTTNT[0] = P<TNT> ; # 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<LLCB>,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<LLCB>; # 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<LLCB> ; # 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