cdc:nos2.source:nam5871:nvftcb
Table of Contents
NVFTCB
Table Of Contents
- [00006] PROC NVFTCB
- [00007] NVFTCB - CONNECTION BROKEN REQUEST (CR/CB SM)
- [00011] CONNECTION BROKEN REQUEST (CR/CB SM).
- [00070] PROC NVFSCAD
- [00071] PROC NVFTETC
- [00072] PROC NVFTPVD
- [00073] PROC NVFTURT
Source Code
- NVFTCB.txt
- *DECK NVFTCB
- USETEXT TEXTNVF
- USETEXT TXSMNVF
- USETEXT TXTANVF
- PROC NVFTCB;
- # TITLE NVFTCB - CONNECTION BROKEN REQUEST (CR/CB SM) #
- BEGIN # NVFTCB #
- #
- ** NVFTCB - CONNECTION BROKEN REQUEST (CR/CB SM).
- *
- * E. THAVIKULWAT 81/11/10
- * C. BRION 83/04/11. 83/05/10.
- *
- * THIS PROCEDURE'S MAIN FUNCTION IS TO RETRIEVE THE BROKEN
- * CONNECTION'S TABLES AND PREPARE FOR TERMINATION. IT IS CALLED
- * INTO EXECUTION BY PROCEDURE *NVFTDQE*.
- *
- * PROC NVFTCB
- *
- * ENTRY:
- * CR/CB SM IN *MSGBUF*
- *
- * EXIT:
- * CONNECTION TERMINATED.
- *
- * NOTES:
- * 1) A CR/CB REQUEST FOR A NON-NVF CONNECTION COULD OCCUR BEFORE
- * OR AFTER A CR/ACC WAS RECEIVED IN RESPONSE TO THE CR/SWH
- * REQUEST. IF IT OCCURRED BEFORE A CR/ACC WAS RECEIVED, THEN
- * A *PTAC* ENTRY FOR THE CONNECTION STILL EXIST. IF IT
- * OCCURRED AFTER A CR/ACC WAS RECEIVED, A *PTAC* ENTRY FOR THE
- * CONNECTION NO LONGER EXIST, BUT A VCB ENTRY FOR THE
- * CONNECTION EXIST OUT ON THE VCB FILE.
- * 2) A CR/CB REQUEST FOR AN NVF CONNECTION COULD OCCUR BEFORE OR
- * AFTER A CR/SWH REQUEST WAS SENT BY *NVF*. NORMAL SITUATION
- * WOULD BE BEFORE A CR/SWH REQUEST WAS SENT. CR/CB REQUEST
- * FOR AN NVF CONNECTION AFTER A CR/SWH REQUEST WAS SENT
- * IMPLIES THAT NVF SENT OUT THE CR/SWH REQUEST BEFORE
- * REALIZING THAT THE CONNECTION WAS ALREADY BROKEN. IN BOTH
- * CASES A *PTAC* ENTRY STILL EXIST FOR THE CONNECTION.
- *
- * METHOD:
- * IF AN NVF CONNECTION IS BROKEN, GET ITS *PTAC* ENTRY. IF
- * STATE OF THE *PTAC* IS AWAITING VALIDATION OR VCB DATA, THEN
- * CONNECTION CANNOT BE TERMINATED AT THIS TIME. CHANGE STATE TO
- * CONNECTION BROKEN SO THE PROCESSES THAT RECEIVES THE VALIDATION
- * OR VCB DATA COULD PROCEED TO TERMINATE THE CONNECTION AS SOON
- * AS THE CIO FUNCTION COMPLETES. OTHERWISE, PROCEED TO TERMINATE
- * THE CONNECTION.
- *
- * IF A NON-NVF CONNECTION IS BROKEN BEFORE A CR/ACC WAS RECEIVED,
- * GET ITS *PTAC* ENTRY, UPDATE WITH NEW ACN, DECREMENT T-A
- * CONNECTION COUNT, AND TERMINATE THE CONNECTION.
- *
- * IF A NON-NVF CONNECTION IS BROKEN AFTER A CR/ACC WAS RECEIVED,
- * ALLOCATE SPACE FOR A NEW *PTAC* ENTRY, MAKE VCB READ REQUEST,
- * DECREMENT T-A CONNECTION COUNT, UPDATE *PTAC* WITH INFORMATION
- * RECEIVED IN THE CR/CB SM, SET STATE OF THE *PTAC* TO
- * AWAIT-VCB-CB, AND EXIT.
- #
- #
- **** PROC NVFTCB - XREF LIST.
- #
- XREF
- BEGIN
- PROC NVFSCAD; # COMPLETE APPLICATION DEPARTURE #
- PROC NVFTETC; # END TERMINAL CONNECTION #
- PROC NVFTPVD; # PREPARE TO RECEIVE VALIDATION DATA #
- PROC NVFTURT; # UPDATE *RAU* TABLE #
- END
- #
- ****
- #
- ITEM AS I; # SUBSCRIPT FOR ARRAY AST #
- ITEM ASENTRY I; # NUMBER AST ENTRIES #
- ITEM MATCH B; # EXIT LOOP VARIABLE #
- ITEM NENTRY I; # NUMBER OF ENTRIES IN TABLE #
- ITEM PRIAPP B; # PRIMARY APPLICATION INDICATOR #
- ITEM PT I; # SUBSCRIPT FOR ARRAY PTAC #
- ITEM PORD I; # PRIMARY AST ENTRY ORDIANL #
- CONTROL EJECT;
- #
- * DETERMINE NUMBER OF AST ENTRIES.
- #
- ASENTRY = ASTLNGTH/ASTSIZ$;
- #
- * DETERMINE WHETHER OR NOT BROKEN CONNECTION BELONGS TO NVF.
- #
- IF CRNACN[0] NQ 0
- THEN # NVF CONNECTION BROKEN #
- BEGIN
- #
- * NVF'S CONNECTION HAS BEEN BROKEN. SEARCH *PTAC* TABLE FOR
- * ENTRY THAT MATCHES ON ACN. NO MATCH IMPLIES NVF SENT OUT THE
- * CR/SWH REQUEST BEFORE REALIZING THAT THE CONNECTION WAS BROKEN.
- #
- MATCH = FALSE;
- NENTRY = PTALNGTH / PTACSIZ$; # CALCULATE NUMBER OF ENTRIES #
- FOR PT = 0 STEP 1 WHILE (NOT MATCH AND PT LS NENTRY)
- DO
- BEGIN
- IF PTA$ACN[PT] EQ CRNACN[0]
- THEN # PTAC ENTRY FOUND #
- BEGIN
- #
- * IF *PTAC* STATE IS AWAITING VALIDATION (CPM56B) OR VCB
- * DATA, THEN CONNECTION CANNOT BE TERMINATED AT THIS TIME.
- * OTHERWISE, PROCEED TO END TERMINAL CONNECTION.
- #
- PTA$RC[PT] = CRRRCN[0]; # SAVE REASON CODE #
- IF (PTA$STATE[PT] EQ PTACST"AWTVAL")
- OR (PTA$STATE[PT] EQ PTACST"AWTVCBR")
- OR (PTA$STATE[PT] EQ PTACST"AWTVCBL")
- THEN # AWAITING DATA, CAN'T TERMNATE #
- BEGIN
- IF PTA$STATE[PT] EQ PTACST"AWTVAL"
- THEN
- BEGIN
- PTA$STATE[PT] = PTACST"CONBROK"; # CONN BROKEN STATE #
- END
- ELSE
- BEGIN
- PTA$STATE[PT] = PTACST"AWTVCBC"; # AWAIT-VCB-CB STATE #
- END
- #
- * IF THE CONNECTION WAS IN THE PROCESS OF BEING LOANED FROM
- * THE PRIMARY TO THE SECONDARY APPLICATION, CLEAR THE LOAN
- * STATUS FROM THE PTAC AND TREAT THIS AS A NORMAL CONNECTION
- * SWITCH. THIS IS TO PREVENT THE CONNECTION COUNT OF THE
- * PRIMARY APPLICATION FROM BEING DECREMENTED TWICE (IN
- * *NVFTRVD*).
- #
- IF (PTA$LRC[PT] EQ RCRC"LSA") AND
- (PTA$STATE[PT] EQ PTACST"AWTVCBC")
- THEN
- BEGIN
- PTA$LRC[PT] = 0;
- PTA$LCF[PT] = FALSE;
- END
- END
- ELSE # PROCEED TO TERMINATE CONN #
- BEGIN
- #
- * IF THIS IS AN INITIAL LOAN CONNECTION, DELETE THE T-A
- * CONNECTION COUNT FOR THE PRIMARY APPLICATION. UPDATE THE
- * *RAU* TABLE, IF NECESSARY.
- #
- IF PTA$LRC[PT] EQ RCRC"LSA"
- THEN
- BEGIN
- PRIAPP = TRUE;
- NVFTURT(VCB$VCB[0],PT,PRIAPP);
- FOR AS = 0 STEP 1 WHILE
- ((AS LS ASENTRY) AND
- (AST$AN[AS] NQ PTA$PRIAN[PT]))
- DO
- BEGIN
- END
- IF AS LS ASENTRY
- THEN
- BEGIN
- AST$RACN[AS] = AST$RACN[AS] - 1;
- NVFSCAD(AS);
- END
- END
- #
- * IF THIS IS A RETURN OF A LOANED CONNECTION FROM THE
- * SECONDARY TO THE PRIMARY APPL, UPDATE THE *RAU* TABLE OF
- * THE PRIMARY (SWITCHED) APPL, IF NECESSARY. THERE IS NO
- * NEED TO DECREMENT THE NUMBER OF RESERVED CONNECTIONS, AS
- * THIS SHOULD ALREADY HAVE BEEN DONE IN NVFTDSP.
- #
- IF PTA$LRC[PT] GR RCRC"LSA"
- THEN
- BEGIN
- PRIAPP = FALSE;
- NVFTURT(VCB$VCB[0],PT,PRIAPP);
- END
- NVFTETC(PT); # END TERMINAL CONNECTION #
- END
- MATCH = TRUE; # EXIT LOOP #
- END
- END
- IF NOT MATCH
- THEN # CR/SWH REQUEST ALREADY SENT #
- BEGIN
- #
- * CR/SWH ALREADY SENT. CALL *NVFTURT* TO GET *PTAC* ENTRY THAT
- * MATCHES ON VCB, UPDATE *RAU* TABLE IT NEEDED, SAVE ACN,
- * DECREMENT T-A CONNECTION COUNT, AND TERMINATE CONNECTION.
- * BEFORE ALL THIS CAN BE DONE, WE MUST FIRST SEARCH THE *PTAC*
- * TABLE FOR THE VCB ORDINAL IN THE CR/CB. IF NO MATCHING
- * *PTAC* ENTRY CAN BE FOUND, IT MEANS NVF HAS ALREADY INITIATED
- * CONNECTION TERMINATION AND THIS HAS COLLIDED WITH THE CR/CB.
- * IN THIS CASE THE CR/CB SHOULD BE IGNORED. THIS SEARCH IS
- * REDUNDANT WITH THAT PERFORMED BY *NVFTURT*, BUT IS NECESSARY
- * TO KEEP *NVFTURT* FROM ABORTING INAPPROPRIATELY.
- #
- FOR PT=0 STEP 1
- WHILE PTA$VCB[PT] NQ CRVCB[0]
- AND PT LS NENTRY
- DO # FIND *PTAC* ENTRY #
- BEGIN END
- IF PT EQ NENTRY
- THEN # MUST IGNORE CR/CB/SM #
- RETURN;
- PTA$ACN[PT] = CRACN[0]; # SAVE ACN #
- PTA$RC[PT] = CRRRCN[0]; # SAVE REASON CODE #
- #
- * LOCATE THE AST ENTRY FOR THE PTAC ENTRY.
- #
- FOR AS = 0 STEP 1 WHILE
- (AS LS ASENTRY AND
- AST$PANAM[AS] NQ PTA$SWTAPP[PT])
- DO
- BEGIN
- END
- #
- * UPDATE THE RAU TABLE, IF NEEDED. DECREMENT THE NUMBER OF T-A
- * CONNECTIONS FOR THE SELECTED APPLICATION.
- #
- PRIAPP = FALSE;
- NVFTURT(CRVCB[0],PT,PRIAPP); # UPDATE *RAU* TABLE #
- AST$TACN[AS] = AST$TACN[AS] - 1; # DECREMENT NUMBER OF CONN #
- AST$ICCN[AS] = AST$ICCN[AS] - 1; #DECREMENT NO OF INCMG CONN#
- NVFSCAD(AS); # COMPLETE APPLICATION DEPARTURE #
- #
- * IF THIS IS AN INITIAL LOAN, LOCATE THE AST ENTRY FOR THE PRIMARY
- * APPLICATION. UPDATE THE *RAU* TABLE AND DECREMENT THE NUMBER OF
- * RESERVED CONNECTIONS.
- #
- IF PTA$LRC[PT] EQ RCRC"LSA"
- THEN
- BEGIN
- PRIAPP = TRUE;
- NVFTURT(CRVCB[0],PT,PRIAPP);
- FOR AS = 0 STEP 1 WHILE
- (AS LS ASENTRY AND
- AST$AN[AS] NQ PTA$PRIAN[PT])
- DO
- BEGIN
- END
- IF AS LS ASENTRY
- THEN
- BEGIN
- AST$RACN[AS] = AST$RACN[AS] - 1;
- NVFSCAD(AS);
- END
- END
- NVFTETC(PT); # END TERMINAL CONNECTION #
- END
- END
- ELSE # NON-NVF CONNECTION BROKEN #
- BEGIN
- #
- * A NON-NVF CONNECTION HAS BEEN BROKEN. NO CR/TRM SM WILL BE
- * SENT. DETERMINE IF CR/CB OCCURRED BEFORE ACKNOWLEDGEMENT OF
- * THE CR/SWH REQUEST (I.E., CR/ACC HAS NOT YET BEEN RECEIVED).
- #
- IF CRLIMBO[0]
- THEN # CR/CB OCCURRED BEFORE CR/ACC RECEIVED #
- BEGIN
- #
- * CR/CB OCCURRED BEFORE CR/ACC WAS RECEIVED SO A *PTAC* ENTRY
- * STILL EXIST. CALL *NVFTURT* TO FIND THE *PTAC* ENTRY AND
- * UPDATE *RAU* TABLE IF NEEDED. DECREMENT T-A CONNECTION
- * COUNT AND END TERMINAL CONNECTION.
- #
- PRIAPP = FALSE;
- NVFTURT(CRVCB[0],PT,PRIAPP); # UPDATE *RAU* TABLE IF NEEDED #
- #
- * LOCATE AST ENTRY FOR PTAC ENTRY THEN DECREMENT NUMBER TA
- * CONNECTIONS.
- #
- FOR AS = 0 STEP 1 WHILE
- (AS LS ASENTRY AND
- AST$PANAM[AS] NQ PTA$SWTAPP[PT])
- DO
- BEGIN
- END
- AST$TACN[AS] = AST$TACN[AS] - 1; # DECREMENT NUMBER OF CONN #
- AST$ICCN[AS] = AST$ICCN[AS] - 1; #DECREMENT NO OF INCMG CONN#
- NVFSCAD(AS); # COMPLETE APPLICATION DEPARTURE #
- #
- * IF THIS WAS AN INITIAL LOAN OF A CONNECTION FROM PRIMARY TO
- * SECONDARY APPLICATION, LOCATE THE AST ENTRY FOR THE PRIMARY APPL
- * AND DECREMENT THE NUMBER OF T-A CONNECTIONS FOR THE PRIMARY APPL.
- * CALL *NVFTURT* TO UPDATE THE *RAU* TABLE FOR THE PRIMARY APPL, IF
- * NEEDED.
- #
- IF PTA$LRC[PT] EQ RCRC"LSA"
- THEN
- BEGIN
- PRIAPP = TRUE;
- NVFTURT(CRVCB[0],PT,PRIAPP); # UPDATE *RAU* TABLE #
- FOR AS = 0 STEP 1 WHILE
- (AS LS ASENTRY AND
- AST$AN[AS] NQ PTA$PRIAN[PT])
- DO
- BEGIN
- END
- AST$RACN[AS] = AST$RACN[AS] - 1; # DECREMENT NO. OF CONN. #
- NVFSCAD(AS);
- END
- NVFTETC(PT); # END TERMINAL CONNECTION #
- END
- ELSE # CR/CB OCCURRED AFTER CR/ACC RECEIVED #
- BEGIN
- #
- * CR/CB OCCURRED AFTER A SUCCESSFUL SWITCH SO A *PTAC* ENTRY NO
- * LONGER EXIST FOR THIS CONNECTION. CALL *NVFTPVD* TO ALLOCATE
- * SPACE FOR A NEW *PTAC* ENTRY AND MAKE VCB READ REQUEST ENTRY
- * IN *VRQ* QUEUE. UPDATE *PTAC* WITH INFORMATION RECEIVED IN
- * THE CR/CB SM.
- #
- NVFTPVD(CRVCB[0],CRAN[0],PT);
- PTA$VCB[PT] = CRVCB[0];
- PTA$DT[PT] = CRDT[0];
- PTA$TC[PT] = CRCBTC[0]; # SAVE TERMINAL CLASS #
- #
- * SET *PTAC* STATE TO AWAIT-VCB-CB TO DIFFERENTIATE FROM
- * AWAITING VCB READ BECAUSE OF A RECONNECT REQUEST.
- #
- PTA$STATE[PT] = PTACST"AWTVCBC";
- END
- END
- END # END NVFTCB #
- TERM
cdc/nos2.source/nam5871/nvftcb.txt ยท Last modified: 2023/08/05 17:23 by Site Administrator