*DECK NS$SMP
USETEXT COM$NS
USETEXT ERR$NS
USETEXT DEF$NS
USETEXT SMB$NS
USETEXT SMD$NS
PROC NS$SMP; # SUPERVISORY MESSAGE PROCESSOR #
# TITLE NS$SMP - SM PROCESSOR. #
BEGIN # NS$SMP #
#
** NS$SMP - SM PROCESSOR.
*
* J.C. LEE 1981
*
* THIS ROUTINE PROCESSES SMS.
*
* PROC NS$SMP
*
* ENTRY:
* NONE.
*
* EXIT:
* NONE.
*
* METHOD:
* CHECK NSUP WORD.
* FOR SM AVAILABLE:
* IF SM-REISSUED-BIT SET:
* SKIP NETGET CALL.
* ELSE
* NETGET SM INTO SM BUFFER
* SWITCH TO APPROPRIATE PARAGRAPH BASED ON ABT.
* IF ABT EQ "HOST-SM", PROCESS HOST SM.
* IF ABT EQ "NETWORK-SM", PROCESS NETWORK SM.
* ELSE, FLAG ERRCODE.
* IF ERRCODE NQ 0, CALL ERROR PROCESSOR.
* IF MC IN NS CONTROL CARD IS NONZERO, AND THE
* NUMBER OF TRACE MESSAGES ACCUMULATED ON THE
* DEBUG LOG FILE REACHES MC:
* CALL NETREL TO RELEASE CURRENT TRACE FILE.
*
#
$BEGIN
XREF
BEGIN
PROC NS$DBG; # TRACE PROCEDURE CALL #
END
$END
XREF
BEGIN
PROC NDLOVLD; # OVERLAY LOADER #
PROC NETGET; # AIP NETGET PROCEDURE #
PROC NETREL; # AIP NETREL PROCEDURE #
FUNC NS$FEC U; # FORMAT ERROR CODE #
PROC NS$NSM; # NETWORK SUPERVISORY MESSAGE PROCESSOR #
END
ITEM ABT U; # APPLICATION BLOCK TYPE #
ITEM ERRCODE U; # ERROR CODE #
ITEM I I; # LOOP VARIABLE #
ITEM IDLE B; # SMP STATE #
ARRAY HSM$OVLY [0:0] S(1);
BEGIN # HOST INTERFACE OVERLAY NAME AND LEVEL #
ITEM HO$NAM C(00,00,07) = ["HSMOVLY"];
ITEM HO$LV1 U(00,42,09) = [2];
ITEM HO$LV2 U(00,51,09) = [0];
END
ARRAY ERR$OVLY [0:0] S(1);
BEGIN # ERROR PROCESSOR OVERLAY NAME AND LEVEL #
ITEM EO$NAM C(00,00,07) = ["ERROVLY"];
ITEM EO$LV1 U(00,42,09) = [5];
ITEM EO$LV2 U(00,51,09) = [0];
END
ARRAY MKD$OVLY [0:0] S(1);
BEGIN # K-DISPLAY MANAGER OVERLAY NAME AND LEVEL#
ITEM MO$NAM C(00,00,07) = ["MKDOVLY"];
ITEM MO$LV1 U(00,42,09) = [3];
ITEM MO$LV2 U(00,51,09) = [0];
END
SWITCH ABTCASE # SWITCH FOR APPLICATION BLOCK TYPES #
SMP00, # NULL BLOCK, ERROR #
SMP00, # BLK BLOCK, ERROR #
SMP00, # MSG BLOCK, ERROR #
SMP01, # SM BLOCK ORIGINATED FROM NAM #
SMP02, # SM BLOCK ORIGINATED FROM PIP/NPU #
;
CONTROL EJECT;
$BEGIN
NS$DBG("SMP"); # TRACE CALL #
$END
IDLE = FALSE;
SM$REISSUE = FALSE;
FOR I = 0 WHILE NOT IDLE
DO # CHECK IF THERE IS A SUPERVISORY MESSAGE TO PROCESS #
BEGIN
IF NOT SM$REISSUE
THEN # NO SUPERVISORY MESSAGE GOT REISSUED #
BEGIN
IF NSU$S[0]
THEN # SUPERVISORY MESSAGE IS AVAILABLE #
NETGET(0,ABH$WORD,SMB$BUFFER,MAX$SMSIZE); # GET SM #
ELSE # SUPERVISORY MESSAGE NOT AVAILABLE #
BEGIN # EXIT FOR LOOP #
IDLE = TRUE;
TEST I;
END
END
ELSE # SUPERVISORY MESSAGE IS REISSUED #
SM$REISSUE = FALSE; # CLEAR SM REISSUE FLAG #
ERRCODE = 0;
ABT = ABHABT[0]; # APPLICATION BLOCK TYPE #
GOTO ABTCASE[ABT]; # CASE ON ABT #
SMP00: # SM BLOCK TYPE ERROR #
ERRCODE = NS$FEC(EC"ERR$SM",SMEC"HSM$ABH");
GOTO SMP03;
SMP01: # SM FROM NAM #
NDLOVLD(HSM$OVLY,ERRCODE);
GOTO SMP03;
SMP02: # SM FROM NETWORK #
NS$NSM(ERRCODE);
SMP03:
IF ERRCODE NQ 0
THEN # CALL ERROR PROCESSOR #
NDLOVLD(ERR$OVLY,ERRCODE);
IF DCW$F$SKD[0]
THEN # K-DISPLAY DATA TO SEND #
NDLOVLD(MKD$OVLY); # CALL K-DISPLAY MANAGER #
$BEGIN
#
IF A NON-ZERO MC COUNT IS SPECIFIED AND THE NUMBER OF TRACE
MESSAGES ACCUMULATED ON THE DEBUG LOG FILE ZZZZZDN REACHES MC,
CALL AIP PROCEDURE -NETREL- TO RELEASE, SAVE AND PROCESS THE
CURRENT INFORMATION IN THE DEBUG LOG FILE.
#
IF MC NQ 0 # PERIODIC RELEASE OF ZZZZZDN SPECIFIED #
AND NSU$MC[0] GQ MC # SPECIFIED MESSAGE COUNT REACHED #
THEN # RELEASE CURRENT INFORMATION ON ZZZZZDN #
NETREL(NRF1$LFN,MAX$TMSGSZ,0);
$END
END # END FOR LOOP #
RETURN;
END # NS$SMP #
TERM