*DECK RELLLCB USETEXT LLCB USETEXT NHEADER USETEXT NIPDEF USETEXT AHEADER USETEXT AT USETEXT SUPMSG USETEXT PARAMS USETEXT PT USETEXT TNT USETEXT KDIS USETEXT KSTTAB PRGM RELLLCB; # DELETE LOGICAL LINK CONTROL BLOCK # STARTIMS; # *1DC RELLLCB * * 1. PROC NAME AUTHOR DATE * RELLLCB E.T. WAN 81/03/28 * * 2. FUNCTIONAL DESCRIPTION * THIS ROUTINE RELEASES A LOGICAL LINK CONTROL BLOCK. * * 3. METHOD USED * CALL MGETS TO RELEASE THE LOGICAL LINK CONTROL BLOCK. * IF ONLY ONE LINK EXISTS FOR THE TERMINAL NODE, CLEAR THE * TNT ENTRY. IF MORE THAN ONE LINK EXIST, UPDATE ALL AFFECTED * FORWARD AND BACKWARD POINTERS. * DECREMENT THE NUMBER OF LOGICAL LINKS IN TNT ENTRY. * INFORM NVF THAT A LINK WENT DOWN (FOR THE LID/PID MANEGMENT) * * 4. ENTRY PARAMETERS * PARAMS1 NETWORK BLOCK HEADER ADDRESS * PARAMS2 ADDRESS OF LOGICAL LINK CONTROL BLOCK TO * BE DELETED. * * 5. EXIT PARAMETERS * NONE * * 6. COMDECKS CALLED * LLCB * NHEADER * NIPDEF * PARAMS * PT AT * TNT AHEADER * KDIS SUPMSG * OSSIZE * * 7. ROUTINES AND OVERLAYS CALLED * MRELS RELEASE BUFFER SPACE * XTRACE TRACE CALL * BLINK LINK A MESSAGE TO APPLICATION * MGETS GET A BUFFER SPACE * OSCHAPP SCHEDULE APPLICATION * KDEL DELETE A LINE FROM STATUS DISPLAY * * 8. DAYFILE MESSAGES * NONE * * THIS PROGRAM IS A SECONDARY OVERLAY LOADED BY SUBROUTINE * OVLCALL. WHEN EXECUTION HAS COMPLETED, A JUMP IS MADE TO * LOCATION RJMAIN TO RETURN TO THE CALLING PROGRAM. * * W A R N I N G - THIS PROGRAM CANNOT EXCEED THE SECONDARY *CALL OSSIZE * * THIS OVERLAY IS CALLED BY NPREGLL, NPREGCP. * # STOPIMS; # **** EXTERNAL ENTRY POINTS # XREF BEGIN PROC MRELS; # RELEASE BUFFER SPACE # PROC MGETS ; PROC OSCHAPP ; PROC BLINK ; LABEL RJMAIN; # RETURN ADDRESS IN OVLCALL # PROC XTRACE; # RECORD TRACE # PROC BLDKWL; # FORMAT KWL TO DELETE LLK ENTRY # END # * LOCAL VARIABLES # ITEM IDXTN; # TNT ENTRY INDEX # ITEM SAVBP; # SAVE LLCB BACKWARD POINTER # ITEM BUFADDR ; ITEM SAVFP; # SAVE LLCB FORWARD POINTER # BEGIN # RELLLCB # CONTROL IFEQ DEBUG,1 ; XTRACE("RLLCB") ; CONTROL FI; P = PARAMS2; # LOCATION OF LOGICAL LINK CONTROL BLOCK # IDXTN = LLCBTN[0] ; # INDEX INTO TNT # IF ATACBA[NVFAN] NQ 0 THEN BEGIN # NVF ALREADY NETTED ON # # GET A BUFFER FOR MESSAGE TO INFORM NVF # MGETS( LCRSLL + ABHSIZE + BLKHSIZE , BUFADDR , TRUE ) ; # SET UP APPLICATION HEADER # P = BUFADDR + BLKHSIZE ; ABHABT[0] = APPCMD ; ABHACT[0] = CT60TRANS ; ABHTLC[0] = LCRSLL ; # SET-UP THE MESSAGE ITSELF # P = BUFADDR + ABHSIZE + BLKHSIZE ; # # PFCSFC[0] = CRSLL ; P = P ; # # CRSLDN [0] = LLCBTN[0] ; # DESTINATION NODE NUMBER # CRSLSN [0] = LLCBHN[0] ; # SOURCE NODE NUMBER # CRSLST [0] = 0 ; # LOGICAL LINK DOWN SIGNAL # # AND LINK MESSAGE TO NVF # BLINK ( BUFADDR,ATACBA[NVFAN]) ; # QUEUE TO NVF # OSCHAPP (ATACBA[NVFAN]) ; END # NVF ALREADY NETTED ON # IF KDST[0] AND LLCBHN[0] NQ 0 # NOT INTRA-HOST LOGICAL LINK # AND LLCBTN[0] NQ 0 THEN # DELETE LOGICAL LINK ENTRY FROM STATUS DISPLAY # BLDKWL(KST"LLK",LLCBKNDX[0],0,KDELIDVALUE); # # IF TNTNLL[IDXTN] EQ 1 # ONE LLCB EXISTS # THEN BEGIN MRELS(P); # RELEASE LLCB SPACE # IF IDXTN NQ 0 THEN TNTWD[IDXTN] = 0; # CLEAR TNT ENTRY # ELSE BEGIN # ZEROETH ENTRY A-A LOGICAL LINK # TNTNLL[IDXTN] = 0; TNTLLAD[IDXTN] = 0; END END ELSE BEGIN SAVBP = LLCBBP[0]; # SAVE BACKWARD POINTER # SAVFP = LLCBFP[0]; # SAVE FORWARD POINTER # MRELS(P); # RELEASE LLCB SPACE # IF SAVBP EQ 0 # FIRST LLCB TO BE DELETED # THEN BEGIN TNTLLAD[IDXTN] = SAVFP; # UPDATE LLCB ADDRESS IN TNT # P = SAVFP; # MOVE TO THE FOLLOWING LLCB # LLCBBP[0] = 0; # CLEAR BACKWARD POINTER # END ELSE BEGIN IF SAVFP EQ 0 # LAST LLCB TO BE DELETED # THEN BEGIN P = SAVBP; # MOVE TO THE PREVIOUS LLCB # LLCBFP[0] = 0; # CLEAR FORWARD POINTER # END ELSE # NOT FIRST OR LAST LLCB TO BE DELETED # BEGIN P = SAVFP; # MOVE TO THE FOLLOWING LLCB # LLCBBP[0] = SAVBP; # UPDATE BACKWARD POINTER # P = SAVBP; # MOVE TO THE PREVIOUS LLCB # LLCBFP[0] = SAVFP; # UPDATE FORWARD POINTER # END END TNTNLL[IDXTN] = TNTNLL[IDXTN] - 1; # DECREMENT LINK NUMBER # END; GOTO RJMAIN; # RETURN TO CALLING PROGRAM # END # RELLLCB # TERM