cdc:nos2.source:nam5871:nvfatac
Table of Contents
NVFATAC
Table Of Contents
- [00008] PROC NVFATAC
- [00009] NVFATAC - TERMINATE A-A CONNECTION
- [00014] TERMINATE A-A CONNECTION.
- [00053] PROC ABORT
- [00054] PROC MESSAGE
- [00055] PROC SSTRTS
- [00056] PROC SSTATS
- [00057] PROC NVFAPVD
- [00058] PROC NVFSCAD
- [00059] PROC NVFUMQE
- [00060] PROC NVFUFVO
- [00061] PROC NVFACTC
Source Code
- NVFATAC.txt
- *DECK NVFATAC
- USETEXT TEXTNVF;
- USETEXT TEXTSS;
- USETEXT TXSMNVF;
- USETEXT TXTANVF;
- USETEXT TXTAPSS;
- USETEXT TXTSUSS;
- PROC NVFATAC;
- # TITLE NVFATAC - TERMINATE A-A CONNECTION #
- BEGIN # NVFATAC #
- #
- ** NVFATAC - TERMINATE A-A CONNECTION.
- *
- * C. BRION 82/06/03, 83/12/12.
- *
- * THIS PROCEDURE PROCESSES THE CR/CB/U, CR/RCN/R AND FC/INACT
- * (TIMEOUT) SMS.
- *
- * PROC NVFATAC
- * ENTRY:
- * THE INPUT SM RESIDES IN MSGBUF.
- *
- * EXIT:
- * THERE ARE THREE POSSIBLE EXIT CONDITIONS:
- * 1) WHEN A CR/CB FOR A NON-NVF CONNECTION OR A CR/RCN IS
- * RECEIVED, A VCB READ REQUEST IS MADE AND THE PAAC ENTRY
- * CREATED.
- *
- * 2) WHEN A CR/CB FOR A NVF CONNECTION IS RECEIVED, A CR/TRM
- * SM IS ISSUED, THE NUMBER OF A-A CONNECTIONS FOR THE AP-
- * PLICATION IS DECREMENTED, APPLICATION DEPARTURE PROCESSING
- * IS PERFORMED, A CALL TO PROCEDURE NVFACTC IS MADE
- * IN ORDER TO RELEASE THE ACTIVE PID TABLE (IF NEEDED),
- * RELEASE THE PAAC ENTRY AND RELEASE THE VCB ORDINAL.
- *
- * 3) WHEN A TIMEOUT IS RECEIVED, A CR/RAP/A SM IS ISSUED FOR THE
- * CONNECTION ONLY IF THE CANCELLATION NUMBER AND ACN OF THE
- * TIMEOUT SM AND A PAAC ENTRY MATCH.
- * THE NUMBER OF PENDING A-A CONNECTIONS OF THE PAAC ENTRY IS
- * DECREMENTED AND APPLICATION DEPARTURE PROCESSING IS PERFORMED.
- * A CALL IS THEN MADE TO NVFACTC AS STATED ABOVE.
- #
- CONTROL EJECT;
- #
- **** PROC NVFATAC XREF LIST
- #
- XREF
- BEGIN
- PROC ABORT; # MACREL - ABORT TASK #
- PROC MESSAGE; # ISSUE MESSAGE TO DAYFILE #
- PROC SSTRTS; # SS-REMOVE TABLE SPACE #
- PROC SSTATS; # SS - ALLOCATE TABLE SPACE #
- PROC NVFAPVD; # PREPARE VCB REQUEST #
- PROC NVFSCAD; # COMPLETE APPL DEPARTURE #
- PROC NVFUMQE; # MAKE QUEUE ENTRY #
- PROC NVFUFVO; # FREE UP VCB ORDINAL #
- PROC NVFACTC; # CLEANUP TERMINATING CONN #
- END
- #
- ****
- #
- #
- * ITEM DEFINITIONS.
- #
- ITEM PAC I; # PAAC ENTRY ORDINAL #
- ITEM NENTRY I; # NUMBER TABLE ENTRY VAR #
- ITEM VCBIN I; # VCB ORDINAL #
- ITEM ANIN I; # APPL NUMBER #
- ITEM AORD I; # APPL AST ORDINAL #
- ITEM ASENTRY I; # NUMBER AST ENTRIES #
- ITEM PORD I; # PRIMARY APPL AST ORDINAL #
- ITEM VCBREL B; # VCB RELEASE FLAG #
- $BEGIN
- #
- * NOAST - NO AST ENTRY WAS FOUND.
- #
- ARRAY NOAST [00:00] S(4);
- BEGIN
- ITEM NO$MSG C(00,00,31) =
- [" NVFATAC - AST ENTRY NOT FOUND."];
- ITEM NO$ZERO U(03,06,54) = [0];
- END
- $END
- CONTROL EJECT;
- #
- *
- * MAIN NVFATAC PROCEDURE START
- *
- #
- ASENTRY = ASTLNGTH/ASTSIZ$;
- VCBREL = TRUE;
- #
- * CHECK IF TIMEOUT. IF SO, PROCEED TO LOCATE PAAC ENTRY.
- #
- IF WCB$SMID[0] EQ CTQSTAT"SINA"
- THEN
- BEGIN
- NENTRY = PACLNGTH/PAACSIZ$;
- FOR PAC = 0 STEP 1 WHILE
- NOT (PA$NACN[PAC] EQ FCACN[0] AND PA$CNUM[PAC] EQ ABHABN[0])
- AND (PAC LS NENTRY)
- DO
- BEGIN
- END
- IF PAC NQ NENTRY
- THEN
- BEGIN
- #
- * PAAC ENTRY FOUND, TIMEOUT IS GOOD. ATTEMPT TO FIND AST
- * ENTRY OF THE PAAC ENTRY.
- #
- FOR AORD = 0 STEP 1 WHILE
- ((PA$SWAP[PAC] NQ AST$PANAM[AORD]) AND
- (AORD NQ ASENTRY))
- DO
- BEGIN
- END
- IF AORD NQ ASENTRY
- THEN
- #
- * AST ENTRY FOUND.
- * PERFORM DEPARTURE PROCESSING FOR APPLICATION.
- #
- NVFSCAD(AORD);
- #
- * SEND CR/RAP/A SM.
- * RELEASE PAC ENTRY, ACPID TABLE SPACE AND VCB ORDINAL VIA
- * CALL TO NVFACTC.
- #
- SPMSG0[1] = 0;
- PFCSFC[1] = CRRAPA;
- CRNACN[1] = PA$NACN[PAC];
- CRRRAP[1] = RCRA"ANA";
- NVFUMQE(P<CTQ>,APSM[1],APPPR$,0,LCRRAPA);
- NVFACTC(PAC,VCBREL);
- GOTO ENDEXIT;
- END
- GOTO ENDEXIT;
- END
- #
- * NOT A TIMEOUT, CONTINUE FOR CB OR RECONNECT.
- * GET VCB ORDINAL AND APPL NUMBER FROM SM.
- #
- VCBIN = CRVCB[0];
- ANIN = CRAN[0];
- #
- * IF THE APPLICATION NUMBER IS 1, THAT IS NVF. DO NOT LOOK FOR AN
- * AST ENTRY BECAUSE NVF DOESN'T HAVE ONE. SET UP THE AST ORDINAL
- * TO BYPASS FURTHER AST CHECKS.
- #
- IF ANIN EQ 1
- THEN
- BEGIN
- AORD = ASENTRY;
- PORD = AORD;
- END
- ELSE
- #
- * DETERMINE THE AST ORDINAL OF THE APPLICATION. CHECK IF A
- * SECONDARY TYPE OF APPLICATION AND THEN DETERMINE THE PRIMARY
- * AST ORDINAL.
- #
- BEGIN
- FOR AORD = 0 STEP 1 WHILE
- ((AORD LS ASENTRY) AND
- (AST$AN[AORD] NQ ANIN))
- DO
- BEGIN
- END
- IF AORD NQ ASENTRY
- THEN
- BEGIN
- PORD = AORD;
- IF AST$PANAM[AORD] NQ AST$SANAM[AORD]
- THEN
- BEGIN
- FOR PORD = 0 STEP 1 WHILE
- ((PORD LS ASENTRY) AND
- (AST$SANAM[AORD] NQ AST$PANAM[PORD]))
- DO
- BEGIN
- END
- IF PORD EQ ASENTRY
- THEN
- PORD = AORD;
- END
- END
- END
- #
- * CHECK THE SFC OF THE INCOMING SM. IF CB (CONNECTION BROKEN),
- * CHECK IF NVFS CONNECTION OR NOT.
- #
- IF SFC[0] EQ CB
- THEN
- BEGIN
- IF (CRNACN[0] EQ 0 AND NOT CRLIMBO[0])
- THEN
- #
- * NON-NVF CONNECTION HAS RECEIVED A CR/CB. ISSUE READ VCB REQUEST.
- * A PAAC ENTRY CREATED AND SET THE STATE.
- #
- BEGIN
- #
- * IF NO AST ENTRY WAS FOUND, SOMETHING IS WRONG -- ABORT.
- #
- $BEGIN
- IF (AORD EQ ASENTRY) AND
- (ANIN NQ 1)
- THEN
- BEGIN
- MESSAGE(NOAST[0],0);
- ABORT;
- END
- $END
- NVFAPVD(VCBIN,ANIN,PAC);
- PA$STATE[PAC] = PAACST"PACB";
- PA$IAPRC[PAC] = CRRCB[0];
- PA$VCB[PAC] = VCBIN;
- END
- ELSE # MEMORY RESIDENT PAAC - NO CR/ACC SEEN #
- #
- * NVF CONNECTION NEVER REACHED THE SWITCHED STATE. A PAAC EXISTS.
- * LOCATE PAAC ENTRY, THEN THE APPLICATION TABLE ENTRY BASED ON THE
- * SWITCHED APPLICATION NUMBER IN THE PAAC ENTRY.
- #
- BEGIN
- NENTRY = PACLNGTH / PAACSIZ$;
- FOR PAC = 0 STEP 1 WHILE
- ((PAC LS NENTRY) AND (PA$VCB[PAC] NQ CRVCB[0]))
- DO
- BEGIN
- END
- #
- * A PAAC ENTRY MAY NOT BE FOUND SINCE IT MAY HAVE BEEN DELETED BY
- * FAIL/APPL PROCESSING. IF THIS IS THE CASE, JUST IGNORE THE CR/CB.
- #
- IF PAC EQ NENTRY
- THEN
- GOTO ENDEXIT;
- #
- * CHECK IF CONNECTION AWAITING VCB DATA ON RECONNECT. IF NOT,
- * THEN PROCEED. OTHERWISE, THE RECONNECT VCB PROCESSING WILL
- * FINISH CONNECTION PROCESSING AND ISSUE A CR/TRM/R SM.
- #
- IF PA$STATE[PAC] NQ PAACST"PARCN"
- THEN
- BEGIN
- #
- * IF THE APPL NUMBER IS 1 (FOR NVF), GET THE SWITCHED APPL NAME
- * FROM THE PAAC ENTRY INSTEAD OF THE SM.
- #
- IF ANIN EQ 1
- THEN
- BEGIN
- FOR AORD = 0 STEP 1 WHILE
- (AORD LS ASENTRY) AND
- (AST$PANAM[AORD] NQ PA$SWAP[PAC])
- DO
- BEGIN
- END
- IF AORD NQ ASENTRY
- THEN
- BEGIN
- PORD = AORD;
- IF AST$PANAM[AORD] NQ AST$SANAM[AORD]
- THEN
- BEGIN
- FOR PORD = 0 STEP 1 WHILE
- ((PORD LS ASENTRY) AND
- (AST$SANAM[AORD] NQ AST$PANAM[PORD]))
- DO
- BEGIN
- END
- IF PORD EQ ASENTRY
- THEN
- PORD = AORD;
- END
- END
- END
- #
- * DECREMENT NUMBER OF A-A CONNECTIONS FOR THE SECONDARY
- * AST ENTRY AND THE PRIMARY AST ENTRY IF NOT THE SAME ENTRY.
- #
- IF AORD NQ ASENTRY
- THEN
- BEGIN
- AST$AACN[AORD] = AST$AACN[AORD] - 1;
- IF AORD NQ PORD
- THEN
- AST$AACN[PORD] = AST$AACN[PORD] - 1;
- END
- #
- * ISSUE A CT/TRM/R SM ONLY FOR NVF CONNECTION.
- #
- IF NOT CRLIMBO[0]
- THEN
- BEGIN
- SPMSG0[1] = 0;
- PFCSFC[1] = CRTRM;
- RC[1] = CRRCB[0];
- CRNACN[1] = CRNACN[0];
- NVFUMQE(P<CTQ>,APSM[1],APPPR$,0,LCRTRM);
- END
- #
- * CALL NVFACTC TO RELEASE ACPID TABLE SPACE, THE PAAC ENTRY AND
- * THE ASSIGNED VCB ORDINAL. PROCEED TO COMPLETE APPLICATION DE-
- * PARTURE FOR SECONDARY AST ENTRY AND THE PRIMARY AST ENTRY IF
- * NOT THE SAME ENTRY.
- #
- NVFACTC(PAC,VCBREL);
- IF AORD NQ ASENTRY
- THEN
- BEGIN
- NVFSCAD(AORD);
- IF AORD NQ PORD
- THEN
- NVFSCAD(PORD);
- END
- END
- END
- END
- ELSE # CR/RCN/R SM RECEIVED #
- BEGIN
- #
- * CR/RCN RECEIVED. CHECK IF LIMBO STATE MEANING THAT
- * THE SWITCH NEVER ACTUALLY TOOK PLACE.
- #
- IF NOT CRLIMBO[0]
- THEN
- BEGIN
- #
- * IF NO AST ENTRY WAS FOUND, SOMETHING IS WRONG -- ABORT.
- #
- $BEGIN
- IF (AORD EQ ASENTRY) AND
- (ANIN NQ 1)
- THEN
- BEGIN
- MESSAGE(NOAST[0],0);
- ABORT;
- END
- $END
- #
- * RECONNECT FOR NON-NVF CONNECTION. MUST GET PAAC ENTRY BUILT,
- * THEN ISSUE A VCB READ REQUEST FOR THE VCB DATA.
- #
- NVFAPVD(VCBIN,ANIN,PAC);
- PA$STATE[PAC] = PAACST"PARCN";
- PA$VCB[PAC] = VCBIN;
- PA$IAPRC[PAC] = CRRRCN[0];
- PA$NACN[PAC] = CRNACN[0];
- END
- #
- * CHECK IF LIMBO STATE. IF SO, THEN THE CONNECTION NEVER WAS
- * SUCCESSFULLY SWITCHED. A CR/ACC SM NEVER RECEIVED THEREFORE
- * THE PAAC ENTRY IS STILL RESIDENT RATHER THAN ON VCB DISK FILE.
- * LOCATE THE PAAC ENTRY, DECREMENT THE NUMBER OF AA CONNECTIONS
- * FOR THE SWITCHED APPLICATION, ISSUE A CR/TRM SM, CALL NVFACTC
- * IN ORDER TO RELEASE ACPID TABLE ENTRY FOR PAAC ENTRY, THE PAAC
- * ENTRY ITSELF AND THE ASSIGNED VCB ORDINAL. COMPLETE APPLICATION
- * DEPARTURE VIA CALL TO NVFSCAD.
- #
- IF CRLIMBO[0]
- THEN
- BEGIN
- NENTRY = PACLNGTH / PAACSIZ$;
- FOR PAC = 0 STEP 1 WHILE
- ((PAC LS NENTRY) AND (PA$VCB[PAC] NQ CRVCB[0]))
- DO
- BEGIN
- END
- IF PAC EQ NENTRY
- THEN
- GOTO ENDEXIT;
- #
- * DECREMENT NUMBER A-A CONNECTIONS FOR SECONDARY AST ENTRY AND
- * THE PRIMARY AST ENTRY IF NOT THE SAME ENTRY.
- #
- IF AORD NQ ASENTRY
- THEN
- BEGIN
- AST$AACN[AORD] = AST$AACN[AORD] - 1;
- IF AORD NQ PORD
- THEN
- AST$AACN[PORD] = AST$AACN[PORD] - 1;
- END
- #
- * ISSUE THE CT/TRM/R SM.
- #
- SPMSG0[1] = 0;
- PFCSFC[1] = CRTRM;
- RC[1] = CRRRCN[0];
- CRNACN[1] = CRNACN[0];
- CRTRAN[1] = 1;
- NVFUMQE(P<CTQ>,APSM[1],APPPR$,0,LCRTRM);
- #
- * CALL NVFACTC AND NVFSCAD TO CLEAN THINGS UP.
- #
- NVFACTC(PAC,VCBREL);
- IF AORD NQ ASENTRY
- THEN
- BEGIN
- NVFSCAD(AORD);
- IF AORD NQ PORD
- THEN
- NVFSCAD(PORD);
- END
- END
- END
- ENDEXIT:
- END # NVFATAC #
- TERM
cdc/nos2.source/nam5871/nvfatac.txt · Last modified: 2023/08/05 17:22 by Site Administrator