*DECK NBSTTP USETEXT NIPDEF USETEXT ACNB USETEXT DRHDR USETEXT DUMPFLG USETEXT LLCB USETEXT MSGIDX USETEXT KDIS USETEXT NHEADER USETEXT NCNT USETEXT NCNB USETEXT PARAMP USETEXT PARAMS USETEXT PCNB USETEXT PT USETEXT OVERLAY USETEXT STPRESP USETEXT SUPMSG PROC NBSTTP((NCNBAD),(TRIGGER),(BLKPTR)); STARTIMS; # *1DC NBSTTP * * 1. PROC NAME AUTHOR DATE * NBSTTP C. BITTNER 81/05/15 * * 2. FUNCTIONAL DESCRIPTION * NETWORK BLOCK PROTOCOL (IVT) STATE TABLE PROCESSOR * * 3. METHOD USED * VALIDATE TRIGGER. SET CURRENT STATE (IF THERE IS NO NCNB * THEN SET THE CURRENT STATE TO STATX). CALL XSTTP (STATE * TABLE PROCESSOR) PASSING THE STATE TABLE ORDINAL, * CURRENT IVT STATE AND TRIGGER. IF A LEGAL TRIGGER * IS RETURNED, THEN DO THE FOLLOWING (IF VALUE NOT * SET TO NOCHG): * A) ACTION - EXECUTE NETWORK BLOCK PROTOCOL (IVT) STATE * TABLE ACTION (ISSUE SM, ETC) * B) NEWSTATE - UPDATE NEW IVT STATE * C) TRIGC - TRIGGER NETWORK CONNECTION STATE TABLE * D) TRIGB - TRIGGER HOST BLOCK PROTOCOL (IVT) STATE TABLE * * IF AN ILLEGAL TRIGGER IS RETURNED THEN DO THE FOLLOWING: * IF THE TRIGGER IS INTERNAL TO NIP THEN ABORT NIP. * IF ILLEGAL EXTERNAL TRIGGER AND IN DEBUG MODE, ABORT * CCP (SEND NPI/IN TO CCP). * IF ILLEGAL EXTERNAL TRIGGER AND NOT IN DEBUG MODE, * THEN IGNORE TRIGGER (NO-OP). * * * * 4. ENTRY PARAMETERS * NCNBAD - NCNB ADDRESS * TRIGGER - NETWORK IVT STATE TABLE TRIGGER * BLKPTR - ADDRESS OF INPUT BUFFER * WORD 0 = PIP BLOCK HEADER OR DATA RING HEADER * * 5. EXIT PARAMETERS * NONE * * 6. SYMPL TEXTS USED * NIPDEF DUMPFLG * NCNB * STPRESP * MSGIDX PARAMP PARAMS * OVERLAY SUPMSG LLCB * * 7. ROUTINES AND OVERLAYS CALLED * HBSTTP - HOST BLOCK PROTOCOL STATE TABLE PROCESSOR * NCSTTP - NETWORK CONNECTION STATE TABLE PROCESSOR * LOCLLCB - LOCATE LLCB * ABORT - ABORT NIP * NFOB - LINK MESSAGE ON PIP OUTBOUND CHAIN * NXBLOCK - SEND SPECIAL NETWORK BLOCK TO CCP * OVLCALL - LOAD AND EXECUTE OVERLAY * NPBACK - PROCESS BACK FROM CCP * RELNCNB OVL RELEASE NCNB * COMPCON OVL SWITCH TO PROPER OVERLAY * NPBRK OVL DISCARD ALL MESSAGES ON NCNB * HPRUON OVL PROCESS PRU/ON * STPNERR OVL OUTPUT STATE TABLE ERROR MESSAGE * NGIGO OVL DISCARD MESSAGE * NNPIIN OVL SEND NPI/IN TO CCP * XERRMSG OVL OUTPUT ERROR MESSAGE * XSTTP - STATE TABLE PROCESSOR * XTRACE - RECORD PROCEDURE CALL * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION * "INVALID TRIGGER NUMBER - NBSTTP" * # STOPIMS; # INPUT PARAMETERS # ITEM NCNBAD; # NCNB ADDRESS # ITEM TRIGGER; # NETWORK IVT STATE TABLE TRIGGER # ITEM BLKPTR; # ADDRESS OF INPUT BUFFER # # EXTERNAL VARIABLES # XREF BEGIN PROC ABORT; # ABORT NIP # PROC HBSTTP; # HOST BLOCK PROTOCOL STATE TABLE PROC # PROC LOCLLCB; # LOCATE LLCB # PROC NFOB ; PROC NCSTTP; # HOST CONNECTION STATE TABLE PROC # PROC NXBLOCK; # SEND NETWORK BLOCK TO NPU # PROC OMSG; # ISSUE DAYFILE MESSAGE # PROC OVLCALL; # LOAD AND EXECUTE OVERLAY # PROC XSTTP; # STATE TABLE PROCESSOR # PROC XTRACE; # RECORD PROCEDURE CALL # PROC MGETS ; PROC NPBACK ; END # INTERNAL VARIABLES # SWITCH NBACTION NB0,NB1,NB2,NB3,NB4,NB5,NB6,NB7,NB8,NB9,NB10, NB11,NB12,NB13,NB14,NB15,NB16,NB17,NB18 ; ITEM ACNBAD; # ACNB ADDRESS # ITEM BTYPE; # NETWORK BLOCK TYPE # ITEM CNN ; # NETWORK CONNECTION NUMBER # ITEM CURST; # CURRENT STATE # ITEM HN; # HOST NODE # ITEM LLCBAD; # LLCB ADDRESS # ITEM NCNTEAD; # NCNT ENTRY ADDRESS # ITEM RESP; # RESPONSE WORD # ITEM TN; # TERMINAL NODE # ITEM BLKADDR ; # ADDRESS OF NWL # ITEM TEMPPTR U ; ITEM DATABLK U ; ITEM PRUMOD B=FALSE ; ITEM TEMP U ; #**********************************************************************# BEGIN CONTROL IFEQ DEBUG,1; XTRACE("NBSTT") ; CONTROL FI; # VALIDATE TRIGGER NUMBER # BLKADDR = BLKPTR ; # ADDRESS OF NWL # IF TRIGGER LQ NBMTR AND TRIGGER GQ 0 THEN BEGIN # VALID TRIGGER NUMBER # P = NCNBAD; IF P EQ 0 THEN # NO NCNT ENTRY/NCNB # BEGIN # ERROR - NO NCNB # D27M2[0] = "NBSTTP1"; ABORT(DFMSG27,0); # NIP INTERNAL ERROR # END ELSE BEGIN HN = NCNBHN[0] ; TN = NCNBTN[0] ; CNN = NCNBCN[0] ; ACNBAD = NCNBACNB[0] ; CURST = NCNBBST[0] ; END XSTTP(NBORD,CURST,TRIGGER,RESP); P = LOC(RESP); IF LEGTRIG[0] THEN # LEGAL TRIGGER # BEGIN IF ACTION[0] NQ NOCHG THEN GOTO NBACTION[ACTION[0]]; # EXECUTE PROPER ACTION # ELSE GOTO NBA; NB0: # DLNCNB (ACTION NO. 0) DELETE NCNB # PARAMS1 = P; # NCNB ADDRESS # OVLNAME = RELNCNBP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO NBA; NB1: # NBSINTR (ACTION NO. 1) SEND INITR TO CCP # PARAMS1 = P; PARAMS9 = COMPCX"RELBLK$" ; OVLNAME = COMPCONP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # BTYPE = NETINITR; GOTO NXB; NB2: # NBSTERM (ACTION NO. 2) SEND TERM TO CCP # BTYPE = NETTERM; GOTO NXB; NB3: # SINITN (ACTION NO. 3) SEND INITN TO CCP # BTYPE = NETINITN; GOTO NXB; NB4: # NBSRST ( ACTION NO. 4 ) SEND RST TO CCP # BTYPE = NETRST; GOTO NXB; NB5: # NBICMDR (ACTION NO. 5) SEND ICMDR TO CCP # BTYPE = NETICMDR; GOTO NXB; NB6: # NSBACK ( ACTION NO. 6 ) SEND BACK TO CCP # BTYPE = NETBACK; GOTO NXB; NB7: # NBSMSG ( ACTION NO. 7 ) SEND BLOCK MSG TO CCP # NFOB(BLKADDR,P) ; GOTO NBA ; NB8: # NBBACK (ACTION NO. 8) FORM PSUEDO NETWORK FOR FC/ACK AND/OR FC/NAK FOR THE HOST SIDE, AND SEND QUEUED MESSAGE TO CCP IF PERMITTED. # NPBACK(BLKADDR,P); # PROCESS BACK FROM CCP # # BLKADD IS THE ADDRESS OF PSUEDO FCACK OR FCNAK # # THIS WILL BE PASSED TO THE HOSTSIDE, AND PROPER # # SM MESSAGE WILL BE SENT # # IF BLKPTR IS ZERO THEN THIS BACK WAS IGNORED # IF BLKADDR EQ 0 THEN BEGIN # IGNORE THIS BACK # TRIGB[0] = NOCHG ; END # INGORE THIS BACK # GOTO NBA ; NB9: # RELDR (ACTION NO. 9) RELEASE MSG AND BLK BLOCK TYPE IN NCNB # BEGIN PARAMS1 = P ; OVLNAME = NPBRKP ; OVLCALL ; GOTO NBA ; END NB11: # STERMRD (ACTION NO.11) SEND TERM TO CCP AND RELEASE DATA RING # P = BLKPTR + BLKHSIZE + ABHSIZE; RCBRK = TCNRC[0]; # REASON CODE FOR BRK # PARAMS1 = P; PARAMS9 = COMPCX"RELBLK$" ; OVLNAME = COMPCONP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # BTYPE = NETTERM; GOTO NXB; NB12: # RELDR2 (ACTION NO. 12) RELEASE DATA RING # PARAMS1 = P; PARAMS9 = COMPCX"RELBLK$" ; OVLNAME = COMPCONP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO NBA; NB10: # CONVERT ( ACTION NUMBER 10 ) CONVERT THE NCNB TO A PCNB AND START PRU MOD # OVLNAME = HPRUONP ; OVLCALL; IF PARAMP1 NQ 0 # MEANS WE DID NOT SUCCEED TO CONVERT # THEN RETURN ; # AND DO NOT GO TO PRU STATE # ELSE BEGIN P = PARAMP2 ; NCNBAD = PARAMP2 ; GOTO NBA ; END # # NB13: # NBICMD ( ACTION NUMBER 13 ) SEND ICMD TO CCP # P = BLKPTR + BLKHSIZE + ABHSIZE ; TEMPBSN = INTRCHR[0]; # INTERRUPT CHARACTER # BTYPE = NETICMD; GOTO NXB; NB14: # SEND BREAK PROTOCOL ELEMENT TO CCP. DISCARD ANY PREVIOUS DOWNLINE DATA IF POSSIBLE # PARAMS1 = P ; OVLNAME = NPBRKP ; OVLCALL ; P = BLKPTR + BLKHSIZE + ABHSIZE ; TEMPBSN = FCRBR ; BTYPE = NETBRK ; GOTO NXB ; NB15: GOTO NBA ; NB16: # DISCARD ( ACTION NUMBER 16 ) SIGNAL NPPWL THAT THIS IS DISCARD MOD # PARAMP2 = 1 ; GOTO NBA ; NB17: # ALL DATA OF PRU ALLOWED # PARAMP2 = 0 ; GOTO NBA ; NB18: # SAVE THE BSN FOR THE NEXT BLOCK FROM CCP # P = BLKPTR + BLKHSIZE ; P = NCNBCTAD[0] ; # NCNT ADDRESS # TEMPPTR = NCNTHSIZE + ( NCNBCN[0] LAN X"F" ) ; # INDEX INTO NCNT # IF KNAMDB[0] THEN BEGIN # K-DEBUG IS ON # TEMP = NCNTNIB[TEMPPTR] ; IF TEMP NQ 0 AND TEMP NQ NHBSN[0] THEN ABORT(0,0) ; # BSN FROM CCP NOT IN SEQUENCE # END # K-DEBUG IS ON # IF NHBSN[0] LS 7 THEN NCNTNIB[TEMPPTR] = NHBSN[0] + 1 ; ELSE NCNTNIB[TEMPPTR] = 1 ; # NEXT BSN # GOTO NBA ; NXB: # SEND BLOCK PROTOCOL ELEMENT TO NPU # NXBLOCK(P,BTYPE); NBA: IF NEWSTATE[0] NQ STATX THEN BEGIN NCNBLBS[0] = CURST ; # UPDATE LAST STATE (STATISTICS ) # NCNBLBT[0] = TRIGGER;# AND THE LAST TRIGGER # END IF NEWSTATE[0] NQ NOCHG THEN NCNBBST[0] = NEWSTATE[0] ; IF TRIGC[0] NQ NOCHG THEN # TRIGGER HOST CONNECTION TABLE # BEGIN NCSTTP(NCNBAD,CNN,TRIGC[0],0); END IF TRIGB[0] NQ NOCHG THEN BEGIN CONTROL IFEQ DEBUG,1; IF ACNBAD EQ 0 THEN BEGIN D27M2[0] = "NBSTTP2"; ABORT(DFMSG27,0); # "NIP INTERNAL ERROR" # END CONTROL FI; HBSTTP(ACNBAD,TRIGB[0],BLKADDR) ; END ENDACTION:END IF NOT LEGTRIG[0] THEN BEGIN # ILLEGAL TRIGGER # PARAMS1 = HN; # HOST NODE # PARAMS2 = TN; # TERMINAL NODE # PARAMS3 = CNN ; # NETWORK CONNECTION NUMBER # PARAMS4 = TRIGGER; # ILLEGAL TRIGGER # PARAMS6 = "NBSTTP";# NAME OF STATE TABLE PROCESSOR # PARAMS7 = CURST; # CURRENT BLOCK PROTOCOL STATE # OVLNAME = STPNERRP; # STATE TABLE ERROR PROCESSOR # OVLCALL; # LOAD AND EXECUTE OVERLAY # IF TRIGGER LS NBMINXT OR TRIGGER GR NBMAXXT THEN BEGIN # TRIGGER INTERNAL TO NIP # ABORT(0,0); # ABORT NIP # END ELSE BEGIN # ILLEGAL EXTERNAL TRIGGER FROM CCP # OVLNAME = NGIGOP; # SEND GARBAGE MSG TO DAYFILE # PARAMP1 = BLKPTR; PARAMP4 = DMCBNBPSTT; # INDX FOR BAD NET BLK STATE TBLE MSG# OVLCALL; CONTROL IFEQ DEBUG,1; LOCLLCB(HN,TN,P); PARAMS1 = P; PARAMS2 = TRIGGER; # BAD TRIGGER FROM NETWORK # PARAMS3 = CURST; # CURRENT STATE OF CONNECTION # PARAMS4 = CNN; # NETWORK CONNECTION NUMBER # PARAMS7 = X"42"; # STATE TABLE PROCESSOR # OVLNAME = NNPIINP; # SEND NPI/IN TO CCP # OVLCALL; # LOAD AND EXECUTE OVERLAY # CONTROL FI; END END END ELSE BEGIN # TRIGGER NUMBER OUT OF RANGE # PARAMS1 = DFMSG26; PARAMS6 = "NB"; OVLNAME = XERRMSGP; OVLCALL; END RETURN; END TERM