Enterprise Extender – SNA sobre IP: Como configurarlo bajo z/OS

El presente documento explica como habilitar una característica en las comunicaciones para que nuestro tráfico SNA nativo pueda ser llevado por redes TCP/IP.

Tradicionalmente, todas las comunicaciones desde el Host a dispositivos tanto remotos como locales se hacían mediante SNA (Systems Network Architecture), creando una compleja red de Nodos, PUs, LUs, DLUR/DLUS, etc, que gestionaba el VTAM. Los dispositivos externos o controladoras de comunicaciones (3725, 3745, 3746, etc) mediante un sistema llamado NCP (Network Control Program) controlaban y enrutaban las comunicaciones de SNA entre VTAM y el resto de dispositivos mediante el uso de Nodos y líneas punto a punto dedicadas (Frame Relay, X25, etc), pero la gran expansión de Internet y el abaratamiento de las comunicaciones, ha hecho que estos sistemas sean inmanejables y tremendamente costosos de mantener. Además de esto, todos aquellos programas que dependen de SNA para sus comunicaciones (CICS, por ejemplo) y todos los APIs y millones de líneas de código que se han escrito para utilizar SNA como protocolo de comunicaciones, se quieren seguir utilizando, por lo que quitar el SNA sin más y migrarlo a TCP/IP no es una opción abordable.

Por lo tanto, la mejor forma de conseguir mantener el SNA pero olvidarte de costosas líneas de punto a punto o procesadores de comunicaciones costosos, es trabajar con las comunicaciones TCP/IP, o lo que es lo mismo, crear un TUNEL punto a punto que sea TCP/IP pero que en cuyo interior, viajen paquetes con el protocolo SNA. Sencillo, verdad? Pues esto se configura con una aplicación que viene de serie en z/OS desde la versión 1.4 llamada Enterprise Extender.

1.1 Como funciona el Enterprise Extender

El Enterprise Extender esta basado en el funcionamiento de un túnel IP por el que transcurre todo el tráfico SNA, por lo que tenemos, por un lado, el VTAM, que gestiona las comunicaciones SNA, y por otro tenemos el TCP/IP, que nos permite acceder a terminales vía IP a otros sistemas.

Para que VTAM y TCP/IP puedan verse entre sí, se crea un dispositivo virtual (por lo que necesitaremos tener una VIPA o Virtual IP Address) llamado IUTSAMEH, dentro de la definición del TCP/IP del z/OS. Este dispositivo virtual IUTSAMEH, mediante un nodo XCA que definiremos bajo el VTAM, hará las veces de “puente” entre TCP/IP y VTAM. Esta estructura se asemejaría, en GNU/Linux, a algo similar al dispositivo tun/tap, que permite crear puentes virtuales de red.

Una vez creado ese puente, en VTAM se crearían los MAJOR NODES y las DLUs de los dispositivos SNA que van a ir encapsulados bajo TCP/IP, y esto no tiene ningún misterio porque es como se viene haciendo siempre (es decir, si querías conectarte de forma remota a un host vía SNA, tu terminal SNA debía estar definida como una LU dentro de una PU definida en una DLUR, que a su vez dependía de un Major Node o controlador de comunicaciones en el que se definen líneas, grupos y protocolos dentro de VTAM. Aquí es lo mismo, pero cambiando el tipo de Major Node para que en vez de usar una línea SNA, use en Enterprise Extender).

Lógicamente, el otro lado -es decir, el cliente-, debe saber que el trafico SNA viene encapsulado en una línea TCP/IP, y aquí es donde entran soluciones de software como el Microsoft HIS o Host Integration Server (o lo que antiguamente se llamaba Microsoft SNA Server), u otros sistemas servidores con los que se necesita tener comunicación SNA, como por ejemplo otro z/OS o un AS/400.

1.2 Entorno a instalar

Esta “receta” va a utilizar una instalación real de un sistema z/OS (emulado bajo Hercules, aunque las configuraciones se pueden aplicar a un Sistema Real), y lo conectará a un IBM iSeries, o AS/400, con el Sistema Operativo OS/400 versión V6R1M0 (aunque desde la versión V5R4M0 ya soporta conexión Enterprise Extender de forma nativa).

La idea es que queremos que el AS/400 haga de pasarela entre los terminales VTAM del z/OS, de forma que cuando la gente se conecte al AS/400, pueda abrir una emulación 3270 SNA pura contra el mainframe. Si, es cierto que conectándote directamente al TCP/IP del z/OS puedes hacer lo mismo, pero la idea es que así demostramos como un sistema comunicado por SNA con su propio controlador como es el AS/400, puede utilizar un túnel TCP/IP, y además, por ejemplo, este acercamiento es bastante utilizado en muchas empresas cuando el AS/400 tiene más servicios instalados que interactúan con el mainframe (Servidor de Impresión, Front-End de Servidor de Aplicaciones, etc).

1.3 Preparación Hercules

Este paso puede saltarse si el mainframe es real, ya que este punto explicará cómo se configura Hercules para que funcionen bien las VIPAs y la salida de red.

Ante todo, el pre-requisito es que tengamos el Hercules funcionando perfectamente con el z/OS a nivel de TCP/IP, es decir, disponer de un enlace LCS configurado en el hercules.cnf y que la pila TCPIP del z/OS utilice ese enlace para salir al exterior.

Ejemplo de Hercules.cnf:

D000.2  LCS -n 192.168.1.70 192.168.1.246

Por ejemplo, supongamos que nuestro enlace LCS está en la dirección D000 y D001 y que la IP que tiene el PC donde funciona Hercules es la 192.168.1.70, y que la IP que utiliza el z/OS para comunicarse y comunicarnos con él es la 192.168.1.246.

Para crear una VIPA o Virtual IP Address dentro del z/OS, paradójicamente se deben añadir dos direcciones adicionales a nuestro enlace LCS de Hercules, ya que Hercules debe crear otro túnel tun/tap para que dicha IP virtual pueda salir. No me digáis muy bien por qué, pero si no se hace así, el sistema no funciona.

