TITLE 'IGCA010D , SSCP ROUTER *00001000 ' 00002000 IGCA010D CSECT , 0001 00003000 @PROLOG DS 0H 0002 00004000 * 0415 00005000 USING *,RBASE 00006000 LR RBASE,RF /* SET UP ADDRESSIBILITY */ 00007000 IGCA010D IEDHJN START,HJN 00008000 */* */ 00009000 * 0416 00010000 * ROPCAVT=RPARM; /* OP CONTROL AVT ADDRESS */ 00011000 LR ROPCAVT,RPARM 0416 00012000 * RELEMENT=OPCCOPCE; /* CURRENT ELEMENT ADDRESS */ 00013000 L RELEMENT,OPCCOPCE(,ROPCAVT) 0417 00014000 * RAVT=OPCAVTPT; /* TCAM AVT ADDRESS */ 00015000 L RAVT,OPCAVTPT(,ROPCAVT) 0418 00016000 * RSAVE=ADDR(OPCSAVE); /* SAVE AREA */ 00017000 LA RSAVE,OPCSAVE(,ROPCAVT) 0419 00018000 * RWORK=OPCWORK; /* OP CONTROL WORK AREA */ 00019000 L RWORK,OPCWORK(,ROPCAVT) 0420 00020000 */* */ 00021000 * 0421 00022000 * IF RELEMENT->PRFPRI=PRIHIFLG THEN/* ELEMENT AN OPCE ? */ 00023000 CLI PRFPRI(RELEMENT),X'E9' 0421 00024000 BNE @RF00421 0421 00025000 * CALL OPCE; /* YES */ 00026000 BAL @14,OPCE 0422 00027000 * ELSE 0423 00028000 * IF RELEMENT->PRFPRI=PRISSBUF THEN/* ELEMENT A BUFFER ? */ 00029000 B @RC00421 0423 00030000 @RF00421 CLI PRFPRI(RELEMENT),X'E2' 0423 00031000 BNE @RF00423 0423 00032000 * CALL BUFFER; /* YES */ 00033000 BAL @14,BUFFER 0424 00034000 * ELSE 0425 00035000 * IF RELEMENT->PRFPRI=PRISSPIU THEN/* ELEMENT A PIU ? */ 00036000 B @RC00423 0425 00037000 @RF00423 CLI PRFPRI(RELEMENT),X'E5' 0425 00038000 BNE @RF00425 0425 00039000 * CALL PIU; /* YES */ 00040000 BAL @14,PIU 0426 00041000 */* */ 00042000 * 0427 00043000 * ELSE 0427 00044000 * DO; 0427 00045000 B @RC00425 0427 00046000 @RF00425 DS 0H 0428 00047000 * OPCMODID=MODID00; /* EXIT TO IGC0010D */ 00048000 MVC OPCMODID(2,ROPCAVT),@CC01579 0428 00049000 * RZERO=0; /* CLEAR REG 0 @YM03724*/ 00050000 SLR RZERO,RZERO 0429 00051000 * END; 0430 00052000 * 0430 00053000 */* */ 00054000 * 0431 00055000 * RPARM=ROPCAVT; /* REG1 HAS OP CONTRL AVT */ 00056000 @RC00425 DS 0H 0431 00057000 @RC00423 DS 0H 0431 00058000 @RC00421 LR RPARM,ROPCAVT 0431 00059000 * GEN REFS(ROPCAVT,OPCXCTL) EXIT; 0432 00060000 XCTL SF=(E,OPCXCTL(ROPCAVT)) 00061000 * 0433 00062000 * /*****************************************************************/ 00063000 * /* */ 00064000 * /* THIS ROUTINE DETERMINES WHICH COMMAND IS IN THE BUFFER. THE */ 00065000 * /* COMMAND IS THEN PASSED TO THE APPROPRIATE FUNCTION MODULE. */ 00066000 * /* THIS IS ACCOMPLISHED BY SETTING UP THE OCMODID FIELD TO THE */ 00067000 * /* CORRECT FUNCTION MODULE. */ 00068000 * /* */ 00069000 * /*****************************************************************/ 00070000 * 0433 00071000 *BUFFER: 0433 00072000 * PROC OPTIONS(NOSAVE,NOSAVEAREA); 0433 00073000 @EL00001 DS 0H 0433 00074000 @EF00001 DS 0H 0433 00075000 @ER00001 BR @14 0433 00076000 BUFFER DS 0H 0434 00077000 * WKSAVE1=RE; /* SAVE REG 14 */ 00078000 ST RE,WKSAVE1(,RWORK) 0434 00079000 */* */ 00080000 * 0435 00081000 * RPRF=RELEMENT; /* BUFFER ADDRESS */ 00082000 LR RPRF,RELEMENT 0435 00083000 * COMMDPTR=AVTHDRSZ+ADDR(PRFSUNIT)+PRFISIZE;/* COMMAND POINTER */ 00084000 LA @09,PRFSUNIT(,RPRF) 0436 00085000 AL @09,@CF00443 0436 00086000 SLR @07,@07 0436 00087000 IC @07,PRFISIZE(,RPRF) 0436 00088000 ALR @09,@07 0436 00089000 ST @09,COMMDPTR(,RWORK) 0436 00090000 */* */ 00091000 * 0437 00092000 * IF TRHFI=ON& /* FORMATTED REQUEST ? */ 00093000 * TRHSDI=OFF THEN /* AN NOT EXCEPTION REQUEST */ 00094000 LR @07,RPRF 0437 00095000 AL @07,@CF01660 0437 00096000 TM TRHFI(@07),B'00001000' 0437 00097000 BNO @RF00437 0437 00098000 TM TRHSDI(@07),B'00000100' 0437 00099000 BNZ @RF00437 0437 00100000 */* */ 00101000 * 0438 00102000 * DO; 0438 00103000 * IF COMMAND=CD1XINS THEN /* INIT SELF EXTERNAL */ 00104000 CLC COMMAND(3,@09),@CB00738 0439 00105000 BNE @RF00439 0439 00106000 * OPCMODID=MODIDA2; /* ROUTE TO IGCA210D */ 00107000 MVC OPCMODID(2,ROPCAVT),@CC01583 0440 00108000 */* */ 00109000 * 0441 00110000 * ELSE 0441 00111000 * IF COMMAND=CD1XCTD THEN /* CONTACTED REQUEST ? */ 00112000 B @RC00439 0441 00113000 @RF00439 L @09,COMMDPTR(,RWORK) 0441 00114000 CLC COMMAND(3,@09),@CB00726 0441 00115000 BNE @RF00441 0441 00116000 * OPCMODID=MODIDA5; /* SET UP TO XCTL TO 'A5' */ 00117000 MVC OPCMODID(2,ROPCAVT),@CC01587 0442 00118000 * ELSE 0443 00119000 * IF COMMAND=CD1XTMS THEN /* TERMINATE SELF ? */ 00120000 B @RC00441 0443 00121000 @RF00441 L @09,COMMDPTR(,RWORK) 0443 00122000 CLC COMMAND(3,@09),@CB00740 0443 00123000 BNE @RF00443 0443 00124000 * OPCMODID=MODIDA3; /* ROUTE TO IGCA310D */ 00125000 MVC OPCMODID(2,ROPCAVT),@CC01585 0444 00126000 * ELSE 0445 00127000 * IF COMMAND=CD1XINP| /* INOPERATIVE OR */ 00128000 * COMMAND(1:1)=CD1ANSC THEN/* AUTO-NETWK SHUT 0445 00129000 * COMPLETE */ 00130000 B @RC00443 0445 00131000 @RF00443 L @09,COMMDPTR(,RWORK) 0445 00132000 CLC COMMAND(3,@09),@CB00730 0445 00133000 BE @RT00445 0445 00134000 CLI COMMAND(@09),X'07' 0445 00135000 BNE @RF00445 0445 00136000 @RT00445 DS 0H 0446 00137000 * OPCMODID=MODIDC0; /* ROUTE TO IGCC010D */ 00138000 MVC OPCMODID(2,ROPCAVT),@CC01595 0446 00139000 */* */ 00140000 * 0447 00141000 * ELSE 0447 00142000 * IF COMMAND=CD1XEXS| /* EXIT SLOWDOWN OR */ 00143000 * COMMAND(1:1)=CD1ANS THEN/* AUTO-NETWORK SHUTDOWN */ 00144000 B @RC00445 0447 00145000 @RF00445 L @09,COMMDPTR(,RWORK) 0447 00146000 CLC COMMAND(3,@09),@CB00734 0447 00147000 BE @RT00447 0447 00148000 CLI COMMAND(@09),X'06' 0447 00149000 BNE @RF00447 0447 00150000 @RT00447 DS 0H 0448 00151000 * DO; 0448 00152000 * RPARM=RPRF; /* BUFFER ADDRESS */ 00153000 LR RPARM,RPRF 0449 00154000 * CALL FREEBUF; /* FREE THE BUFFER */ 00155000 L @15,OPCFREBF(,ROPCAVT) 0450 00156000 BALR @14,@15 0450 00157000 * OPCMODID=MODID00;/* RETURN TO IGC0010D */ 00158000 MVC OPCMODID(2,ROPCAVT),@CC01579 0451 00159000 * RZERO=0; /* CLEAR REG 0 @YM03724*/ 00160000 SLR RZERO,RZERO 0452 00161000 * END; 0453 00162000 * 0453 00163000 */* */ 00164000 * 0454 00165000 * ELSE 0454 00166000 * IF COMMAND=CD1XRDC THEN/* REQUEST DISCONTACT ? */ 00167000 B @RC00447 0454 00168000 @RF00447 L @09,COMMDPTR(,RWORK) 0454 00169000 CLC COMMAND(3,@09),@CB00736 0454 00170000 BNE @RF00454 0454 00171000 * OPCMODID=MODIDAA;/* ROUTE TO IGCAA10D */ 00172000 MVC OPCMODID(2,ROPCAVT),@CC01591 0455 00173000 * ELSE 0456 00174000 * IF COMMAND=CD1XRSR THEN/* RECORD STORAGE @ZM47883*/ 00175000 B @RC00454 0456 00176000 @RF00454 L @09,COMMDPTR(,RWORK) 0456 00177000 CLC COMMAND(3,@09),@CB00758 0456 00178000 BNE @RF00456 0456 00179000 * OPCMODID=MODIDDC;/* ROUTE TO IGCDC10D@ZM47883 */ 00180000 MVC OPCMODID(2,ROPCAVT),@CC01597 0457 00181000 * ELSE /* FORMATTED REQUEST THAT WASN'T 00182000 * UNDERSTOOD ? */ 00183000 * OPCMODID=MODIDAD;/* ROUTE TO IGCAD10D */ 00184000 B @RC00456 0458 00185000 @RF00456 MVC OPCMODID(2,ROPCAVT),@CC01593 0458 00186000 * END; 0459 00187000 * 0459 00188000 */* */ 00189000 * 0460 00190000 * ELSE /* THESE ARE CONVERT ERRORS OR 0460 00191000 * EXCEPTION REQUESTS */ 00192000 * OPCMODID=MODIDAD; /* SET UP TO XCTL TO 'AD' */ 00193000 B @RC00437 0460 00194000 @RF00437 MVC OPCMODID(2,ROPCAVT),@CC01593 0460 00195000 */* */ 00196000 * 0461 00197000 * RE=WKSAVE1; /* RESTORE REG 14 */ 00198000 @RC00437 L RE,WKSAVE1(,RWORK) 0461 00199000 * END BUFFER; /* RETURN */ 00200000 @EL00002 DS 0H 0462 00201000 @EF00002 DS 0H 0462 00202000 @ER00002 BR @14 0462 00203000 * 0463 00204000 * /*****************************************************************/ 00205000 * /* */ 00206000 * /* THIS ROUTINE DETERMINES WHICH REQUEST IS IN THE OPCE. OCSWITCH*/ 00207000 * /* CONTAINS A VALUE THAT REPRESENTS THE REQUEST TO BE PROCESSED. */ 00208000 * /* THIS VALUE IS USED AS A SEARCH ARGUMENT TO A ROUTING TABLE. */ 00209000 * /* WHEN A MATCH IS IS FOUND THE TWO BYTE MODULE ID IS MOVED FROM */ 00210000 * /* THE TABLE TO THE XCTL PARAMETER LIST. IF NO MATCH IS FOUND THE*/ 00211000 * /* CHARACTERS '00' ARE PLACED IN THE XCTL PARAMETER LIST. */ 00212000 * /* */ 00213000 * /*****************************************************************/ 00214000 * 0463 00215000 *OPCE: 0463 00216000 * PROC OPTIONS(NOSAVE,NOSAVEAREA); 0463 00217000 OPCE DS 0H 0464 00218000 * ENTRYPTR=ADDR(ROUTETAB); /* INITIALIZE POINTER TO FIRST 0464 00219000 * ENTRY */ 00220000 LA @09,ROUTETAB 0464 00221000 ST @09,ENTRYPTR(,RWORK) 0464 00222000 * SWITCH=OFF; /* INITIALIZE SWITCH */ 00223000 NI SWITCH(RWORK),B'01111111' 0465 00224000 */* */ 00225000 * 0466 00226000 * DO WHILE SWITCH=OFF; /* SWITCH OFF? SWITCH IS TURNED 00227000 * ON A MATCH OCCURS OR WHEN 'END 00228000 * OF TABLE ' OCCURS */ 00229000 B @DE00466 0466 00230000 @DL00466 DS 0H 0467 00231000 * IF OCSWITCH=TABVALUE THEN /* MATCH FOUND */ 00232000 L @09,ENTRYPTR(,RWORK) 0467 00233000 CLC OCSWITCH(1,ROPCE),TABVALUE(@09) 0467 00234000 BNE @RF00467 0467 00235000 * DO; 0468 00236000 * SWITCH=ON; /* SET LOOP SWITCH ON */ 00237000 OI SWITCH(RWORK),B'10000000' 0469 00238000 * OPCMODID=TABMODID; /* SET UP MOD ID FOR XCTL */ 00239000 MVC OPCMODID(2,ROPCAVT),TABMODID(@09) 0470 00240000 * END; 0471 00241000 * 0471 00242000 */* */ 00243000 * 0472 00244000 * ELSE /* NO MATCH FOUND */ 00245000 * IF TABVALUE