*DECK NFOB
USETEXT NIPDEF
USETEXT AHEADER
USETEXT ACNB
USETEXT BPIPBUF
USETEXT DBGBUF
USETEXT DRHDR
USETEXT NHEADER
USETEXT LLCB
USETEXT NCNB
USETEXT STATTAB
USETEXT SYSTIME
PROC NFOB(BUFADDR,NCNBAD) ; # LINK BLOCK TO PIP OUTBOUND #
STARTIMS;
#
*1DC NFOB
*
* 1. PROC NAME AUTHOR DATE
* NFOB P.C.TAM 80/02/08
* C. BITTNER 81/07/13
*
* 2. FUNCTIONAL DESCRIPTION.
* THIS ROUTINE IS RESPONSIBLE FOR LINKING MESSAGES TO THE PIP
* OUTBOUND BUFFER CHAIN AND THE A-A INTRA-HOST
* MESSAGE QUEUE.
*
* 3. METHOD USED.
* CN NON-ZERO
* ABT = BLK,MSG,CMD (SYNCHRONOUS SM)
* IN REGULATION OR DOWNLINE BLOCK LIMIT REACHED
* LINK MSG TO NCNB
* NOT IN REGULATION
* SET-UP NETWORK HEADER
* ADD BSN TO DOWNLINE MESSAGES
* CREATE ACKNOWLEDGE QUEUE ENTRY
* RESET HOSTSIDE INACTIVITY TIMER
* ABT = APPNET (ONE WORD NETWORK MSG-INITR,RST,TERM,...)
* CN = 0
* SET UP NETWORK HEADER
* UPDATE STATISTICS
* IF THE MESSAGE IS AN A-A INTRA-HOST MESSAGE
* (DN OR SN = 0) THEN CALL NFOB1 TO QUEUE
* THE MESSAGE TO THE A-A INTRA-HOST QUEUE
* ELSE (IF NOT A-A INTRA-HOST MESSAGE)
* CALL NXBLINK TO QUEUE THE MESSAGE TO
* THE PIP OUTBOUND CHAIN.
*
* 4. ENTRY PARAMETERS.
* BUFADD ADDRESS OF DATA MESSAGE
* NCNBAD ADDRESS OF NCNB/LLCB
*
* 5. EXIT PARAMETERS.
* NONE
*
*
* 6. COMDECKS CALLED AND SYMPL TEXTS USED
* BPIPBUF DRHDR DBGBUF NHEADER
* NIPDEF ACNB NCNB STATTAB
* SYSTIME AHEADER LLCB
*
* 7. ROUTINES CALLED.
* BLINK LINK DATA MESSAGE TO NCNB
* LOCLLCB LOCATE LLCB
* NFOB1 INTRA-HOST LINK PROCESSOR
* NXBLINK LINK MSG TO PIP OUTBOUND CHAIN
* XTRACE TRACES CALLS
*
* 8. DAYFILE MESSAGES. NONE
*
#
STOPIMS;
#
FORMAL PARAMS
#
ITEM BUFADDR ; # FWA OF BLOCK TO SEND TO NPU #
ITEM NCNBAD ; # FWA OF NCNB/LLCB #
#
EXTERNAL VARIABLES
#
XREF BEGIN
PROC BLINK; # LINK DATA MESSAGE TO NCNB #
PROC LOCLLCB; # LOCATE LLCB #
PROC NFOB1 ; # INTRA-HOST LINK PROCESSOR #
PROC NXBLINK ; # LOG MESSAGE INTO PIP OUT #
PROC TWRITE; # RECORD MESSAGE IN ZZZZZDN FILE #
PROC XTRACE; # TRACE CALL #
END
#
INTERNAL VARIABLES
#
ITEM FETINDEX; # PRIORITY INDEX #
ITEM INDEX2; # NBT FET INDEX FOR DOWNLINE DATA #
ITEM ABHTEMP U; # TEMPORARY TO STORE ABH #
#**********************************************************************#
BEGIN
CONTROL IFEQ DEBUG,1 ;
XTRACE("NFOB ") ;
CONTROL FI;
P<DRHDRWD> = 0;
P<NCNB> = NCNBAD;
P<AHEADER> = BUFADDR + BLKHSIZE ;
ABHTEMP = ABHWORD[0] ; # SAVE ABH #
P<NHEADER> = P<AHEADER> ;
P<AHEADER> = LOC(ABHTEMP) ;
FETINDEX = 0; # INITIALIZE FET INDEX #
IF NCNBID[0] EQ NCNBIDVALUE
THEN
BEGIN # CN NON-ZERO #
LOCLLCB(NCNBHN[0],NCNBTN[0],P<LLCB>); # FIND MATCHING LLCB #
IF ABHABT[0] NQ 0
THEN # IT IS BLK, MSG, OR SYNCHRONOUS COMAND #
BEGIN
IF (NCNBNBO[0] GQ NCNBDBL[0]) OR NCNBHR[0] OR NCNBNR[0]
THEN
BEGIN # IN REGULATION OR NBL REACHED #
BLINK(BUFADDR,NCNBAD); # LINK MSG TO NCNB #
GOTO NFOB77;
END
ELSE
BEGIN # SEND CONNECTION DATA TO NPU #
NHWORD[0] = 0; # CLEAR NETWORK HEADER #
IF ABHABT[0] NQ APPCMD
THEN # DATA MESSAGE #
BEGIN
BT[0] = ABHABT[0] ; # BLOCK TYPE #
NHDBC[0] = ABHDBC[0] ; # DATA BLOCK CLARIFIER #
END
ELSE
BT[0] = NETCMD ; # SYNCH MESSAGE #
# ADD BSN TO DOWNLINE MESSAGES #
IF NCNBDBSN[0] LS 7
THEN # BSN RANGES FROM 1 TO 7 #
NCNBDBSN[0] = NCNBDBSN[0] + 1;
ELSE
NCNBDBSN[0] = 1;
NHBSN[0] = NCNBDBSN[0]; # INSERT BSN INTO NETW HEADER #
NCNBNBO[0] = NCNBNBO[0] + 1; # INCR DOWNLN BLK CTR #
# CREATE ACKNOWLEDGE QUEUE ENTRY #
# THE APPLICATION BLOCK HEADER WITH ADR=BSN IS ACKQ ENTRY #
ABHADR[0] = NCNBDBSN[0]; # SAVE BSN IN ACKQ ENTRY #
CMWORD[NCNBACKQ[0]+ACKHSIZE+NCNBAKIN[0]] = ABHWORD[0];
IF (NCNBAKIN[0] + 1) GQ NCNBDBL[0]
THEN
NCNBAKIN[0] = 0; # RESET OFFSET TO BEGIN OF BUFFER #
ELSE
NCNBAKIN[0] = NCNBAKIN[0] + 1; # UPDATE IN PRT OFFSET #
# RESET THE INACTIVITY COUNTER IN THE ACNB #
P<ACNB> = NCNBACNB[0];
IF P<ACNB> NQ 0
THEN
ACNBINACT[0] = RTSECS[0] + INACTVAL;
CONTROL IFEQ STAT,1;
NCNBTOTB[0] = NCNBTOTB[0] + 1;
NCNBTOTC[0] = NCNBTOTC[0] + ABHTLC[0];
CONTROL FI;
END
END
NHADDR[0] = NCNBNADR[0]; # SET NETWORK NADRESS DN/SN/CN #
IF BT[0] NQ NETBACK
THEN # DELIVER BLOCK PROTOCOL ELEMENTS ON CONNECTION PRIORITY #
BEGIN
FETINDEX = NCNBPRI[0]; JCL1109 9
IF FETINDEX EQ 1
THEN # HIGH PRIORITY CONNECTION #
BEGIN
NHPRI[0] = TRUE;
END
ELSE
BEGIN
NHPRI[0] = FALSE;
END
END
END
ELSE # ASYNCHRONOUS SUPERVISORY MESSAGE #
BEGIN
P<LLCB> = NCNBAD ; # FWA OF LLCB #
NHWORD[0] = 0; # CLEAR NETWORK HEADER #
DN[0] = LLCBTN[0]; # DESTINATION NODE #
SN[0] = LLCBHN[0]; # SOURCE NODE #
BT[0] = NETCMD; # BLOCK TYPE #
END
INDEX2 = (LLCBNBTE[0]*NBTFETNO) + OSTFET + FETINDEX;
NHACT[0] = ABHACT[0] ; # SET TEXT LENGTH #
CC[0] = ABHTLC[0] ; # CHARACTER COUNT #
CONTROL IFEQ STAT,1; # STATISTICS ON #
LLCBCMTC[0] = LLCBCMTC[0] + CC[0];
CONTROL FI;
IF DN[0] EQ 0
OR SN[0] EQ 0
THEN # INTRA-HOST A TO A #
NFOB1(BUFADDR) ;
ELSE # NETWORK OUTBOUND DATA #
NXBLINK(BUFADDR,INDEX2) ;
NFOB77:
RETURN;
END
TERM