*DECK NVFDDNT
USETEXT TEXTNVF
USETEXT TXTAPSS
USETEXT TXTSUSS
PROC NVFDDNT;
# TITLE NVFDDNT - DISPATCHES NETWORK TRAFFIC TO THE APPROPRIATE QUEUE. #
BEGIN # NVFDDNT #
#
** NVFDDNT - DISPATCHES NETWORK TRAFFIC TO THE APPROPRIATE QUEUE.
*
* A. LIM. 81/08/25.
* C. BRION 83/04/13.
*
* THIS IS A DUMMY PROCEDURE. ITS EXISTENCE IS TO CUSTOMIZE WITH
* THE DECK NAME.
*
* PROC NVFDDNT
*
* ENTRY NONE
*
* EXIT NONE
*
* NOTE THIS PROC WOULD NEVER BE CALLED. INSTEAD AN ALTERNATE
* ENTRY POINT, CSNVDSP WILL BE CALLED. CSNVDSP IS USED TO
* CUSTOMIZE WITH THE CS DISPATCH PROC.
*
* METHOD NONE
*
#
#
**** ALTERNATE ENTRY POINT
#
XDEF PROC CSNVDSP;
#
****
#
CONTROL EJECT;
PROC CSNVDSP(WCARY,ABHARY,TXTARA);
# TITLE CSNVDSP - DISPATCHES SM/DATA-BLOCK TO THE APPROPRIATE QUEUE. #
BEGIN # CSNVDSP #
#
** CSNVDSP - DISPATCHES SM/DATA-BLOCK TO THE APPROPRIATE QUEUE.
*
* A. LIM. 81/08/25.
* D. G. DEPEW. 82/05/14.
* C. J. BRION 82/05/28.
*
* THIS PROCEDURE WILL BE CALLED BY AIP MONITOR WHENEVER A
* SM/DATA-BLOCK COMES TO NVF. ITS CHARTER IS TO
* DISPATCH IT TO THE APPROPRIATE QUEUE.
*
* PROC CSNVDSP(WCARY,ABHARY,TXTARA)
*
* ENTRY WCARY = A ONE WORD ARRAY FOR INCOMING WC.
* ABHARY = A ONE WORD ARRAY FOR INCOMING ABH.
* TXTARA = A TEXT AREA FOR INCOMING SM/DATA-BLOCK.
*
* EXIT SM/DATA ROUTED TO THE APPROPRIATE QUEUE.
*
* NOTES NONE
*
* METHOD IF INCOMING NETWORK TRAFFIC IS DATA-BLOCK, ROUTE IT
* TO CONNECTION-TRAFFIC-QUEUE. ELSE IF IT IS SM,
* SCAN THROUGH PFC/SFC-CLASSIFY TABLE TO FIND
* A MATCH ON THE SM, AND ROUTE IT TO THE
* APPROPRIATE QUEUE DETERMINED BY THE POSITION
* OF THE SM IN THE TABLE.
* IF NO MATCH IS FOUND IN THE TABLE, ABORT NVF.
*
#
#
* FORMAL PARAMETERS
#
#
** WCARY - WORD COUNT ARRAY
*
* WCARY IS A ONE WORD ARRAY FOR INCOMING WC
#
ARRAY WCARY[00:00] S(1);
BEGIN
ITEM WC$SMID U(00,00,12); # INTERNAL SM ID #
END
#
** ABHARY - APPLICATION BLOCK HEADER ARRAY
*
* ABHARY IS A ONE WORD ARRAY FOR INCOMING ABH.
*
#
ARRAY ABHARY[00:00] S(1);
BEGIN
ITEM ABH$WRD U(00,00,60); # FULL WORD #
END
#
** TXTARA - TEXT AREA
*
* TXTARA IS A TEXT AREA FOR THE INCOMING SM/DATA-BLOCK.
*
#
ARRAY TXTARA[00:10] S(1);
BEGIN
ITEM TXT$WORD U(00,00,60);
END
#
**** PROC CSNVDSP - XREF LIST
#
XREF
BEGIN
PROC ABORT; # ABORT MACRO #
PROC MESSAGE; # ISSUE DAYFILE MESSAGE (MACREL) #
PROC SSTAQE; # SERVICE AND SCHEDULR ACCEPT-Q-ENTRY RTN#
END
#
****
#
# DEFS #
DEF MXAPSFC$ # 3 #; # MAX NUMBER OF APP SM #
DEF MXCPSFC$ # 23 #; # MAX NUMBER OF CONN TRAFFIC SM #
DEF MXHPSFC$ # 7 #; # MAX NUMBER HOP-PROG-CONTROL SM #
DEF MXIPSFC$ # 9 #; # MAX NUMBER IGNORED SM (NO-OPS) #
DEF MXPSFC$ # 42 #; # SUM OF ALL PRECEEDING (TOTAL ALL SMS) #
# ITEMS #
ITEM I U; # INDUCTION VARIABLE #
ITEM TEMP1 U; # TEMPORARY STORAGE AREA1 #
ITEM TEMP2 U; # AND AREA2 #
#
* DAYFILE MESSAGES FOR ABORT WHEN SM RECEIVED IS BAD
#
$BEGIN
ARRAY BADSM[00:00] S(3);
BEGIN
ITEM BADSM$TXT C(00,00,23) = ["NVFDDNT - UNEXPECTED SM"];
ITEM NO$ZERO U(02,18,42) = [0];
END
ARRAY BADBLKTYPE[00:00] S(3);
BEGIN
ITEM BADBT$TXT C(00,00,27)=["NVFDDNT - UNEXPECTED ABHABT"];
ITEM BADBT$ZERO U(02,42,18) = [0];
END
$END
#
* THE FOLLOWING TABLE CONTAINS PFC/SFC OF ALL SMS COMING INTO NVF.
* THE SMS ARE CATEGORIZED BY THE TYPE OF QUEUE IT IS DESTINED TO.
* WITHIN EACH CATEGORY, THE SMS ARE ALPHABETIZED. A CHANGE IN
* ANY ONE OF THE CATEGORY REQUIRES THE SAME CHANGE IN ITS
* CORRESPONDING STATUS-LIST IN THE APPROPRIATE TEXT. AND THE
* PROCEDURE NEED TO BE RECOMPILED WITH NEW MAXIMUM VALUE
* DEFINED FOR THE GROUP, AND NEW SUM FOR THE TOTAL SMS.
* THE LAST ENTRY IS USED TO STORE THE SM CURRENTLY BEING PROCESSED
* IN CASE IT IS AN SM THAT IS NOT EXPECTED AND THUS WILL NOT MATCH
* THE PFC/SFC LISTED.
#
ARRAY PSFCTBL[00:MXPSFC$] S(1);
BEGIN
ITEM PSF$CODE U(00,00,16) = [ #*** APP SM ***#
FAIAPP, # APP FAILED #
NETONR, # APP NETON REQ #
NETOFFR, # APP NETOFF #
#*** CONN TRAFFIC SM ***#
CRACC, # APP ACCEPTED CON#
CRCB, # CONN BROKEN #
CRITE, # TERM CONN REQ #
CRIAP, # A-A CON REQ #
CRRAP, # REMOTE A-A REQ #
CRRCN, # RECON CONN NVF #
CRSWHN, # SWCH CON FR NVFN#
CRTRMN, # TERMINATE CON N #
FCACK, # BLK DEL ACKNGD #
FCBRK, # BREAK OCCURRED #
INTRUSR, # BREAK OCCURRED #
FCINA, # CONN INACTIVE #
FCINIT, # CONN INITIALIZED#
FCNAK, # BLK NOT DELIVERD#
BIMARK, # BREAK INDICATOR #
HOPBRK, # OPERATOR BREAK #
HOPCMD, # HOP COMMD TO APP#
HOPENDD, # K-DIS ASGND APP #
HOPIG, # HOP IGNORE ALERT#
HOPPAGE, # CHGND DIS PAGE #
HOPSTRT, # K-DIS ASGND APP #
TCHTCH, # TERM CHARS CHGED#
CRSLL, # LLINK STATUS #
#*** HOP PROGRAM CNTRL SM ***#
HOPDU, # HOP DUMP FL REQ #
HOPNOTR, # HOP T-OFF AIP TR#
HOPREL, # HOP REL DLF REQ #
HOPRS, # RST STAT GATH RQ#
HOPTRCE, # HOP T-ON AIP TR #
HOPDB, # BEGIN DEBUG #
HOPDE, # END DEBUG #
#*** IGNORED SM ***#
CTRCHRN, # TERM CHARS NORM #
CTRCHRA, # TERM CHARS ABN #
CTRCTDN, # CDCNT TERMDEF/N #
CTRCTDA, # CDCNT TERMDEF/A #
CTRTCD, # TERM CHAR DEFS #
CTRCCD, #CHANGE CDCNET DEF#
CTRUCD, # UNSOLIC CHAR DEF#
CTRRTCA, #REQ TRM CHAR/A #
CTRRCCA]; #RQST CDCNT CHAR/A#
END
CONTROL EJECT;
#
* DETERMINE TYPE OF NETWORK TRAFFIC. IF DATA-BLOCK, ROUTE IT TO
* CTQ, ELSE SCAN THRU PFC/SFC-CLASSIFY TABLE FOR A MATCH OF THE
* SM. WHEN FOUND, USE THE POSITION OF THE SM IN THE TABLE TO
* DETERMINE THE QUEUE THE SM SHOULD ROUTE TO AND SET THE SM ID.
#
TEMP1 = P<ABH>; # SAVE ABH POINTER #
P<ABH> = LOC(ABHARY); # POINT TO ABH BUFFER AREA #
IF ABHABT[0] LQ APMSG
THEN
BEGIN # DATA-BLOCK, ROUTE TO CTQ #
SSTAQE(P<CTQ>,WCARY,ABHARY,TXTARA);
END
ELSE IF ABHABT[0] EQ APPCMD
THEN
BEGIN # APP SM #
TEMP2 = P<APSM>; # SAVE ORGNL APP SM POINTER #
P<APSM> = LOC(TXTARA); # THEN POINT IT TO TEXT AREA #
PSF$CODE[MXPSFC$] = PFCSFC[0]; # SAVE CURRENT SM #
FOR I = 0 STEP 1
WHILE PFCSFC[0] NQ PSF$CODE[I]
DO # DETERMINE WHICH SM #
BEGIN END
IF I LS MXAPSFC$
THEN
BEGIN # APP SM, ROUTE IT TO ASQ #
WC$SMID[0] = I;
SSTAQE(P<ASQ>,WCARY,ABHARY,TXTARA);
END
ELSE IF I LS (MXAPSFC$ + MXCPSFC$)
THEN
BEGIN # CN-TRF-SM, ROUTE IT TO CTQ #
WC$SMID[0] = I -MXAPSFC$;
SSTAQE(P<CTQ>,WCARY,ABHARY,TXTARA);
END
ELSE IF I LS (MXAPSFC$ + MXCPSFC$ + MXHPSFC$)
THEN
BEGIN # HOP-PRG-CTRL-SM, ROUTE TO HCQ#
WC$SMID[0] = I - MXAPSFC$ -MXCPSFC$;
SSTAQE(P<HCQ>,WCARY,ABHARY,TXTARA);
END
ELSE IF I LS MXPSFC$
THEN # SM TO IGNORE #
BEGIN END
ELSE # UNEXPECTED SM #
BEGIN
$BEGIN
IF ABHADR[0] EQ 0
THEN
BEGIN
MESSAGE (BADSM, 0);
ABORT; # ABORT NVF #
END
$END
SSTAQE(P<HCQ>,WCARY,ABHARY,TXTARA); # TO HCQ IF NON DBG #
END
P<APSM> = TEMP2; # RESTORE POINTER #
END # APP SM #
ELSE # UNEXPECTED TYPE OF NETWORK TRAFFIC #
BEGIN
$BEGIN
MESSAGE (BADBLKTYPE, 0);
ABORT; # ABORT NVF #
$END
END
P<ABH> = TEMP1;
RETURN;
END # CSNVDSP #
END # NVFDDNT #
TERM