*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 = 0; P = NCNBAD; P = BUFADDR + BLKHSIZE ; ABHTEMP = ABHWORD[0] ; # SAVE ABH # P = P ; P = LOC(ABHTEMP) ; FETINDEX = 0; # INITIALIZE FET INDEX # IF NCNBID[0] EQ NCNBIDVALUE THEN BEGIN # CN NON-ZERO # LOCLLCB(NCNBHN[0],NCNBTN[0],P); # 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 = NCNBACNB[0]; IF P 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 = 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