Google
 

Trailing-Edge - PDP-10 Archives - BB-P363B-SM_1985 - t20/nmlt20/nmlsta.b36
There is 1 other file named nmlsta.b36 in the archive. Click here to see a list.
! UPD ID= 268, SNARK:<6.1.NML>NMLSTA.B36.8,   1-Mar-85 10:02:51 by GLINDELL
!  No need to poke data link watcher any more
!
! UPD ID= 257, SNARK:<6.1.NML>NMLSTA.B36.7,  10-Feb-85 14:49:21 by GLINDELL
!  Check NML circuit substate also: if loading, dumping or triggering then
!  do not change substate
!
! UPD ID= 234, SNARK:<6.1.NML>NMLSTA.B36.6,  17-Jan-85 14:33:25 by GLINDELL
!  Replace PROGRAM_ERROR with TASK_ERROR
!
! UPD ID= 209, SNARK:<6.1.NML>NMLSTA.B36.5,  10-Dec-84 15:37:10 by HALPIN
! Get MONSYM Library file out of default directory, not BLI:
!
! UPD ID= 129, SNARK:<6.1.NML>NMLSTA.B36.4,  19-Oct-84 09:53:07 by HALPIN
! Make sure we don't get ON-FAILED or ON-STARTING state when the circuit
! is really Running, i.e. there are adjacent nodes on line.
! Check for OFF to ON-STARTING transistions and call the Data Link
! Watcher to try and Initialize Protocol on DTE's.
! Change Parameter passed to Calculation Routine to be a Pointer to
! a Circuit Id.
!
! UPD ID= 119, SLICE:<6.1.NML>NMLSTA.B36.3,  25-Sep-84 10:22:59 by HALPIN
! Fix Previous line's comment character.
!
! UPD ID= 117, SLICE:<6.1.NML>NMLSTA.B36.2,  24-Sep-84 16:46:45 by HALPIN
%title 'NMLSTA -- STATE Calculation Routines'
module NMLSTA	(
		ident = 'X04.01'
		) =
begin

!
!			  COPYRIGHT (c) 1980, 1981 BY
!	      DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
!
! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED
! ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE
! INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER
! COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
! OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY
! TRANSFERRED.
!
! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE
! AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT
! CORPORATION.
!
! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS
! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
!

!++
! FACILITY:	DECnet-10/20 V4.0 Network Management Layer (NML)
!
! ABSTRACT:
!
!
! ENVIRONMENT:	TOPS-10/20 NML
!
! AUTHOR: James J. Halpin Creation Date Sept 7, 1984
!
! MODIFIED BY:
!
!	, : VERSION
! 01	-
!--
!
! INCLUDE FILES:
!

library 'NMLLIB';                       ! All required definitions

library 'MONSYM';			! Monitor symbols

library 'JLNKG';			! JSYS linkage definitions

require 'NMLEXT';                       ! NML External routines

!
! TABLE OF CONTENTS
!

forward routine
               NML$CALCULATE_CIRCUIT_STATE: novalue;

!
! MACROS:
!

!
! EXTERNAL REFERENCES:
!

external routine
                NML$GET_VDB_PARAMETER,
                NML$SET_VDB_PARAMETER,
                NML$CLR_VDB_PARAMETER;
%global_routine ('NML$CALCULATE_CIRCUIT_STATE', CIRCUIT_ID) : novalue =

!++
! FUNCTIONAL DESCRIPTION:
!
!       Calculates the current state of the requested circuit and
!       stores it into the Volatile Database.
!
! FORMAL PARAMETERS:
!
!       CIRCUIT_ID - Pointer to Circuit Id.
!
! IMPLICIT INPUTS:
!
!       NONE.
!
! ROUTINE VALUE:
!
!       NONE.
!
! SIDE EFFECTS:
!
!       The Value of the Circuit State Parameter in NML's Volatile
!       Database will be updated.
!
!--

   begin

   literal
          CIRCUIT_OFF = 0,
          CIRCUIT_FAILED = 1,
          CIRCUIT_STARTING = 2,
          CIRCUIT_RUNNING = 3,
          NML_FAILED = 11,
          NML_OFF = 1,
          NML_ON = 0,
          NML_SERVICE = 2,
          NML_STARTING = 0,
          NML_NO_SUBSTATE = -1,
          OB_LENGTH = 24,           ! Length of the output buffer
          OB_SIZE = ch$allocation (OB_LENGTH,8),
          OB_ALLOCATION = OB_SIZE * %upval,
          STATE_PARAMETER_NUMBER = 0,
          SUBSTATE_PARAMETER_NUMBER = 1;


   local
        BUFFER_ADDRESS,             ! Address of the output buffer
        BUFFER_LENGTH,              ! Buffer Length in bytes
        BUFFER_POINTER,
        LENGTH,                     ! Number of bytes returned from NMX
        RESULT,
        ROUTER_CIRCUIT_STATE,
        NML_CIRCUIT_STATE,
        NML_CIRCUIT_SUBSTATE;


   if (BUFFER_ADDRESS = NMU$MEMORY_GET (OB_ALLOCATION)) eqla 0
   then return;

   BUFFER_POINTER = ch$ptr (.BUFFER_ADDRESS,,8);
   BUFFER_LENGTH = OB_LENGTH;

   NML$GET_VDB_PARAMETER (ENTITY_CIRCUIT,
                          .CIRCUIT_ID,
                          STATE_PARAMETER_NUMBER,
                          NML_CIRCUIT_STATE);

   if .NML_CIRCUIT_STATE eql NML_SERVICE 
   then begin
             NMU$MEMORY_RELEASE (.BUFFER_ADDRESS, OB_ALLOCATION);
             return;
        end;