El caso es que cuando ya son más de una IP las que entran en juego -porque la VIPA tendrá la suya-, lo ideal es contar con una tabla OAT u OSA Address Table, con la siguiente configuración:

D000.4      LCS -n 192.168.1.70 --oat oat.txt

Añadimos 2 direcciones mas a nuestro LCS, de forma que ahora tenga las direcciones D000, D001, D002 y D003, y cambiamos la IP final que tendrá z/OS para que con el parámetro –oat nos apunte a un fichero llamado OAT.TXT. Recordar que las direcciones de LCS se enumeran de dos en dos, ya que siempre son dispositivos pares -uno para envío y otro para recepción-.

El contenido del fichero OAT sería el siguiente:

*********************************************************
* Dev   Mode  Port  Entry specific information...       *
*********************************************************
 
  D000  IP    00    PRI  192.168.001.246
  D002  IP    01    SEC  192.168.001.247
 

Es decir, que las direcciones D000 y D001 cojan la IP real del z/OS (es decir, la 192.168.1.246) y que de las direcciones D002 y D003 cojan como secundaria la IP 192.168.1.247, que será la IP que configuraremos como VIPA mas adelante.

Con esto, hemos terminado de configurar la parte de Hercules. El siguiente punto explicaré como configurar el z/OS y su pila TCPIP.

1.4 Configuración TCP/IP z/OS

Para configurar el túnel del Enterprise Extender, he comentado más arriba que es importante crear un dispositivo llamado IUTSAMEH que se sostiene en base a una VIPA. Si nuestra pila TCP/IP carece de VIPAs, habrá que cambiarla para que las soporte, así que eso se arregla fácilmente editando el miembro o dataset PROFILE de la pila TCP/IP. Para hacer eso, seguiremos los siguientes pasos:

1.4.1    Localizar el miembro PROFILE

Para ello, basta con ver el interior de nuestra Strarted Task del TCPIP y ver a que miembro llama en su configuración. Esto se ve desde el SDSF, entrando a ver el log del TCPIP, o bien entrando en el miembro de la PROCLIB que llama al TCPIP:

Fig. 1: Interior del TCPIP bajo SDSF

Fig. 2: Dataset donde está nuestro PROFILE

1.4.2     Añadir IUTSAMEH y VIPA en el PROFILE del TCPIP

Con en miembro PROFILE del TCPIP localizado, procederemos a modificarlo para, si no lo tiene ya, dotar de VIPA a nuestra pila TCP/IP -añadiendo SOURCEVIPA-, y añadir además el dispositivo IUTSAMEH que luego enlace con el VTAM. El listado de a continuación es un ejemplo, y en negrita está puesto lo que habría que añadir:

; TCPIP.PROFILE.TCPIP
; ===================
;
; COPYRIGHT = NONE.
;
; NOTES:
;
;    The device configuration statements MUST be changed to match your
;    hardware and software configuration.
;
;    The BEGINVTAM section must be changed to match your VTAM
;    configuration.
;
;
; For more information about this file, see "Configuring the TCPIP
; Address Space" and "Configuring the Telnet Server" in the
; IP Configuration manual.
;
ARPAGE 5
IPCONFIG SOURCEVIPA 
NODATAGRAMFWD
IGNOREREDIRECT
TCPCONFIG
RESTRICTLOWPORTS
UDPCONFIG
RESTRICTLOWPORTS
DATASETPREFIX TCPIP

DEVICE OSAGE000  MPCIPA
LINK OSAGBE1  IPAQENET OSAGE000

DEVICE LCS1   LCS   D000 AUTORESTART
LINK ETH1  ETHERNET 0 LCS1
;*******************************       
; Enterprise Extender VIPA              
;*******************************       
DEVICE VIPA01 VIRTUAL 0                
LINK LVIPA1 VIRTUAL 0 VIPA01           
                                       
;*******************************       
; VTAM to TCPIP Stack                   
;*******************************       
DEVICE IUTSAMEH MPCPTP                 
LINK EELINK MPCPTP IUTSAMEH            

HOME
;  192.168.252.167   OSDL
192.168.1.246     ETH1
   192.168.1.247     LVIPA1  
   192.168.1.248     EELINK  
192.168.1.244     OSAGBE1
;
;  9.67.43.110    FDDI1
;  193.7.2.1      SNA1

BEGINRoutes
ROUTE 192.168.1.0/24    =   ETH1  MTU  1500
ROUTE 192.168.1.0/24    =   OSAGBE1 MTU  1500
ENDRoutes

START LCS1
START IUTSAMEH   
START OSAGE000

Como se ha podido comprobar, se han creado dos interfaces: LVIPA1 y EELINK. EELINK es el dispositivo IUTSAMEH, mientras que el LVIPA1 es una VIPA creada para que, usando la pila TCPIP, salga hacia fuera del z/OS, por lo que su IP debe coincidir con la configurada en el Hercules.CNF, dentro del fichero OAT.TXT (en nuestro ejemplo, 192.168.1.247). La IP del EELINK se usará de forma interna, por lo que no saldrá hacia fuera -ni tiene la necesidad de hacerlo- ya que esta IP se usará internamente por el sistema. Con esto, y reiniciando el TCPIP, lógicamente, ya tenemos uno de los lados del túnel preparado para transportar SNA sobre IP.

1.5 Configuración VTAM

Esta es quizás la parte más compleja del sistema, ya que no solo hay que crear el otro lado del túnel, sino que hay que configurar nodos, líneas y demás, así que vamos a ir por partes. Lo primero de todo es saber donde están los miembros de configuración del VTAM, así que, siguiendo la lógica del punto 1.4.1, podemos adivinar que la configuración de la que se nutre en nuestro ejemplo es desde el dataset ADCD.Z110.VTAMLST.

1.5.1    Modificación ATCSTR00

Este miembro es el primero que lee el VTAM para cargar toda la configuración, de modo que para habilitar el Enterprise Extender, es necesario modificarlo, añadiendo algunas configuraciones y modificando alguna existente, como tamaños de buffer y esas cosas. A continuación, pego mi ATCSTR00 de ejemplo, y pondré en negrita lo que añadí y/o modifiqué:

CONFIG=00,SUPP=NOSUP,                                                  X
SSCPID=06,NOPROMPT,                                                    X
HOSTSA=6,MAXSUBA=31,                                                   X
SSCPNAME=PROD,HOSTPU=WYC$PU,                                           X
NETID=WEYLAND,                                                         X
NODETYPE=NN,                                                           X
TCPNAME=TCPIP,                                                         X
IPADDR=192.168.1.247,                                                  X
CPCP=YES,                                                              X
HPR=RTP,                                                               X
DYNADJCP=YES,                                                          X
DYNLU=YES,                                                             X
CRA4BUF=(4000,,0,,10,20),                                              X
CRA8BUF=(396,,0,,6,2),                                                 X
CRPLBUF=(1300,,0,,60,29),                                              X
IOBUF=(2000,447,19,,8,48),                                             X
LFBUF=(8160,,0,,1,1),                                                  X
LPBUF=(54,,0,,6,2),                                                    X
SFBUF=(192,,0,,1,1),                                                   X
SPBUF=(84,,0,,1,1),                                                    X
TIBUF=(2000,,0,,60,120),                                               X
XDBUF=(60,,0,,1,4),                                                    X
PPOLOG=YES                                                             
*/*
*/* LIB: SYS1.VTAMLST(ATCSTR00)
*/* GDE: CBIPO COMMUNICATIONS
*/* DOC: THIS MEMBER CONTAINS THE ACF/VTAM DEFAULT
*/*      START OPTIONS ON THE MODEL INSTALLATION SYSTEM.
*/*

Los valores más representativos son los que emparejan el túnel VTAM con el TCP/IP, a saber, TCPNAME para poner el nombre de la pila a la que hará uso, y IPADDR para decirle al VTAM que IP usará por defecto (que, como habréis podido observar, es la misma que la VIPA).

Importante también la opción HPR=RTP, esto es el protocolo High Performance Routing de SNA para encapsular las tramas SNA sobre IP.

NOTA: Especial atención a las X del final, que indican continuación de línea. De ponerlas mal o no ponerlas (deben coincidir en la columna 80), podría hacer que el VTAM no arrancara por fallo de sintaxis, por lo que antes de modificar el miembro original, haced una copia por si acaso.

1.5.2    Modificación IBMTGPS

Este miembro debe ser modificado para utilizar definiciones de la capa de transporte (Ethernet, fibra, etc) para que soporten Enterprise extender, ya que posteriormente, estas definición serán utilizadas en los nodos y líneas.

Si este fichero NO está en vuestra VTAMLST, se debería incluir, así como las nuevas definiciones. Para ello, en la SYS1.SAMPLIB disponemos del miembro IBMTGPS que podemos copiar libremente a nuestra VTAMLST y modificarlo.

Así pues, hay que añadir 2 tipos adicionales:

**********************************************************************
* Enterprise Extender, i/Series                                      *
**********************************************************************
TGPAS400 TGP   COSTTIME=0,COSTBYTE=0,SECURITY=UNSECURE,                *
PDELAY=TERRESTR,CAPACITY=100M,                          *
UPARM1=128,UPARM2=128,UPARM3=128
**********************************************************************
* Enterprise Extender, Fast Ethernet                                 *
**********************************************************************
FASTENET TGP   COSTTIME=0,COSTBYTE=0,SECURITY=UNSECURE,                *
PDELAY=NEGLIGIB,CAPACITY=100M,                          *
UPARM1=128,UPARM2=128,UPARM3=128

Estos tipos están pensados para que el primero se conecte a un IBM AS/400 y el siguiente, a cualquier red Ethernet.

NOTA: Al igual que en el punto anterior, los * del final denotan continuación, por lo que deben ponerse en la línea 80, de lo contrario, no funcionará bien el sistema.

1.5.3    Modificación ATCCON00

Este miembro se utiliza para cargar los Nodos, Líneas, DLURs, DLUs, etc, así como definiciones del VTAM. Si no disponemos del miembro IBMTGPS, deberíamos añadirlo al miembro ATCCON00:

A0600,NSNAFXX,NSNA70X,NSNA90X,DYNMODEL,XCAE40R,XCAE40E,COSAPPN,        *
A0TCP,DB8GLU,OSATRL1,IMS10APL,DB9GLU,OSAGE000,OSAGF000,IBMTGPS

 

Con estos valores, y reiniciando el VTAM, el otro lado del túnel queda también configurado.

1.5.4    Creación Nodo XCA (External Communication Adapter)

Con el VTAM arrancado, preparado para la infraestructura Enterprise Extender, necesitamos definir una serie de nodos para poder transmitir y recibir los datos, y preparar la red de terminales o impresoras o dispositivos como NJE a los que luego se conectaran los clientes. Entre ellos, el más importante es el nodo XCA o Adaptador de Comunicaciones Externo. En cualquier instalación, debe haber por lo menos uno definido, ya que es el nodo que VTAM utilizará para derivar las comunicaciones a nuestra tarjeta de red, o lo que es lo mismo, le dice al VTAM como y por donde enrutar el tráfico del que dependerán los nodos que bajo él se configuren.

Por tanto, como queremos utilizar el Enterprise Extender para encapsular trafico SNA en IP, debemos crear un nodo XCA que el VTAM utilizará para este propósito, que llamaremos XCAEE y lo guardaremos con el mismo nombre en la VTAMLST:

XCAEE    VBUILD TYPE=XCA
PORTXCAE PORT  MEDIUM=HPRIP,                                           *
IPTOS=(20,40,80,C0,C0),                                 *
SRQTIME=15,                                             *
SRQRETRY=3
GRXCAEE  GROUP AUTOGEN=(16,LINV,P),DIAL=YES,CALL=INOUT,                *
KEEPACT=YES,DYNPU=YES

Como podéis observar, el nodo es del tipo XCA, un puerto que hará uso del HPR/IP (enrutado de tráfico SNA vía IP) y luego un grupo de líneas, que se autogenerarán dinámicamente, serán 16 y empezarán por LINV0001 hasta la LINV000F, podrá generar PUs dinámicas al conectarse, etc. Con esto, VTAM ya sabe en qué forma dirigir el tráfico cuando vaya a ser HPRIP, aunque si tenemos más de 16 nodos dependientes, las 16 líneas punto a punto configuradas no serán suficientes, por lo que o bien aumentamos el número de líneas a auto-generar, o bien creamos otro nodo XCA. Y no me quiero repetir, pero ojo con los asteriscos del final. En nuestro ejemplo, solo configuraremos 1 nodo, así que en principio nos sobrarían 15 líneas, pero no pasa nada.

1.5.5    Creación Nodo HPR (High Performance Routing)

Hemos definido en el punto 1.5.4 el nodo XCA. El nodo HPR se debe crear con CADA dispositivo que queremos conectar -y que queramos que use el Enterprise Extender-. Si tuviéramos 2 AS/400 cada uno con IPs distintas, deberíamos definir otro nodo HPR para dicho AS/400, y así sucesivamente. En nuestro ejemplo, como solo conectaremos 1 AS/400, solo definimos el nodo HPR que se conectará a él (y viceversa).

HPREE01  VBUILD TYPE=SWNET

PUHPR01  PU    CPNAME=I810,                                            *
NETID=WEYLAND,                                          *
TGN=6,                                                  *
CPCP=YES,                                               *
HPR=YES,                                                *
DISCNT=NO,                                              *
DWACT=NO,                                               *
DWINOP=NO,                                              *
TGP=TGPAS400
PATH01  PATH   IPADDR=192.168.1.33,                                    *
SAPADDR=4,                                              *
GRPNM=GRXCAEE

Lo que he puesto en negrita es lo más importante: Por una parte, debemos configurar la PU (Physical Unit) que conectará al cliente externo, en este caso, el AS/400, debemos conocer el nombre del Servidor (CPNAME) y el Identificador de Red (NETID) de la máquina destino. En nuestro ejemplo, tanto el AS/400 como el z/OS comparten ID de Red, así que será WEYLAND. El CPNANE del AS/400 es I810. Estos dos datos los obtenemos del propio AS/400, con el mandato DSPNETA, explicado con detalle posteriormente en el punto 1.7.1. También le diremos que use la configuración de comunicaciones TGPAS400 (recordáis el miembro IBMTGPS??). Con esto, la PU queda configurada.

Pero necesitamos un camino para salir del VTAM del z/OS para usar la tarjeta de red de salida (recordemos el nodo XCA antes mencionado), así que introduciremos la IP del AS/400 (192.168.1.33) y el nombre del GRUPO de líneas por el que queremos que salga. Como en el nodo XCA se autogeneran y son dinámicas, cuando levantemos el nodo, el camino o path se asignará a la línea que le dé la gana de forma automática y podremos escuchar la VIPA en busca de peticiones del AS/400.

1.5.6    Creación DLUR (Dependent LU Requester)

Por último, debemos crear una DLUR, o “pool de LUs”, donde los terminales del AS/400 se conecten a nuestro VTAM, porque, sin un terminal, VTAM no puede mostrarte la pantalla de acceso al sistema. La DLUR se configura como cualquier otra, y claramente, se diferencian por el nombre, por lo que si deseas conectarte a una DLUR existente -que tradicionalmente se utilizaba ya en la instalación cuando las comunicaciones eran SNA puras- con poner en el AS/400 el mismo nombre de controlador, sería suficiente.

Pero para ilustrarlo mejor, pondré un ejemplo de DLUR que más tarde configuraremos en el AS/400 para que luego la use:

DLUEE01  VBUILD TYPE=SWNET
CTLEE01  PU    PUTYPE=2,                                               *
ANS=CONT,                                               *
IDBLK=056,                                              *
IDNUM=33333,                                            *
MODETAB=LOGMODES,                                       *
DLOGMOD=DYNAMIC
CV01     LU    LOCADDR=1,USSTAB=USSS
CV02     LU    LOCADDR=2,USSTAB=USSS
CV03     LU    LOCADDR=3,USSTAB=USSS
CV04     LU    LOCADDR=4,USSTAB=USSS

Lo que he puesto en negrita lo usaremos luego en la definición del controlador PU en el AS/400, viene a ser la “matricula” del controlador para que sea único -además de tener el nombre CTLEE01-. Debajo, hay varias LU (Logical Unit), que en este caso, son 4 terminales 3270, que van del CV01 al CV04. Importante señalar el MODETAB, LOGMODE y la USSTAB que queremos que nuestro terminal tenga, en mi ejemplo son esas las relativas a la definición de terminales, pero cada instalación es un mundo.

Con todo esto, tenemos todo preparado desde la parte z/OS para conectarnos.

1.6 Activación de Nodos Enterprise Extender

Ahora, ha llegado el momento de activar los nodos que acabamos de editar, para que VTAM tenga consciencia de ellos. Para ello, basta con activar en este orden los nodos, mediante los siguientes comandos de z/OS, desde la consola maestra:

1.- Primero: El nodo XCA:

V NET,ACT,ID=XCAEE

La salida de la consola, debería ser la siguiente:

00- 02.32.56           v net,act,id=xcaee
02.32.56 STC01954  IST097I VARY ACCEPTED
02.32.56 STC01954  IST093I XCAEE ACTIVE
- 02.32.56 STC01972  EZZ4324I CONNECTION TO 192.168.1.247 ACTIVE FOR DEVICE
-  IUTSAMEH
02.32.56 STC01954  IST1685I TCP/IP JOB NAME = TCPIP
02.32.56 STC01954  IST1680I LOCAL IP ADDRESS 192.168.1.247

Como habréis podido observar, en el momento que se levanta el nodo XCA, se levanta la VIPA IUTSAMEH y se pone a escuchar a la IP 192.168.1.247

Si hacemos un D NET,ID=XCAEE,SCOPE=ALL, debería salirnos una lista de las 16 líneas que hemos configurado:

D NET,ID=XCAEE,SCOPE=ALL
IST097I DISPLAY ACCEPTED
IST075I NAME = XCAEE, TYPE = XCA MAJOR NODE 232
IST486I STATUS= ACTIV, DESIRED STATE= ACTIV
IST1679I MEDIUM = HPRIP
IST1685I TCP/IP JOB NAME = TCPIP
IST924I -------------------------------------------------------------
IST089I GRXCAEE  TYPE = LINE GROUP       , ACTIV
IST1680I LOCAL IP ADDRESS 192.168.1.247
IST924I -------------------------------------------------------------
IST654I I/O TRACE = OFF, BUFFER TRACE = OFF
IST1656I VTAMTOPO = REPORT, NODE REPORTED - YES
IST170I LINES:
IST1901I LINES UNDER GROUP: GRXCAEE
IST232I LINV000  ACTIV
IST232I LINV001  ACTIV
IST232I LINV002  ACTIV
IST232I LINV003  ACTIV
IST232I LINV004  ACTIV
IST232I LINV005  ACTIV
IST232I LINV006  ACTIV
IST232I LINV007  ACTIV
IST232I LINV008  ACTIV
IST232I LINV009  ACTIV
IST232I LINV00A  ACTIV
IST232I LINV00B  ACTIV
IST232I LINV00C  ACTIV
IST232I LINV00D  ACTIV
IST232I LINV00E  ACTIV
IST232I LINV00F  ACTIV
IST314I END

2.- Segundo: El nodo HPR.

V NET,ACT,ID=HPREE01
00- 02.39.34           V NET,ACT,ID=HPREE01
02.39.34 STC01954  IST097I VARY ACCEPTED
02.39.34 STC01954  IST093I PUHPR01 ACTIVE
02.39.34 STC01954  IST093I HPREE01 ACTIVE

Si vemos el nodo con detalle, con un D NET,ID=HPREE01,SCOPE=ALL, podremos ver lo siguiente:

00- 02.41.16           d net,id=hpree01,scope=all
02.41.16 STC01954  IST097I DISPLAY ACCEPTED
02.41.16 STC01954  IST075I NAME = HPREE01, TYPE = SW SNA MAJ NODE
IST486I STATUS= ACTIV, DESIRED STATE= ACTIV
IST1656I VTAMTOPO = REPORT, NODE REPORTED - YES
IST084I NETWORK RESOURCES:
IST089I PUHPR01  TYPE = PU_T2            , CONCT
IST1500I STATE TRACE = OFF
IST314I END

El Nodo PUHPR01 está en modo CONCT o CONECTABLE, es decir, que está esperando que el nodo remoto -en nuestro ejemplo, el AS/400 se conecte a él-.

3.- Tercero: La DLUR:

V NET,ACT,ID=DLUEE01
00- 02.44.37           V NET,ACT,ID=DLUEE01
02.44.37 STC01954  IST097I VARY ACCEPTED
02.44.37 STC01954  IST093I CTLEE01 ACTIVE
02.44.37 STC01954  IST093I DLUEE01 ACTIVE

Y si la vemos con detalle con un D NET,ID=DLUEE01,SCOPE=ALL:

00- 02.45.35           D NET,ID=DLUEE01,SCOPE=ALL
02.45.35 STC01954  IST097I DISPLAY ACCEPTED
02.45.35 STC01954  IST075I NAME = DLUEE01, TYPE = SW SNA MAJ NODE
IST486I STATUS= ACTIV, DESIRED STATE= ACTIV
IST1656I VTAMTOPO = REPORT, NODE REPORTED - YES
IST084I NETWORK RESOURCES:
IST089I CTLEE01  TYPE = PU_T2            , CONCT
IST089I CV01     TYPE = LOGICAL UNIT     , CONCT
IST089I CV02     TYPE = LOGICAL UNIT     , CONCT
IST089I CV03     TYPE = LOGICAL UNIT     , CONCT
IST089I CV04     TYPE = LOGICAL UNIT     , CONCT
IST314I END

Vemos que están los 4 terminales 3270 esperando conexión (CONCT).

Para mayor comodidad, se puede editar el miembro ATCCON00 de la VTAMLST y añadir estos nodos para que cada vez que arranque el VTAM, se lancen automáticamente siguiendo el mismo orden de arranque:

A0600,NSNAFXX,NSNA70X,NSNA90X,DYNMODEL,XCAE40R,XCAE40E,COSAPPN,        *
A0TCP,DB8GLU,OSATRL1,IMS10APL,DB9GLU,OSAGE000,OSAGF000,IBMTGPS,        *
XCAEE,HPREE01,DLUEE01     

Con estos sencillos pasos, ya tenemos el z/OS preparado para recibir de brazos abiertos al AS/400. Ahora, solo queda configurar el AS/400 para conectarse al z/OS usando el Enterprise Extender.

 

1.7 Configuración del AS/400

En este punto, configuraremos el sistema AS/400 o iSeries para que los nodos creados en el z/OS puedan ser conectados sin mayor problema. Por tanto, seguiremos los siguientes pasos:

1.7.1    Obtención de Datos de Red (DSPNETA)

DSPNETA es el mandato que hay que lanzar para saber cómo se ha configurado nuestro nodo HPR en el punto 1.5.5. Es decir, esos datos, como CPNAME y NETID, los hemos obtenido lanzando este mandato en nuestro AS/400. Esta sería la salida del comando DSPNETA en nuestro AS/400 de este ejemplo:

Visualizar Atributos de Red

Sistema:   I810
Nombre de sistema actual . . . . . . . . . . . . :   I810
Nombre de sistema pendiente  . . . . . . . . . :
ID de red local  . . . . . . . . . . . . . . . . :   WEYLAND
Nombre de punto de control local . . . . . . . . :   I810
Ubicación local por omisión  . . . . . . . . . . :   I810
Modalidad por omisión  . . . . . . . . . . . . . :   BLANK
Tipo de nodo APPN  . . . . . . . . . . . . . . . :   *ENDNODE
Compresión de datos  . . . . . . . . . . . . . . :   *NONE
Compresión de datos en nodo intermedio . . . . . :   *NONE
Número máximo de sesiones intermedias  . . . . . :   200
Resistencia de adición de direccionamiento . . . :   128
ID de red de servidor/nombre de punto de control :   *LCLNETID   *ANY
…
…
Permitir soporte virtual de APPN . . . . . . . . :   *NO
Permitir soporte de torre de transporte HPR  . . :   *NO

Como se puede apreciar, el ID de RED es WEYLAND y el CPNAME o Punto de control local es I810. Estos datos serán los que habrá que tener en cuenta cuando se cree el nodo HPREE01 de VTAM.

No obstante, hay que configurar el AS/400 -si no lo está ya- para que active el Enterprise Extender por defecto, ya que normalmente no está configurado -las opciones de “Permitir soporte virtual de APPN y Permitir soporte de torre de transporte HPR”. Para ello, con el mandato CHGNETA podemos cambiar los valores del AS/400 (aunque si existen controladores SNA activos en ese momento, no dejará hacerlo hasta que se desactiven) para habilitarlos, de forma que quede así:

Permitir soporte virtual de APPN . . . . . . . . :   *YES
Permitir soporte de torre de transporte HPR  . . :   *YES

1.7.2    Creación Controlador HPRIP AS/400 – HPREE01

Para conectar punto a punto una red o túnel, como este caso, debemos crear un controlador análogo en el AS/400 para que hable con el nodo de VTAM que hemos configurado. La idea es que este controlador será el que haga de camino entre el z/OS y el AS/400. Para ello, debemos configurar los datos del Nodo HPR HPREE01 del z/OS en el AS/400. Esto se consigue con el mandato CRTCTLAPPC, e introduciendo lo siguiente:

Crear descr controlador (APPC) (CRTCTLAPPC)

Teclee elecciones, pulse Intro.

Descripción controlador  . . . . > CTLAPPCEE     Nombre
Tipo de enlace . . . . . . . . . > *HPRIP        *ANYNW, *FAX, *FR, *HPRIP…
En línea en IPL  . . . . . . . .   *YES          *YES, *NO
Dirección Internet remota  . . . > ‘192.168.1.247’
Dirección Internet local . . . .   *SYS
Temporizadores LDLC:
Cuenta reintentos LDLC . . . .   3             0-255
Temporizador reintento LDLC  .   15            0-65535 segundos
Temorizador de vigencia LDLC     10            0-65535 segundos
Velocidad de enlace LDLC . . . .   *CAMPUS
Tamaño máximo de trama . . . . .   *LINKTYPE     265-16393, 256, 265, 512…
Id red remota  . . . . . . . . .   *NETATR       Nombre, *NETATR, *NONE, *ANY
Punto control remoto . . . . . . > PROD          Nombre, *ANY
Más…

Identificador de intercambio . . > 05633333      00000000-FFFFFFFF
LAN DSAP . . . . . . . . . . . .   04            04, 08, 0C, 10, 14, 18, 1C…
LAN SSAP . . . . . . . . . . . .   04            04, 08, 0C, 10, 14, 18, 1C…
Soporte de sesión CP APPN  . . .   *YES          *YES, *NO
Tipo de nodo APPN remoto . . . .   *ENDNODE      *ENDNODE, *LENNODE…
Cometido de expansor de rama . .   *NETNODE      *NETNODE, *ENDNODE
Conmutación de vía acceso HPR  .   *NO           *NO, *YES
Número grupo transmisión APPN  .   1             1-20, *CALC
Creación automá dispositivo  . .   *ALL          *ALL, *NONE
Suprimir disp. automáticamente     1440          1-10000, *NO
Definido por usuario 1 . . . . .   128           0-255, *LIND
Definido por usuario 2 . . . . .   128           0-255, *LIND
Definido por usuario 3 . . . . .   128           0-255, *LIND
Texto descriptivo  . . . . . . . > ‘Controlador HPREE01 z/OS’

Lo puesto en negrita es lo que hay que cambiar o añadir. Vemos que el controlador del AS/400 se llamará CTLAPPCEE, será HPRIP y la IP remota será la VIPA de nuestro z/OS por la que irá el tráfico Enterprise Extender, es decir, la 192.168.1.247.

Lo siguiente a añadir será la ID de Red remota, que es WEYLAND, pero al ser la misma Red la que comparten el z/OS y el AS/400, con poner *NETATR basta. Y por supuesto, hay que saber el nombre del punto de control remoto o SSCPNAME, que, según nuestro VTAM del z/OS, se llama PROD (viendo el ATCSTR00 de la VTAMLST).

También hay que introducir el identificador de Intercambio, que es un número único en el sistema que identifica el enlace al nodo VTAM o mejor dicho, el nodo DLUR de VTAM. Recordáis el IDBLK y el IDNUM? Pues esos números son los que hay que emparejar aquí.

Dando al Intro, el controlador se creará.

Fig. 3: Controlador creado     

 

En este momento, podemos entrar con un 8=Trabajar con estado y activarlo con un 1=Activar    

 

Fig. 4: Activación del controlador

 

Al activar el controlador, y si volvemos a la pantalla de la figura 3, veremos cómo automáticamente se ha creado un controlador adicional llamado QAPENDXXX que controlará el entorno SNA, esto es perfectamente normal.      

 

Si vamos a la consola de z/OS, debemos ver que al haberse activado, el nodo ha logrado comunicación por VTAM:

 

- 15.40.21 STC02003  IST2180I DYNLU = YES FOR WEYLAND.I810 SET FROM PUHPR01

15.40.21 STC02003  IST590I CONNECTIN ESTABLISHED FOR PU PUHPR01 ON LINE
LINV00F
15.40.21 STC02003  IST1086I APPN CONNECTION FOR WEYLAND.I810 IS ACTIVE –
TGN = 6
00  15.40.23 STC02003  IST1488I ACTIVATION OF RTP CNR00003 AS PASSIVE TO
WEYLAND.I810
15.40.23 STC02003  IST1096I CP-CP SESSIONS WITH WEYLAND.I810 ACTIVATED

Se ve como ha pillado la primera línea que ha querido, la LINV00F y se ha establecido contacto con el sistema WEYLAND.I810, creando una sesión APPN entre los dos sistemas. En estos momentos, el túnel SNA/IP está funcionando perfectamente.

1.7.3    Creación Controlador DLUR AS/400 – DLUEE01

Una vez creado el camino según el punto anterior, ahora hay que crear en el AS/400 el controlador equivalente que se conectará al VTAM con los terminales que hemos definido (recordemos que definimos una PU y 4 LUs). La PU se crea en el AS/400 con el mandato CRTCTLHOST, e introduciremos los datos siguientes, de acuerdo a la configuración de nuestra DLUR DLUEE01:

Crear descr contr (S prpl SNA) (CRTCTLHOST)

Teclee elecciones, pulse Intro.
Descripción controlador  . . . . > CTLEE00001    Nombre
Tipo de enlace . . . . . . . . . > *DLUR         *DLUR, *FR, *LAN, *SDLC, *X25
En línea en IPL  . . . . . . . .   *YES          *YES, *NO
Conexión conmutada . . . . . . . > *YES          *NO, *YES
Con posibilidad APPN . . . . . .   *YES          *YES, *NO
Tamaño máximo de trama . . . . .   *LINKTYPE     265-16393, 256, 265, 512…
Identificador SSCP . . . . . . .                 050000000000-05FFFFFFFFFF
ID de intercambio local  . . . .   *LIND         05600000-056FFFFF, *LIND
Conexión inicial . . . . . . . .   *DIAL         *DIAL, *ANS
Inicio de marcación  . . . . . .   *LINKTYPE     *LINKTYPE, *IMMED, *DELAY
Estado conmutado mínimo APPN . .   *VRYONPND     *VRYONPND, *VRYON
Texto descriptivo  . . . . . . . > ‘Controlador DLUR CTLEE01 z/OS’
Nombre de DLUS primario:
Nombre de punto de control . . > PROD          Nombre, *NONE
Identificador de red . . . . . > WEYLAND       Nombre, *NETATR
Nombre de DLUS de reserva:
Nombre de punto de control . .   *NONE         Nombre, *NONE
Identificador de red . . . . .                 Nombre, *NETATR
Nombre de PU dependiente . . . . > CTLEE01       Nombre, *NONE
Temporizador de activación . . .   170           30 a 2550 (segundos)
Tempor Dsc/reconexión (T309) . .   170           1-2550 (seg)

El controlador lo he llamado CTLEE00001. En enlace es DLUR, y el punto de control será PROD, mientras que el ID de Red será WEYLAND. Por último, PU dependiente será CTLEE01, que es la PU definida dentro de la DLUR donde nos conectaremos.

1.7.4    Creación Dispositivos Terminales AS/400 – DLUEE01

Y con la PU creada, vamos a crear los dispositivos terminales o LUs, concretamente 4, del CV01 al CV04. Estos dispositivos dependerán de la PU configurada en el punto 1.7.3, de la misma forma que en la DLUR, las LUs dependen de la PU. Para añadir un dispositivo en el AS/400, usaremos el mandato CRTDEVHOST, con las opciones siguientes:

Crear desc disp (Sis Prin SNA) (CRTDEVHOST)

Teclee elecciones, pulse Intro.

Descripción de dispositivo . . . > TERMINAL01    Nombre
Dirección ubicación local  . . . > 01            01-FF
Ubicación remota . . . . . . . . > CV01          Nombre
En línea en IPL  . . . . . . . .   *YES          *YES, *NO
Controlador conectado  . . . . . > CTLEE00001    Nombre
Tipo de aplicación . . . . . . . > *EML          *RJE, *EML, *PGM
Longitud máx. unidad petición  .   *CALC         *CALC
Dispositivo emulado  . . . . . .   3278          3278, 3284, 3286, 3287…
Teclado emulado  . . . . . . . .   *UPPER        *UPPER, *LOWER
Bloqueo numérico emulado . . . .   *NO           *NO, *YES
Estación trabajo de emulación  .   *ANY          Nombre, *ANY
Finalizar sesión con sist prin     *UNBIND       *UNBIND, *RSHUTD
Texto descriptivo  . . . . . . .   *BLANK
Nombre ubicación dependiente . .   *NONE         Nombre, *NONE

Con esto, acabamos de crear una emulación SNA que depende del controlador CTLEE00001, la ubicación remota o LU será CV01, y la dirección será la 01.

Para crear un segundo terminal:

Crear desc disp (Sis Prin SNA) (CRTDEVHOST)

Teclee elecciones, pulse Intro.

Descripción de dispositivo . . . > TERMINAL02    Nombre
Dirección ubicación local  . . . > 02            01-FF
Ubicación remota . . . . . . . . > CV02          Nombre
En línea en IPL  . . . . . . . .   *YES          *YES, *NO
Controlador conectado  . . . . . > CTLEE00001    Nombre
Tipo de aplicación . . . . . . . > *EML          *RJE, *EML, *PGM
Longitud máx. unidad petición  .   *CALC         *CALC
Dispositivo emulado  . . . . . .   3278          3278, 3284, 3286, 3287…
Teclado emulado  . . . . . . . .   *UPPER        *UPPER, *LOWER
Bloqueo numérico emulado . . . .   *NO           *NO, *YES
Estación trabajo de emulación  .   *ANY          Nombre, *ANY
Finalizar sesión con sist prin     *UNBIND       *UNBIND, *RSHUTD
Texto descriptivo  . . . . . . .   *BLANK
Nombre ubicación dependiente . .   *NONE         Nombre, *NONE

