--******************************************************************************************************************** -- Created: 9-Mar-2021 22:28:18 by OpenVMS SDL EV3-3 -- Source: 28-APR-1993 14:08:54 $1$DGA8085:[LIB_ADA.LIS]CLUDCBDEF.SDL;1 --******************************************************************************************************************** with SYSTEM; use SYSTEM; with STARLET; use STARLET; with CONDITION_HANDLING; use CONDITION_HANDLING; package CLUDCBDEF is -- module $CLUDCBDEF --+ -- CLUDCB - Cluster Quorum Disk Control Block --- CLUDCB_M_QS_REM_INA : constant := 16#00000001#; CLUDCB_M_QS_REM_ACT : constant := 16#00000002#; CLUDCB_M_QS_NOT_READY : constant := 16#00000004#; CLUDCB_M_QS_READY : constant := 16#00000008#; CLUDCB_M_QS_ACTIVE : constant := 16#00000010#; CLUDCB_M_QS_CLUSTER : constant := 16#00000020#; CLUDCB_M_QS_VOTE : constant := 16#00000040#; CLUDCB_M_QF_INQTMO : constant := 16#00000001#; CLUDCB_M_QF_INQIP : constant := 16#00000002#; CLUDCB_M_QF_TIM : constant := 16#00000004#; CLUDCB_M_QF_RIP : constant := 16#00000008#; CLUDCB_M_QF_WIP : constant := 16#00000010#; CLUDCB_M_QF_ERROR : constant := 16#00000020#; CLUDCB_M_QF_FIRST_ERR : constant := 16#00000040#; CLUDCB_M_QF_WRL_ERR : constant := 16#00000080#; CLUDCB_M_QF_NOACCESS : constant := 16#00000100#; CLUDCB_M_CSP_ACK : constant := 16#00000001#; CLUDCB_M_CSP_LBN_VALID : constant := 16#00000002#; CLUDCB_M_CSP_MVHELP : constant := 16#00000004#; CLUDCB_K_F_LENGTH : constant := 64; -- Length of fixed portion of CLUDCB CLUDCB_C_F_LENGTH : constant := 64; -- Length of fixed portion of CLUDCB CLUDCB_K_LENGTH : constant := 580; -- Length of CLUDCB CLUDCB_C_LENGTH : constant := 580; -- Length of CLUDCB -- The quorum disk is specified with 4 sysgen parameters. DISK_QUORUM1 CLUDCB_S_DISK_QUORUM : constant := 16; type CLUDCB_STATE_TYPE is -- Quorum disk state bits record QS_REM_INA : BOOLEAN; -- Remote inactive QS_REM_ACT : BOOLEAN; -- Remote active QS_NOT_READY : BOOLEAN; -- Not ready QS_READY : BOOLEAN; -- Ready QS_ACTIVE : BOOLEAN; -- Active QS_CLUSTER : BOOLEAN; -- Active and this node is a cluster member QS_VOTE : BOOLEAN; -- Potential vote FILLER_1 : UNSIGNED_9; end record; for CLUDCB_STATE_TYPE use record QS_REM_INA at 0 range 0 .. 0; QS_REM_ACT at 0 range 1 .. 1; QS_NOT_READY at 0 range 2 .. 2; QS_READY at 0 range 3 .. 3; QS_ACTIVE at 0 range 4 .. 4; QS_CLUSTER at 0 range 5 .. 5; QS_VOTE at 0 range 6 .. 6; FILLER_1 at 0 range 7 .. 15; end record; for CLUDCB_STATE_TYPE'SIZE use 16; CLUDCB_STATE_TYPE_INIT : constant CLUDCB_STATE_TYPE := (QS_REM_INA => FALSE, QS_REM_ACT => FALSE, QS_NOT_READY => FALSE, QS_READY => FALSE, QS_ACTIVE => FALSE, QS_CLUSTER => FALSE, QS_VOTE => FALSE, FILLER_1 => 0); type CLUDCB_FLAGS_TYPE is -- CLUDCB status bits record QF_INQTMO : BOOLEAN; -- Status inquiry timed out QF_INQIP : BOOLEAN; -- Remote inquiry in progress QF_TIM : BOOLEAN; -- Read or write timed out QF_RIP : BOOLEAN; -- Read in progress QF_WIP : BOOLEAN; -- Write in progress QF_ERROR : BOOLEAN; -- Quorum disk error has been reported QF_FIRST_ERR : BOOLEAN; -- First error has already been seen QF_WRL_ERR : BOOLEAN; -- Quorum disk is write-locked QF_NOACCESS : BOOLEAN; -- Never access the quorum disk directly FILLER_1 : UNSIGNED_7; end record; for CLUDCB_FLAGS_TYPE use record QF_INQTMO at 0 range 0 .. 0; QF_INQIP at 0 range 1 .. 1; QF_TIM at 0 range 2 .. 2; QF_RIP at 0 range 3 .. 3; QF_WIP at 0 range 4 .. 4; QF_ERROR at 0 range 5 .. 5; QF_FIRST_ERR at 0 range 6 .. 6; QF_WRL_ERR at 0 range 7 .. 7; QF_NOACCESS at 1 range 0 .. 0; FILLER_1 at 1 range 1 .. 7; end record; for CLUDCB_FLAGS_TYPE'SIZE use 16; CLUDCB_FLAGS_TYPE_INIT : constant CLUDCB_FLAGS_TYPE := (QF_INQTMO => FALSE, QF_INQIP => FALSE, QF_TIM => FALSE, QF_RIP => FALSE, QF_WIP => FALSE, QF_ERROR => FALSE, QF_FIRST_ERR => FALSE, QF_WRL_ERR => FALSE, QF_NOACCESS => FALSE, FILLER_1 => 0); type CLUDCB_CSP_FLAGS_TYPE is -- Flags for interlocked communication with CSP record CSP_ACK : BOOLEAN; -- CSP request has been acknowledged CSP_LBN_VALID : BOOLEAN; -- CSP has found a quorum file CSP_MVHELP : BOOLEAN; -- Restart mount verification FILLER_1 : UNSIGNED_13; end record; for CLUDCB_CSP_FLAGS_TYPE use record CSP_ACK at 0 range 0 .. 0; CSP_LBN_VALID at 0 range 1 .. 1; CSP_MVHELP at 0 range 2 .. 2; FILLER_1 at 0 range 3 .. 15; end record; for CLUDCB_CSP_FLAGS_TYPE'SIZE use 16; CLUDCB_CSP_FLAGS_TYPE_INIT : constant CLUDCB_CSP_FLAGS_TYPE := (CSP_ACK => FALSE, CSP_LBN_VALID => FALSE, CSP_MVHELP => FALSE, FILLER_1 => 0); type CLUDCB_TYPE is record CLUDCBFL : ADDRESS; -- Forward Link (not used) CLUDCBBL : ADDRESS; -- Backward Link (not used) SIZE : UNSIGNED_WORD; -- Size of CLUDCB (bytes) TYP : UNSIGNED_BYTE; -- Structure type SUBTYP : UNSIGNED_BYTE; -- Structure subtype UCB : ADDRESS; -- Address of quorum disk UCB IRP : ADDRESS; -- Address of IRP TQE : ADDRESS; -- Address of timer queue entry WATCHER_CSID : UNSIGNED_LONGWORD; -- CSID of quorum file watcher ACT_COUNT : UNSIGNED_LONGWORD; -- Saved activity counter FILLER_1 : STRING(1 .. 0); -- QUADWORD ALIGN BEFORE QFLBN : UNSIGNED_LONGWORD; -- Quorum file logical block number FILLER_2 : STRING(1 .. 4); -- QUADWORD ALIGN BEFORE STATE : CLUDCB_STATE_TYPE; -- Quorum disk state bits FILLER_3 : UNSIGNED_WORD; -- Fill to next longword FLAGS : CLUDCB_FLAGS_TYPE; -- CLUDCB status bits FILLER_4 : UNSIGNED_WORD; -- Fill to next longword -- The interlocked flags field is in its own quadword for granulary reasons FILLER_5 : STRING(1 .. 0); -- QUADWORD ALIGN BEFORE CSP_FLAGS : CLUDCB_CSP_FLAGS_TYPE; -- Flags for interlocked communication with CSP FILLER_6 : STRING(1 .. 6); -- QUADWORD ALIGN AFTER COUNTER : UNSIGNED_BYTE; -- Iteration counter FILLER_7 : UNSIGNED_BYTE_ARRAY (1 .. 3); -- Fill to next longword FILLER_8 : STRING(1 .. 4); -- QUADWORD ALIGN FILLER_9 : STRING(1 .. 0); -- QUADWORD ALIGN BUFFER : STRING(1 .. 516); -- Quorum file buffer -- to DISK_QUORUM4. Each parameter can specify 4 bytes. end record; for CLUDCB_TYPE use record CLUDCBFL at 0 range 0 .. 31; CLUDCBBL at 4 range 0 .. 31; SIZE at 8 range 0 .. 15; TYP at 10 range 0 .. 7; SUBTYP at 11 range 0 .. 7; UCB at 12 range 0 .. 31; IRP at 16 range 0 .. 31; TQE at 20 range 0 .. 31; WATCHER_CSID at 24 range 0 .. 31; ACT_COUNT at 28 range 0 .. 31; FILLER_1 at 32 range 0 .. -1; QFLBN at 32 range 0 .. 31; FILLER_2 at 36 range 0 .. 31; STATE at 40 range 0 .. 15; FILLER_3 at 42 range 0 .. 15; FLAGS at 44 range 0 .. 15; FILLER_4 at 46 range 0 .. 15; FILLER_5 at 48 range 0 .. -1; CSP_FLAGS at 48 range 0 .. 15; FILLER_6 at 50 range 0 .. 47; COUNTER at 56 range 0 .. 7; FILLER_7 at 57 range 0 .. 23; FILLER_8 at 60 range 0 .. 31; FILLER_9 at 64 range 0 .. -1; BUFFER at 64 range 0 .. 4127; end record; for CLUDCB_TYPE'SIZE use 4640; CLUDCB_TYPE_INIT : constant CLUDCB_TYPE := (CLUDCBFL => ADDRESS_ZERO, CLUDCBBL => ADDRESS_ZERO, SIZE => 0, TYP => 0, SUBTYP => 0, UCB => ADDRESS_ZERO, IRP => ADDRESS_ZERO, TQE => ADDRESS_ZERO, WATCHER_CSID => 0, ACT_COUNT => 0, FILLER_1 => (others => ASCII.NUL), QFLBN => 0, FILLER_2 => (others => ASCII.NUL), STATE => CLUDCB_STATE_TYPE_INIT, FILLER_3 => 0, FLAGS => CLUDCB_FLAGS_TYPE_INIT, FILLER_4 => 0, FILLER_5 => (others => ASCII.NUL), CSP_FLAGS => CLUDCB_CSP_FLAGS_TYPE_INIT, FILLER_6 => (others => ASCII.NUL), COUNTER => 0, FILLER_7 => (others => 0), FILLER_8 => (others => ASCII.NUL), FILLER_9 => (others => ASCII.NUL), BUFFER => (others => ASCII.NUL)); end CLUDCBDEF;