! Now get NML's idea of internal substate.  If its between LOADING
! and AUTOTRIGGERING then NML is currently doing loading, dumping
! or triggering, either as command or caused by DLW.  In all these
! cases, do not reset the substate.

   if not NML$GET_VDB_PARAMETER (ENTITY_CIRCUIT,
                                 .CIRCUIT_ID,
                                 SUBSTATE_PARAMETER_NUMBER,
                                 NML_CIRCUIT_SUBSTATE)
   then NML_CIRCUIT_SUBSTATE = CIRCUIT_NO_SUBSTATE;

! Use the fact that all interesting states have values in sequence
   if (.NML_CIRCUIT_SUBSTATE geq CIRCUIT_LOADING)
   and (.NML_CIRCUIT_SUBSTATE leq CIRCUIT_AUTOTRIGGERING)
   then return;

! Not being worked on right now, get monitors point of view.
   LENGTH = .BUFFER_LENGTH;

   RESULT = $NML$SHOW (ENTITY_CIRCUIT,
                       .CIRCUIT_ID,
                       0, ! Qualifier
                       STATE_,
                       BUFFER_LENGTH,
                       .BUFFER_POINTER);

   if .RESULT eql 1 then
   begin
   local TEMP;
      BUFFER_POINTER = ch$ptr (.BUFFER_ADDRESS,,8);

      LENGTH = .LENGTH = .BUFFER_LENGTH;           ! # of data bytes returned

      TEMP = GETW (BUFFER_POINTER);               ! Get the Parameter Number
      TEMP = GETB (BUFFER_POINTER);               ! Get the format byte.


      LENGTH = .LENGTH - 3;

      ROUTER_CIRCUIT_STATE = GETB(BUFFER_POINTER);

      case .ROUTER_CIRCUIT_STATE from CIRCUIT_OFF to CIRCUIT_RUNNING of
      set
      [CIRCUIT_OFF]: begin
                          NML_CIRCUIT_STATE = NML_OFF;
                          NML$SET_VDB_PARAMETER (ENTITY_CIRCUIT,
                                                 .CIRCUIT_ID,
                                                 STATE_PARAMETER_NUMBER,
                                                 NML_CIRCUIT_STATE);
   
                          NML$CLR_VDB_PARAMETER (ENTITY_CIRCUIT,
                                                 .CIRCUIT_ID,
                                                 SUBSTATE_PARAMETER_NUMBER);
                     end;
      [CIRCUIT_FAILED]: begin
                             NML_CIRCUIT_STATE = NML_ON;
                             NML_CIRCUIT_SUBSTATE = NML_FAILED;
                             NML$SET_VDB_PARAMETER (ENTITY_CIRCUIT,
                                                    .CIRCUIT_ID,
                                                    STATE_PARAMETER_NUMBER,
                                                    NML_CIRCUIT_STATE);
   
                             NML$SET_VDB_PARAMETER (ENTITY_CIRCUIT,
                                                    .CIRCUIT_ID,
                                                    SUBSTATE_PARAMETER_NUMBER,
                                                    NML_CIRCUIT_SUBSTATE);
                        end;
   
      [CIRCUIT_STARTING]: begin
                               ! Check here for a transtion from a OFF State
                               ! to ON-STARTING.

                               NML$GET_VDB_PARAMETER (ENTITY_CIRCUIT,
                                                      .CIRCUIT_ID,
                                                      STATE_PARAMETER_NUMBER,
                                                      NML_CIRCUIT_STATE);

                               NML_CIRCUIT_STATE = NML_ON;
                               NML_CIRCUIT_SUBSTATE = NML_STARTING;
                               NML$SET_VDB_PARAMETER (ENTITY_CIRCUIT,
                                                      .CIRCUIT_ID,
                                                      STATE_PARAMETER_NUMBER,
                                                      NML_CIRCUIT_STATE);
   
                               NML$SET_VDB_PARAMETER (ENTITY_CIRCUIT,
                                                      .CIRCUIT_ID,
                                                      SUBSTATE_PARAMETER_NUMBER,
                                                      NML_CIRCUIT_SUBSTATE);
                          end;
   
      [CIRCUIT_RUNNING]: begin
                              NML_CIRCUIT_STATE = NML_ON;
                              NML$SET_VDB_PARAMETER (ENTITY_CIRCUIT,
                                                     .CIRCUIT_ID,
                                                     STATE_PARAMETER_NUMBER,
                                                     NML_CIRCUIT_STATE);

                              if not NML$GET_VDB_PARAMETER (ENTITY_CIRCUIT,
                                                           .CIRCUIT_ID,
                                                            SUBSTATE_PARAMETER_NUMBER,
                                                            NML_CIRCUIT_SUBSTATE)
                              then NML_CIRCUIT_SUBSTATE = NML_NO_SUBSTATE;

                              ! Get rid of any Illegal Substates.
                              ! If we just had a transition from ON-STARTING
                              ! or ON-FAILED, make sure we clear the old
                              ! Substate.

                              if .NML_CIRCUIT_SUBSTATE eql NML_STARTING
                              or .NML_CIRCUIT_SUBSTATE eql NML_FAILED
                              then
                              NML$CLR_VDB_PARAMETER (ENTITY_CIRCUIT,
                                                     .CIRCUIT_ID,
                                                     SUBSTATE_PARAMETER_NUMBER);


                         end;
      [OUTRANGE]: TASK_ERROR ('Invalid Circuit State returned from NMX');
                 
      tes;

   end;

   NMU$MEMORY_RELEASE (.BUFFER_ADDRESS, OB_ALLOCATION);

   end;                             ! End of NML$CALCULATE_CIRCUIT_STATE

end
eludom
! Local Modes:
! Mode:BLISS
! Auto Save Mode:2
! Comment Column:40
! Comment Rounding:+1
! End: