IUMTEXIT TITLE 'IUMTEXIT -- Advance Initialization Exits for the IBM + IUCVMULT Multiple TCP/IP Interface' * * Copyright (c) 1995, SAS Institute Inc. * Unpublished - All Rights Reserved * * NAME: IUMTEXIT * ALIASES: ISPEXIT1, ISPEXIT2 * SUPPORT: LANGUAGE SYSTEMS * PRODUCT: SAS/C * TYPE: SAMPLE * ATTRIB: RENT * LANGUAGE: Assembler * PURPOSE: Assembler exits that can be used to initialize IBM's * TCP/IP IUCVMULT multitasking interface in advance of * any TCP/IP application use and clear it after all * application terminations. This allows elimination * of the requirement that the first TCP/IP application * task remain active until all other TCP/IP applications * have terminated. The IUCVMULT interface was first * available with IBM MVS TCP/IP V2, with PTF's UN13465 * and UN13466. * * USAGE: The exits when used with ISPF are ISPF initialization * exit (exit point 1) and termination exit (exit point 2) * and need to be link-edited with the ISPF exits module * ISPXDT to create the ISPEXITS load module. The * following is a sample ISPXDT source which can be copied * and assembled elsewhere or merged with other ISPXDT * ISPF exit definition source prior to assembly. * AGO .SKIPXDT *------ Start of ISPXDT Source module * ISPXDT definition to define user exits 1 and 2 to ISPF which will * support TCP/IP IUCVMULT initalization at ISPF startup and clearing * at ISPF termination, * ISPMXED START ISPMXLST (1,2) ISPMXDEF 1 ISPMEPT ISPEXIT1 ISPMXEND ISPMXDEF 2 ISPMEPT ISPEXIT2 ISPMXEND ISPMXED END ISPMXDD START ISPMXDD END *------ End of ISPXDT source sample .SKIPXDT ANOP * * USAGE -- continued * -- Assemble * - Use Assembler H or High Level Assembler * - TCP/IP maclib's required for assembler: * tcp_prefix.AEZAMAC1 * tcp_prefix.AEZAMAC3 * tcp_prefix.AEZAMAC4 * * -- Linkedit * The following JCL can be used to link-edit ISPEXITS * //LKED PGM=IEWL,PARM='RENT,LIST,MAP,XREF,LET' * //SYSPRINT DD SYSOUT=A * //SYSUT1 DD UNIT=DISK,SPACE=(CYL,(1,1)) * //SYSLMOD DD DSN=ISP.ISPLOAD * //SYSLIB DD DSN=ISP.LOCOBJ,DISP=SHR * //* Exits and ISPXDT object code must all be in SYSLIB * //SYSLIN DD * * ORDER ISPXDT * ENTRY ISPXDT * INCLUDE SYSLIB(ISPXDT) * NAME ISPEXITS(R) * /* * * In addition to the above, ISPMAIN must link-edited with * a version of ISPDFLTS which allows use of ISPF exits. * For more details on link-editing ISPEXITS and/or ISPMAIN * see the ISPF and ISPF/PDF Planning and Customizing * Manual * * HISTORY: 01JUN92 Developed by SAS INSTITUTE INC for SAS/C. * MACROS: GETMAIN, FREEMAIN, IUCVMINI, MVPXVMCV, IPARML, * IEFJESCT, IEFJSCVT, IHAPSA, CVT * AREAS: * * REFS: "TCP/IP Socket Programming Using the MVS/Assembler/IUCV * Interface", Ron Lane (IBM), 1992 Share Paper * ISPF and ISPF/PDF Planning and Customizing, * IBM Manual: SC34-4134 (ISPF V3) * TCP/IP Version 2 for MVS: Programmer's Reference * IBM Manual: SC31-6087 * * NOTES: Though these exits are geared for use by ISPF, no * ISPF dependent code appears in the exits, and they * could be used with some other suitable product which * provided similiar initialization/termination * type exits and allowed starting multiple TCP/IP * applications. * * KEYWORDS: TCP/IP, IUCVMULT, ISPEXITS * END EJECT ENTRY ISPEXIT1,ISPEXIT2 IUMTEXIT CSECT , DEFINE CSECT IUMTEXIT AMODE ANY IUMTEXIT RMODE ANY CNOP 0,4 INITEXIT B IUEXEXIT-INITEXIT(,R15) ISPEXIT1 EQU INITEXIT DC AL1(17) DC CL17'INITEXIT(IUMTEXIT)' Eye-Catcher DC X'0001' DC A(INITEXIT-IUMTEXIT) DC C'SAS/C 1992 SAS INSTITUTE INC.' DS 0H TERMEXIT B IUEXEXIT-TERMEXIT(,R15) ISPEXIT2 EQU TERMEXIT DC AL1(17) DC CL17'TERMEXIT(IUMTEXIT)' Eye-Catcher DC X'0002' DC A(TERMEXIT-IUMTEXIT) DC C'SAS/C 1992 SAS INSTITUTE INC.' DS 0H SPACE 3 IUEXEXIT STM R14,R12,12(R13) LR R7,R15 Save entry point LR R9,R15 Set up base register S R9,24(,R15) Adjust entry point USING IUMTEXIT,R9 USING DSA,R13 LA R0,DSALEN GETMAIN R,LV=(0) Get register save and work area LR R5,R13 LR R13,R1 Save parms LR R0,R1 LA R1,DSALEN SLR R2,R2 SLR R3,R3 MVCL R0,R2 Clear save and work ST R13,8(,R5) Chain save areas ST R5,4(,R13) * * Set up the external interupt buffer and pick a name to identify us to * TCP/IP. * LA R1,EXTBUF Get address of External Int. Buffer ST R1,IUCVDBFR This must be in IUCVDBFR BAL R8,INITPCN Initialize PC numbers LTR R15,R15 Did we find them? BNZ IUEXDONE No, return MVC TCPNAME,IUCVNAME Copy name to use for IUCVMINI SPACE CLI 23(R7),X'01' Initialization exit call? BNE IUEXTRM No, must be termination exit call. SPACE IUCVMINI SET, Initalize the IUCVMULT interface X NAME=TCPNAME, Chosen Name X EXIT=DUMMYXIT, Dummy exit X UWORD=PREBUF, 16 Bytes before Ext. Int. Buffer X ERROR=IUEXDONE Well, we tried. B IUEXDONE Finished SPACE IUEXTRM EQU * IUCVMINI CLR,NAME=TCPNAME Clear the IUCVMULT interface SPACE 2 IUEXDONE EQU * LR R1,R13 Addr our workarea LA R0,DSALEN L R13,4(,R13) Load previous save FREEMAIN R,LV=(0),A=(1) Free area LM R14,R12,12(R13) Restore Regs SLR R15,R15 Return a 0 BR R14 and return * INITPCN EQU * *********************************************************************** * Extract the PC (program call) numbers from the VMCF subsytem vector * table and save it for later use. Could consider using SNMPGPCN (the * IBM TCP/IP supplied interface) but this would necessiate a V-con for * it and complicate the link-edit and exit installation for something * that is easy to do. *********************************************************************** USING PSA,R0 L R1,FLCCVT Get address of CVT DROP R0 USING CVT,R1 L R1,CVTJESCT Get address of JES Control Table USING JESCT,R1 ICM R1,B'1111',JESSSCT Addr of Subsystem Comm. Table BZ IPCNOT Branch, VMCF/IUCV not Loaded USING SSCT,R1 IPCLOOP CLC SSCTSNAM,=C'VMCF' Found correct entry? BE IPCFOUND Yes, leave loop ICM R1,B'1111',SSCTSCTA Get pointer to next entry BNZ IPCLOOP and loop IPCNOT DS 0H Entry not found LA R15,8 Set failure return code B IPCRET and return IPCFOUND EQU * L R1,SSCTSUSE Get address of VMCF CVT * ST R1,IUCVCVT USING MVPXVMCV,R1 * Copy PC numbers to SNMPPCN area MVC IUCVPCN,PCIUCV PC for IUCV MVC CR0RPCN,PCREDCR0 Read CR0 MVC CR0SPCN,PCSETCR0 Set CR0 MVC SSMPCN,PCSSM Set System Mask MVC RSMPCN,PCREADSM Read System Mask SLR R15,R15 Clear R15 IPCRET EQU * BR R8 Return SPACE 3 *---------------------------------------------------------------------- * The following name can be changed (or generated) as needed. *---------------------------------------------------------------------- SPACE IUCVNAME DC CL8'L$U0E0X1' semi-"Unique" Name ID for IUCVMINI SPACE LTORG EJECT DS 0D DUMMYXIT BR R14 Do nothing exit, except return EJECT * * Register Equates * R0 EQU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 * DSA DSECT Workarea DSECT DSARSAVE DS 18F Register Save SNMPPCN SECT=CSECT Map work area for use by IUCVMINI ** TCPNAME DS D Place to store 8 char name PREBUF DS XL16 16 bytes before interrupt buffer EXTBUF DS XL40 External interrupt buffer ECBOFF EQU *-PREBUF IUCVECB DC A(0) * IUCVSAVE DS 0F Register save required by IUCVMINI IUCVSR14 DS F IUCVSR15 DS F IUCVSR0 DS F IUCVSR1 DS F IUCVSR2 DS F IUCVSR3 DS F IUCVSR4 DS F IUCVSR5 DS F IUCVSR6 DS F IUCVSR7 DS F IUCVSR8 DS F IUCVSR9 DS F IUCVSR10 DS F IUCVSR12 DS F DSALEN EQU *-DSA MVPXVMCV PUSH PRINT PRINT NOGEN COPY IPARML IEFJESCT IEFJSCVT IHAPSA CVT DSECT=YES POP PRINT END