*DECK NLOPIP
USETEXT ACB
USETEXT AHEADER
USETEXT APPSTAT
USETEXT DRHDR
USETEXT LLCB
USETEXT NBT
USETEXT NHEADER
USETEXT NIPDEF
USETEXT OVERLAY
USETEXT PARAMP
USETEXT PARAMS
USETEXT PT
USETEXT SUPMSG
PRGM NLOPIP;
# LINK DOWNLINE (OUTBOUND) SUPERVISORY MESSAGE FOR PIP #
STARTIMS;
#
*1DC NLOPIP
*
* 1. PROC NAME AUTHOR DATE
* NLOPIP E. GEE 85/04/02
*
* 2. FUNCTIONAL DESCRIPTION
* LINK CS/NS SUPERVISORY MESSAGES TO OUTBOUND BUFFER.
*
* 3. METHOD USED
* CHECK THAT THERE IS A CORRECT NBT ENTRY FOR THE SPECIFIC
* COUPLER.
* IF SUPERVISORY MESSAGE IS FROM CS,
* CHECK THAT LOGICAL LINK EXISTS AND SUPERVISION EXISTS FOR THE
* LOGICAL LINK.
* CHECK NPU OFF FLAG, ACTIVE FLAG, DOWN FLAG, BOOTSTRAP FLAG, AND
* LLK FLAG TO ALLOW SUITABLE MESSAGES TO BE LINKED.
* IF NO ERROR ENCOUNTERED,
* CONVERT APPLICATION HEADER TO NETWORK HEADER.
* LINK MESSAGE TO PIP OUTBOUND CHAIN.
* ELSE (BAD SUP MSG FROM CS/NS),
* CALL OMSG TO ISSUE DAYFILE MESSAGE.
* CALL NGIGO TO DAYFILE AND DISCARD BAD SUPERVISORY MESSAGE.
*
* 4. ENTRY PARAMETERS
* ACBADDR ACB ADDRESS OF NS/CS
* PARAMP1 MESSAGE BUFFER ADDRESS
*
* 5. EXIT PARAMETERS
* NONE
*
* 6. COMDECKS CALLED
* ACB APPLICATION CONTROL BLOCK TEMPLATE
* AHEADER APPLICATION BLOCK HEADER WORD TEMPLATE
* APPSTAT NETWORK WORKLIST PROCESSING TABLE
* DRHDR DATA ENTRY HEADER WORD TEMPLATE
* LLCB LOGICAL LINK CONTROL BLOCK TEMPLATE
* NBT NETWORK BUFFER TABLE
* NHEADER NETWORK BLOCK HEADER WORD TEMPLATE
* NIPDEF NIP CONSTANT DEFINITIONS
* OVERLAY OVERLAY TABLE
* PARAMP PARAMETERS PASSED TO PRIMARY OVERLAY
* PARAMS PARAMETERS PASSED TO SECONDARY OVERLAY
* PT POINTER TABLE
* SUPMSG SUPERVISORY MESSAGE TEMPLATES
*
* 7. ROUTINES AND OVERLAYS CALLED
* LOCLLCB LOCATE LOGICAL LINK
* NXBLINK LINK MESSAGE ON PIP OUTBOUND CHAIN
* OMSG ISSUE DAYFILE MESSAGE
* OVLCALL LOAD AND EXECUTE OVERLAY
* XTRACE TRACE CALLS
*
* 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION
*
* * BAD SUP MSG FROM NS/CS DISCARDED *
*
* THIS PROGRAM IS A PRIMARY OVERLAY LOADED BY SUBROUTINE OVLCALL.
* WHEN EXECUTION HAS COMPLETED, A JUMP IS MADE TO LOCATION RJMAIN
* TO RETURN 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 HPPUT.
*
#
STOPIMS;
XREF
BEGIN
PROC MRELS; # RELEASE BUFFER SPACE #
PROC LOCLLCB; # LOCATE LOGICAL LINK #
PROC NXBLINK ; # LOG MESSAGE INTO PIP OUT #
PROC OMSG; # ISSUE DAYFILE MESSAGE #
PROC OVLCALL; # LOAD AND EXECUTE OVERLAY #
PROC XTRACE; # RECORD TRACES #
LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL #
END
# LOCAL VARIABLES #
ITEM BUFAD; # BUFFER ADDRESS #
ITEM ERRORF B; # ERROR FLAG #
ITEM CNODE; # COUPLER NODE #
ITEM I; # LOOP CONTROL VARIABLE #
ITEM IND; # INDEX #
ITEM INDX; # INDEX #
ITEM TEMP; # SAVE APPLICATION BLOCK HEADER #
ITEM FOUND B ; # MATCHED NPU FLAG #
ITEM TEMPDN ; # TEMPORARY DEST. NODE #
ARRAY MSG01 S(4);
BEGIN
ITEM MSG011 C(0,0,34) = [" BAD SUP MSG FROM NS/CS DISCARDED."];
ITEM MSG01E U(3,24,36) = [0];
END
#**********************************************************************#
BEGIN # NLOPIP #
CONTROL IFEQ DEBUG,1;
XTRACE("LOPIP") ;
CONTROL FI;
P<DRHDRWD> = 0; # DATA BLOCK HEADER ADDRESS #
P<ACB> = ACBADDR; # ADDRESS OF CS/NS ACB #
ERRORF = TRUE; # INITIALIZE ERROR FLAG #
P<SUPMSG> = PARAMP1 + DBHSIZE + ABHSIZE; # SM ADDRESS #
P<AHEADER> = PARAMP1 + DBHSIZE; # APPLICATION HEADER ADDR #
CNODE = ABHSN[0]; # COUPLER NODE #
P<SMNIP> = P<SUPMSG>;
TEMPDN = ABHDN[0]; # DESTINATION NODE #
FOUND = FALSE;
#
SEARCH FOR NBT ENTRY WITH MATCHING COUPLER NODE NUMBER
#
FOR I = 0 STEP NBTFETNO WHILE I LQ NBTMAXID
AND NOT FOUND
DO
BEGIN # SEARCH FOR NBTE WITH HN = COUPLE #
IF NBTHN[I] EQ CNODE
AND NBTIUF[I]
THEN
BEGIN # FOUND THE ENTRY #
FOUND = TRUE ;
IND = I; # SAVE INDEX #
END
END # SEARCH FOR NBTE WITH HN = COUPLR #
I = IND;
INDX = I+4; # INDEX INTO PIP FLAGS IN NBT 5TH FET #
#
CHECK IF OKAY TO SEND SUPERVISORY MESSAGE TO NPU
#
IF FOUND AND # ACTIVE NBT EXISTS #
NOT NBTOF[INDX] AND # NPU NOT OFF IN EST#
( ( NBTAF[INDX] AND # NPU ACTIVE #
NOT NBTMF[INDX] ) OR # AND SAMP IS NOT RUNNING#
( PFC EQ NPU AND # NS DUMP-LOAD SM FOR #
CNODE EQ TEMPDN AND # LOCAL NPU-S WHICH IS #
( NOT NBTAF[INDX] OR # NOT AC AND SAM NOT LOAD#
NBTDF[INDX] ) ) OR # OR IS IN NPU DUMP-LOAD #
( NBTLF[INDX] AND # PIP WAIT FOR REG/CP RSP#
PFCSFC[0] EQ REGCP AND # REG/CP RSP TO PIP ALLOW#
REGR[0] ) ) # RESPONSE BIT IS ON #
THEN
BEGIN
ERRORF = FALSE; # NO ERROR ENCOUNTERED #
END
IF ACBAN[0] EQ PROCAN[CSORD]
THEN # SUPERVISORY MESSAGE IS FROM CS #
BEGIN
ERRORF = TRUE;
LOCLLCB(ABHSN[0],ABHDN[0],P<LLCB>) ;
IF P<LLCB> NQ 0 AND # LOGICAL LINK EXISTS #
LLCBCS[0] # CS HAS SUPERVISION OF THIS NPU #
THEN # VALID SUPERVISORY MESSAGE TO SEND TO PIP#
BEGIN
ERRORF = FALSE; # VALID FOR CS TO SEND SUP MSG TO THIS NPU#
END
END
IF NOT ERRORF
THEN # NO ERROR WAS FOUND IN SUP MSG #
BEGIN
#
CONVERT ABH TO NETWORK HEADER
#
TEMP = ABHWORD[0]; # SAVE APPLICATION HEADER #
ABHWORD[0] = 0; # CLEAR APPLICATION HEADER #
P<NHEADER> = PARAMP1 + DBHSIZE; # NETW HEADER ADDR #
P<AHEADER> = LOC(TEMP); # APPLICATION HEADER #
DN[0] = TEMPDN; # DESTINATION NODE #
SN[0] = CNODE; # SOURCE NODE #
CN[0] = 0;
BT[0] = NETCMD; # BLOCK TYPE #
NHACT[0] = ABHACT[0]; # CHARACTER TYPE #
CC[0] = ABHTLC[0]; # TEXT LENGTH #
IND = NBTINDX[I]*NBTFETNO + OSTFET;
NXBLINK(PARAMP1,IND); # LINK MESSAGE TO PIP OUTBOUND QUEUE #
END
ELSE # DISCARD BAD SUPERVISORY MESSAGE #
BEGIN
OMSG(MSG01,0); # ISSUE DIAGNOSTICS DAYFILE MESSAGE #
PARAMS1 = PARAMP1;
P<DRHDRWD> = PARAMP1;
PARAMS2 = BLKBS[0]; # SIZE OF BAD SUP MSG BLOCK #
OVLNAME = ODAYFLP; # NAME OF OVERLAY TO LOAD #
OVLCALL;
END
GOTO RJMAIN; # RETURN TO CALLING PROGRAM #
END
TERM