*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