This follows on from Getting TCPIP on my Linux machine to talk to z/OS ADCD running on ZPDT on my Linux machine. It shows the moving parts.
There are lot of bits of configuration which have to be mutually consistent, and some bits do not work as I expected.
There are several sections in this blog post
- The different parts
- More complex example – Using Link and Device statements
- More complex example – Using an Interface statement
- More complex example – Using an Interface statement and different IP address ranges
- Lessons learned
The different parts
The Linux devmap
In Linux the devmap has
[manager] # tap0 define network adapter (OSA) for communication with Linux name awsosa 0022 --path=A0 --pathtype=OSD --tunnel_intf=y --tunnel_ip=172.26.1.1 device 400 osa osa device 401 osa osa device 402 osa osa
The key information is
- It uses z/OS path A0.
- It is an OSA with QDIO (OSD).
- It uses the tunnelling interface.
- The IP address is 172.26.1.1. This is the IP address of the Linux end of the tunnel.
- There are 3 z/OS devices with address 0400, 0401, 0402.
- The devices are OSAs.
- The control unit they are connected to is an OSA. ( A 3279 colour display would have device 3279, control unit 3274).
In ADCD.Z25A.VTAMLST(OSATRL2) is
OSATRL1 VBUILD TYPE=TRL OSATRL1E TRLE LNCTL=MPC,READ=(0400),WRITE=(0401),DATAPATH=(0402), X PORTNAME=PORTA, X MPCLEVEL=QDIO OSATRL2E TRLE LNCTL=MPC,READ=(0404),WRITE=(0405),DATAPATH=(0406), X PORTNAME=PORTB, X MPCLEVEL=QDIO
This defines a Transport Resource List(TRL)
- OSATRL1E is a name which can be used in commands.
- TRLE is a Transport Resource List Entry
- It uses MultiPathChannel links(MPC) (more than one device)
- It uses multiple device addresses 0400,0401,0402
- The Open Systems Adapter(OSA) port name is PORTA
- MPCLEVEL=QDIO Indicates that the Queued Direct I/O interface is used for an OSA-Express feature.
You can use commands like
- D NET,TRL
- D NET,ID=OSATRL1
- D NET,ID=OSATRL2E,E
Example output from D NET,IDA=OSATRL1E
DISPLAY ACCEPTED NAME = OSATRL1E, TYPE = TRLE 558 STATUS= ACTIV, DESIRED STATE= ACTIV TYPE = LEASED , CONTROL = MPC , HPDT = YES TRL MAJOR NODE = OSATRL2 MPCLEVEL = QDIO MPCUSAGE = SHARE PORTNAME = PORTA LINKNUM = 0 OSA CODE LEVEL = 7617 CHPID TYPE = OSD CHPID = A0 PNETID = **NA** WRITE DEV = 0401 STATUS = ACTIVE STATE = ONLINE READ DEV = 0400 STATUS = ACTIVE STATE = ONLINE DATA DEV = 0402 STATUS = ACTIVE STATE = N/A
Key information is
- TYPE = TRLE
- STATUS= ACTIV
- PORTNAME = PORTA
- CHPID = A0
- There are three devices 0401, 0400, 0402
As this matches the Linux configuration, it has all connected up and become active. It is known to VTAM and TCPIP as PORTA.
Within TCPIP there is a member ADCD.Z25A.TCPPARMS(ZPDTDEV1) with
DEVICE PORTA MPCIPA LINK ETH1 IPAQENET PORTA HOME &HOMEIPADDRESS1 ETH1 BEGINRoutes ; Destination SubnetMask FirstHop LinkName Size ROUTE 9.114.209.0 255.255.255.0 = ETH1 MTU 1492 ; Destination First Hop LinkName Size ROUTE DEFAULT &DEFAULTROUTEADDR ETH1 MTU 1492 ENDRoutes START PORTA
The key information is
- Device PORTA – matches the VTAM TLRE definition.
- There is a link ETH1 associated with PORTA.
- When anyone uses this device-> link, use the Home address &HOMEIPADDRESS1. The z/OS symbol &HOMEIPADDRESS1 is “172.26.1.2”, so this value is used.
- If TCPIP does not know where to send a packet, it sends it to &DEFAULTROUTEADDR down ETH1 link. (&DEFAULTROUTEADDR. = “172.26.1.1”)
- The “172.26.1.1” matches the –tunnel_ip=172.26.1.1 in the Linux definition.
More complex example – using Link and Device statements
Background information
A link has two ends, each end defines its IP address. For example
- for the Linux for the DEVMAP file –tunnel_ip=172.26.1.6 defines the Linux as having IP address 172.26.1.6.
- for z/OS the HOME 172.26.1.9 ETH2 defines the z/OS as being 172.26.1.9
If you “FTP 172.26.1.9”, and use NETSTAT CONN, it gives a connection 172.26.1.9..21 and 172.26.1.6..53526 , so you can see the IP addresses (and ports) of the two ends of the connection. Note: Port 21 is the well known port for FTP.
The definitions
Devmap
The devmap definitions below, create a two connections between Linux and z/OS.
[manager] # tap0 define network adapter (OSA) for communication with Linux QDIO #defaults to 10.1.1.1 name awsosa 0022 --path=A0 --pathtype=OSD --tunnel_intf=y mode device 400 osa osa device 401 osa osa device 402 osa osa [manager] # tap1 define network adapter (OSA) for communication with Linux QDIO name awsosa 0009 --path=A1 --pathtype=OSD --tunnel_intf=y --tunnel_ip=172.26.1.6 device 404 osa osa device 405 osa osa device 406 osa osa
The VTAM TRL definition
OSATRL1 VBUILD TYPE=TRL OSATRL1E TRLE LNCTL=MPC,READ=(0400),WRITE=(0401),DATAPATH=(0402), X PORTNAME=PORTA, X MPCLEVEL=QDIO OSATRL2E TRLE LNCTL=MPC,READ=(0404),WRITE=(0405),DATAPATH=(0406), X PORTNAME=PORTB, X MPCLEVEL=QDIO
The TCPIP definition in USER.Z25A.TCPPARMS(ZPDTDEV1)
DEVICE PORTB MPCIPA LINK ETH2 IPAQENET PORTB HOME 172.26.1.9 ETH2 DEVICE PORTA MPCIPA LINK ETH1 IPAQENET PORTA HOME 10.1.1.2 ETH1 BEGINRoutes ; Destination SubnetMask FirstHop LinkName Size ROUTE 10.1.1.0 255.255.255.0 = ETH1 MTU 1500 ROUTE 172.26.1.0 255.255.255.0 = ETH2 MTU 1492 ROUTE DEFAULT 10.1.1.1 ETH1 MTU 1492 ENDRoutes START PORTA START PORTB
I found that sometimes TCPIP does not 100% accept an update, and the device continues to point to old definitions.
I used the operator commands
v tcpip,,STOP,PORTA
v tcpip,,STOP,PORTB
v tcpip,,obey,USER.Z25A.TCPPARMS(ZPDTDEV1)
to activate the change.
With this I could ping and FTP to 10.1.1.2 and 127.26.1.9 (the values in the HOME)
TSO netstat home gave
MVS TCP/IP NETSTAT CS V2R5 TCPIP Name: TCPIP Home address list: Address Link Flg ------- ---- --- 172.26.1.9 ETH2 P 10.1.1.2 ETH1 172.26.1.20 EZASAMEMVS 127.0.0.1 LOOPBACK Address Interface Flg ------- --------- --- 172.26.1.20 EZAZCX
and TSO NETSTAT ROUTE gave
Destination Gateway Flags Refcnt Interface ----------- ------- ----- ------ --------- Default 10.1.1.1 UGS 0000000000 ETH1 10.1.1.0/24 0.0.0.0 US 0000000000 ETH1 10.1.1.2/32 0.0.0.0 UH 0000000000 ETH1 127.0.0.1/32 0.0.0.0 UH 0000000000 LOOPBACK 172.26.1.0/24 0.0.0.0 US 0000000000 ETH2 172.26.1.9/32 0.0.0.0 UH 0000000000 ETH2 172.26.1.20/32 0.0.0.0 H 0000000000 EZAZCX 172.26.1.20/32 0.0.0.0 H 0000000000 EZASAMEMVS
Where the flags are
- UGS – The route is Up, uses a Gateway, is a Static route
- US -The route is Up, is a Static route
- US
- UH – The route is Up, is a route to a Host (rather than a gateway)
- H – is a route to a Host (rather than a gateway) It does not have “U” so is not up.
More complex example – Using an Interface statement
The definitions above used
DEVICE PORTB MPCIPA LINK ETH2 IPAQENET PORTB HOME 172.26.1.9 ETH2
You can also use the newer interface definitions which combine these
INTERFACE IFPORTCP DELETE INTERFACE IFPORTCP DEFINE IPAQENET CHPIDTYPE OSD PORTNAME PORTCP IPADDR 172.25.1.1 START IFPORTCP
I activated this by V TCPIP,,OBEYFILE,USER.Z25A.TCPPARMS(IFACE)
This still needs a TRLE, such as
OSATRL3 VBUILD TYPE=TRL OSATRL3E TRLE LNCTL=MPC,READ=(0408),WRITE=(0409),DATAPATH=(040A), X PORTNAME=PORTCP, X MPCLEVEL=QDIO
Connected by the PORTNAME=PORTCP
More complex example – Using an Interface statement and different IP address ranges
I change the address of the interface
INTERFACE IFPORTCP DELETE INTERFACE IFPORTCP DEFINE IPAQENET CHPIDTYPE OSD PORTNAME PORTCP IPADDR 172.27.1.1 START IFPORTCP
I activated this by
- v tcpip,,stop,IFPORTCP
- V TCPIP,,OBEYFILE,USER.Z25A.TCPPARMS(IFACE)
- v tcpip,,start,IFPORTCP
TSO NETSTAT HOME now says
IntfName: IFPORTCP Address: 172.27.1.1 Flags:
Tell Linux of the new address
To use the new IP address, you need to tell Linux where to send the requests to.
sudo ip route add 172.27.1.0/24 via 172.25.1.6
This says that to get to the 172.27… you need to go via 172.25.1.6, which has been defined as
[manager] # tap2 define network adapter (OSA) for communication with Linux name awsosa 0019 --path=A2 --pathtype=OSD --tunnel_intf=y --tunnel_ip=172.25.1.6 # QDIO mode device 408 osa osa device 409 osa osa device 40a osa osa
z/OS needs to know how to get back from z/OS. In the routes you need
BEGINRoutes ; Destination SubnetMask FirstHop LinkName Size ROUTE 172.25.1.0 255.255.255.0 = IFPORTCP MTU 1492 ROUTE DEFAULT 172.25.1.6 IFPORTCP MTU 1492 ENDRoutesd
Which says anything for 172.25.1.* send down link/interface IFPORTCP.
If no routes match – send it to 172.25.1.6.
Lessons learned
Below are some of the lessons I learned in writing this blog post. I hope they will be useful to other people. They will be useful to me when I come to use this topic and find it does not work!
Defining Linux tunnels
On Linux the tunnels are defined by the zPDT code, you do not have to define them. If you have defined a tunnel, the zPDT will override the definitions.
Activating resources on z/OS
I created my z/OS TCP, and activated them, but they did not work.
If you define a resource which already exists, and is active, parts of the old definition is still used. I had to stop the PORT using V TCPIP,,STOP,PORTA before I could successfully activate the resource.
When I did not stop the PORT I got
PROCESSING COMMAND: VARY TCPIP,,OBEY,USER.Z25A.TCPPARMS(ZPDTDEV1) OPENED OBEYFILE FILE 'USER.Z25A.TCPPARMS(ZPDTDEV1)' PROFILE PROCESSING BEGINNING FOR 'USER.Z25A.TCPPARMS(ZPDTDEV1)' DEVICE NAME PORTA ON LINE 5 IS ALREADY DEFINED LINK NAME ETH1 ON LINE 6 IS ALREADY DEFINED DEVICE PORTA ON LINE 15 IS ALREADY STARTED PROFILE PROCESSING COMPLETE FOR FILE 'USER.Z25A.TCPPARMS(ZPDTDEV1)' COMMAND VARY OBEY COMPLETED SUCCESSFULLY INITIALIZATION COMPLETE FOR DEVICE PORTB
When I put a STOP PORTA in the OBEY file, I got
EZZ4308I ERROR: CODE=8010302D DURING ACTIVATION OF DEVICE PORTB. DIAGNOSTIC CODE: 02 EZD2028I DEVICE PORTB ACTIVATION FAILED - NO DATAPATH DEVICE ADDRESSES ARE AVAILABLE
When I repeated it – it worked. It looks like a timing issue. So you have to do it in two steps. The meaning of 302D is A ULP cannot use a QDIO device because there are no datapath channel addresses available.
VTAMTRL
When the system was IPLED the VTAM command D NET,TRL gave
DISPLAY TYPE = TRL --------------------------------------------------------- TRL MAJOR NODE = OSATRL2 TRLE = OSATRL1E STATUS = ACTIV CONTROL = MPC TRLE = OSATRL2E STATUS = NEVAC CONTROL = MPC 2 TRLE(S) DISPLAYED
The TRLE entry will only become active when the port is active. Defining it and starting it gave me TRLE = OSATRL2E STATUS = ACTIV CONTROL = MPC
Hello Colin thank you for your post, are really helpful for a z/OS System Programmer that do not know much on Ubuntu WSL Windows.
However, I have a problem, do you think can help me, because you run Linux base, my company do not allow to use Linux base I just receive a Windows 10, upgrade to 22H2 and activate WSL2 feature, install Ubuntu install zD&T download ADCD and I have License be working so I can IPL zD&T IPL z/VM 7.1 and the z/OS 2.5 and using x3270 I can work however I want to use z/OSMF for training and Windows and the browser in the same machine did not access my z/OS That is my challenge where need to touch to make this connection happen
thank you for any clue
Regards
Giovanni
LikeLike
Hi Giovanni,
I do not have access to a z/VM system to play with, but I would expect it to work as follows.
Under VM use the CP ATTACH command the OSA adapter device to your second level machines at the appropriate second level device.
I have an OSA defined as 400- 402 on my z/OS machine ( from the devmap). On my z/OS console
D U,,,400,4
gives
IEE457I 17.43.50 UNIT STATUS 562
UNIT TYPE STATUS VOLSER VOLSTATE SS
0400 OSA A-BSY 0
0401 OSA A 0
0402 OSA A-BSY 0
0403 OSA O 0
try that and see how far you get
regards
Colin
LikeLike
Hi Colin
Thank you
Now we have a group in the company and we are putting together ideas, z/VM I have and in the past connect, my current issue was Windows, that I don’t know nothing in the past use zPDT with SUSE direct, now we need to use Windows and WSL2 so another layer
In the group they are using also only z/OS and works with port 3270 and they have the Firewall stuff to open in Windows and let access z/OS
They give me and I am working to use it and I will teach z/VM because to work better a sysplex on zD&T need to have z/VM with TCPIP, probably next week we are done and I will teach the other group with z/VM that I have the script to add the TCPIP and IPL using port 3270 after that the z/OS under z/VM we can use with port 23 instead using 3270 we just need to open we will next week what happen
Your documents continuing good source of understanding thank you
Giovanni
LikeLike