Y así, sucesivamente, hasta completar los 4 (porque no hemos definido mas).

Si ahora, trabajamos con el estado del controlador CTLEE00001, veremos que los terminales dependen del controlador, justo como la DLUR del VTAM:

Fig. 5: Terminales y Controlador.

Por tanto, si ahora activamos el controlador, deberíamos ver en la consola de z/OS las correctas activaciones:

Fig. 6: Activación de terminales.

 

00  16.10.18 STC02003  IST1488I ACTIVATION OF RTP CNR00004 AS PASSIVE TO
WEYLAND.I810
16.10.18 STC02003  IST1488I ACTIVATION OF RTP CNR00005 AS PASSIVE TO
WEYLAND.I810
16.10.19 STC02003  IST1883I SESSION ESTABLISHED WITH CTLEE01 - DLUR
WEYLAND.I810

Si ahora hacemos un D NET,ID=DLUEE01,SCOPE=ALL, veremos cómo los 4 terminales definidos ya no están en CONCT (conectable), sino ACTIV (Activos).

 

00- 16.11.08           d net,id=dluee01,scope=all
16.11.08 STC02003  IST097I DISPLAY ACCEPTED
16.11.08 STC02003  IST075I NAME = DLUEE01, TYPE = SW SNA MAJ NODE
IST486I STATUS= ACTIV, DESIRED STATE= ACTIV
IST1656I VTAMTOPO = REPORT, NODE REPORTED - YES
IST084I NETWORK RESOURCES:
IST089I CTLEE01  TYPE = PU_T2            , ACTIV
IST089I CV01     TYPE = LOGICAL UNIT     , ACTIV
IST089I CV02     TYPE = LOGICAL UNIT     , ACTIV
IST089I CV03     TYPE = LOGICAL UNIT     , ACTIV
IST089I CV04     TYPE = LOGICAL UNIT     , ACTIV
IST314I END

1.8 Conexión Final desde el AS/400 al z/OS vía SNA/IP

Ahora que tenemos todas las comunicaciones levantadas, basta con lanzar una emulación 3270 desde el AS/400 para ver como adquiere un terminal, y nos muestra la pantalla de logo del z/OS. Para ello, ejecutaremos el mandato STREML3270, y rellenaremos los datos:

Arrancar Emulación Pant 3270 (STREML3270)

Teclee elecciones, pulse Intro.

Controlador de emulación, o  . .   CTLEE00001    Nombre
Dispositivo de emulación, o  . .                 Nombre
Ubicación de emulación . . . . .                 Nombre
Disp pantalla, solo por lotes  .   *CURRENT      Nombre, *CURRENT
Tecla Retroc Pág (Giro Abajo)  .   *PA2          *PA2, *PA1, *PA3, *NONE…
Tecla Avance Pág (Giro Arriba)     *PA1          *PA1, *PA2, *PA3, *NONE…
Tecla Petición Prueba  . . . . .   *DFT          *DFT, *CLEAR, *ERASEINP
Tecla de Selección de Cursor . .   *NONE         *NONE, *F1, *F2, *F3, *F4…
Emulación SNA DBCS 3270PC  . . .   *NO           *NO, *YES

También podríamos poner en vez del controlador (CTLEE00001), el dispositivo (TERMINAL01) o la ubicación (CV01), lo mismo da, el caso es que se arrancaría la emulación:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fig. 7: Logo de bienvenida emulación 3270 SNA

Si echamos un ojo al log de la consola del z/OS, veremos que se ha activado un dispositivo de forma dinámica:

16.16.54 STC02003  IST1488I ACTIVATION OF RTP CNR00006 AS ACTIVE TO
WEYLAND.I810
00- 16.17.06 TSU02047  $HASP373 IBMUSER  STARTED

Fig.8: ISPF bajo SNA

A partir de ahora, se trabaja como una sesión 3270 normal y corriente.

Pero para verificar que realmente es así, basta con emitir el comando D NET,ID=DLUEE01,SCOPE=ALL para comprobar que el terminal CV01 está ACT/S, es decir, activo y en uso.

 

00- 16.18.33           d net,id=dluee01,scope=all
16.18.33 STC02003  IST097I DISPLAY ACCEPTED
16.18.33 STC02003  IST075I NAME = DLUEE01, TYPE = SW SNA MAJ NODE
IST486I STATUS= ACTIV, DESIRED STATE= ACTIV
IST1656I VTAMTOPO = REPORT, NODE REPORTED - YES
IST084I NETWORK RESOURCES:
IST089I CTLEE01  TYPE = PU_T2            , ACTIV
IST089I CV01     TYPE = LOGICAL UNIT     , ACT/S
IST089I CV02     TYPE = LOGICAL UNIT     , ACTIV
IST089I CV03     TYPE = LOGICAL UNIT     , ACTIV
IST089I CV04     TYPE = LOGICAL UNIT     , ACTIV
IST314I END

Y, si abrimos otra sesión 5250 al AS/400, podremos ver como nuestro usuario está usando el TERMINAL01.

ee9-1024x808

Fig. 9: Terminal SNA 3270 en uso por QSECOFR

Pues esto es todo. A partir de aquí, se abre un mundo lleno de posibilidades con el SNA bajo IP, de modo que ahora os toca a vosotros experimentarlas.

El documento en PDF para que se vea mejor, podeis descargarlo desde aqui: Enterprise Extender

 

 

About Urtzi Larrieta

Director de Proyectos de entornos Mainframe, AIX y AS/400, llevo mas de 10 años trabajando para el sector servicios y banca, así como proyectos de sistemas, renovación tecnológica, estrategias de backup, y consultoría de sistemas.