Frank > "EZY2640I Using 'PROD.FTP.DATA' for local site configuration parameters."
The search order for the file FTP DATA is given in Table 3, "TCP/IP configuration data sets" in a section of the same name under "Configuration data set naming conventions" under "Understanding search orders of configuration information" in Chapter 2, "IP configuration overview" of the z/OS Communications Server IP Configuration Guide as follows: <quote> Name (search order) FTP.DATA 1. -f command line parameter (FTP client only) 2. The MVS data set or z/OS UNIX file specified on the SYSFTPD DD statement in the FTP server started procedure 3. userid/jobname.FTP.DATA 4. /etc/ftp.data 5. SYS1.TCPPARMS(FTPDATA) 6. hlq.FTP.DATA Copied from SEZAINST(FTCDATA) for the client and (FTPSDATA) for the server Usage Overrides default FTP client and server parameters for the FTP server. For more information about the hlq, jobname, or userid values, see Chapter 11, “Transferring files using FTP,” on page 661. </quote> I have had to disentangle the table format to some extent. I also suspect that the "(FTPSDATA) for the server" should be "SEZAINST (FTPSDATA) for the server". You need to acquaint yourself with the whole "Understanding search orders of configuration information" and some following sections in Chapter 2, "IP configuration overview", if not the whole of the chapter. I suspect that nearly all of your questions are answered there. > Well, barely customised. The "resolver" is considered customised if you change the SYS1.PARMLIB BPXPRMxx RESOLVER_PROC statement from RESOLVER_PROC(DEFAULT) to RESOLVER_PROC(something) where "something" is typically RESOLVER. You will then necessarily create a RESOLVER procedure and typically add a SETUP DD- statement which needs to refer to something. Having gone to this much trouble, it is then usual to consider how one might benefit from all this toil and sweat! > ... and the IBM defaults are assumed to be right until they are proven wrong; right? This is such an interesting topic I have created a separate thread in order to attract comments from at least the usual suspects. >> Note that the DATASETPREFIX value is not used as the high-level qualifier of the data set name used as the last step in the search order for the PROFILE.TCPIP and TCPIP.DATA configuration files. > That last bit is certainly of interest. The what does this mean: > <quote> > PROFILE.TCPIP search order > The search order for accessing PROFILE.TCPIP information is as follows. The first file found in the search order is used. > 1. //PROFILE DD statement > 2. job_name.node_name.TCPIP > 3. hlq.node_name.TCPIP > 4. job_name.PROFILE.TCPIP > 5. hlq.PROFILE.TCPIP > </quote> > In this case where does HLQ come from? I thought this was a "good question" and it sort-of is. Our dear friends the manual authors have made a mess yet again. Having spent quite a while checking this out, I now think we have a failure fully to update the manuals when it was decided to "hardcode" that last step in the search order. Note that, if you have decided on using the PROFILE DD-statement all of this complicated discussion regarding "hlq" and "node-name" is moot and is, frankly, best left buried in the detritus of past and gratefully long-forgotten manifestations of "TCP/IP for MVS"/"the z/OS Communications Server IP component". The PROFILE data set search order is defined twice in the Configurations Guide and twice in the Configuration Reference. Although not at all democratic, since it is a minority of three to one, I believe the most correct version of the four is the following taken from "PROFILE.TCPIP search order" in "Configuration files for the TCP/IP stack", just after the famous Table 3 which contains the version you quoted in fact, in Chapter 2, "IP configuration overview" in the Configuration Guide: <quote> - //PROFILE DD DSN=aaa.bbb.ccc(anyname) - jobname.nodename.TCPIP - hlq.nodename.TCPIP - jobname.PROFILE.TCPIP - TCPIP.PROFILE.TCPIP </quote> The version you quoted can be found in the famous Table 3 in the Configuration Guide and twice in the Configuration Reference. I suspect, as usual, that the manual authors just forgot - a change of "shift" with no collective memory - that there was more than one version of this "search order" provided in the manual. In the beginning - or as far back as I can vaguely remember - TCP/IP for MVS was "hardcoded" with an "hlq" of TCPIP. There was an SMP USERMOD-style job that could be run in order to change this. The circumstances of my teaching systems was that they were copies of a production system that was post-SMP and so I could not run this SMP job. Instead I set up a massive SUPERZAP job which changed the upper teens number of instances where I was able to identify "TCPIP" in the load modules - just to show that the "hlq" could be changed. Then along came DATASETPREFIX and the "hlq" problem was largely solved. Probably at about the same time to the very many dynamically allocated data sets was added the option to use an MVS-style DD-statement rather than a dynamic allocation in a pale copy of the usual VM-style allocation of data sets. I was so enthusiastic about DD-statements - as I believe the "TCP/IP for MVS" developers were - that I largely forgot about the nightmares of dynamic allocation. There were only a few remaining instances of which HOSTS.LOCAL etc. was the worst. Checking with my notes - from 1995 - I dismiss the PROFILE data set allocation as follows: <quote> The TCP/IP main procedure allocates the profile parameters by means of the DD-statement PROFILE. Previously this was a data set allocated dynamically with the typical name TCPIP.PROFILE.TCPIP. Many and complex variations on this were possible. </quote> Having checked my notes, you may as well see what I was teaching about this topic 15 years ago: <quote> Data Set Allocation ------------------- -> Recommended from TCP/IP V3 - Main Procedure Profile Parameters -- allocate with DD-statement, PROFILE previously, typically, TCPIP.PROFILE.TCPIP - Main and Client Procedure Common Parameters -- allocate with DD-statement, SYSTCPD previously, typically, TCPIP.TCPIP.DATA -> identifies highest level qualifier, hlq, for data sets allocated dynamically - Client Procedure Parameters -- allocate with DD-statement, e.g. SYSFTPD for FTP server procedure previously, e.g. TCPIP.FTP.DATA - Data Sets Allocated Dynamically -- translation tables -- socket programming "look-up" tables -- local customized name resolution tables -- SNMP --- MIB data set - manager --- agent customized data sets </quote> Of the 'socket programming "look-up" tables', that is, PROTOcol and SERVICES, SERVICES can now be allocated with a DD-statement. So getting back to the PROFILE data set search order, for whatever reason the "hlq" for the last option has reverted to "hardcoded" TCPIP at some time - before z/OS V1R1, as far back as I can easily go. However I'm not at all sure about the third one. Is that really "hlq" and, if so, is it obtained from the DATASETPREFIX parameter of the TCPIP.DATA data set somehow associated with the Communications Server IP main address space? Incidentally note how curious and disingenuous the following actually is: <quote> For most configuration files, the DATASETPREFIX value is used as the high- level qualifier of the data set name in the last step in the search order. Note that the DATASETPREFIX value is not used as the high-level qualifier of the data set name used as the last step in the search order for the PROFILE.TCPIP and TCPIP.DATA configuration files. </quote> True the PROFILE data set used at one time in its tortured life to use the "hlq" as the highest level qualifier "in the last step of the search order". But, but, but - as you just told me, mate - the DATASETPREFIX statement provides the "hlq" and the DATASETPREFIX statement comes from the TCPIP.DATA data set - so, tell me, which comes first, the chicken or the egg ... In other words, forcing "TCPIP" as the last step in the search order for the PROFILE data set was optional but forcing "TCPIP" as the last step in the search order for the TCPIP.DATA data set was unavoidable in the sense that it certainly couldn't be "hlq"! > For that matter, where does NODE_NAME come from? nodename or node_name is also a bit complicated although relatively clear. It's not obligatory to use VMCF/TNF in the z/OS Communications Server IP component these days - as it used to be for "TCP/IP for MVS" - and so it's not obligatory to provide a nodename/node_name value. Thus those entries in the PROFILE name search which reply on nodename/node_name cannot apply. On the other hand, it seems you've implemented everything anyhow so I guess you have implemented VMCF/TNF. If so you should, for maximum flexibility, have set up the "replaceable" flavour. See "Step 3: Configure VMCF and TNF" in "Required steps before starting TCP/IP" in Chapter 2, "IP configuration overview" in the z/OS Communications Server IP Configuration Guide. As far as I can tell from the snippets of documentation, you need VMCF/TNF in order to run the SMTP and LPD servers and the TSO TELNET, HOMETEST, TESTSITE, and LPR commands. It's interesting that you do *not* seem to need VMCF/TNF for the MAKESITE command but you do still need VMCF/TNF in order to run the TESTSITE and HOMETEST commands. Note that there is a replacement for the SMTP server called CSSMTP in V1R11. However it is not a "one-for-one" replacement so, if you use SMTP, you may find that you need features of SMTP which are not present in CSSMTP. So, if you have implemented VMCF/TNF, you will know whence comes nodename. > I wonder if this answers my question above as to where HLQ comes from for TCPIP.PROFILE; hlq is perhaps the userID of the job...? Be aware that, wherever "jobname" is mentioned, you should use the explanation to be found under "jobname" in the description of the PORT statement in the Communications Server IP Configuration Reference manual[1]: <quote> The following list explains how to determine the jobname value given the environment in which the application is run: - Applications run from batch use the batch job name. - Applications started from the MVS operator console use the started procedure name as the job name. - Applications run from a TSO user ID use the TSO user ID as the job name. - Applications run from the z/OS shell normally have a job name that is the logged on user ID plus a one-character suffix. - Authorized users can run applications from the z/OS shell and use the _BPX_JOBNAME environment variable to set the job name. In this case, the value specified for the environment variable is the job name. - Use the name of the started JCL procedure for the UNIX System Services kernel address space to enable applications (except for applications using the Pascal API) to bind to the port. This name is typically OMVS unless a different name is explicitly specified in the STARTUP_PROC parameter of the BPXPRMxx parmlib member. - z/OS UNIX applications started by INETD use the jobname of the INETD server. - Use the name of the VTAM started task for the UDP ports that are to be used for Enterprise Extender (EE) network connections. </quote> It may be useful to keep this explanation handy for whenever "jobname" is mentioned but it's not easy to see what "job" might be intended - especially what there is no "job" in sight! >> Following are some of the data sets that are only dynamically allocated by TCP/IP in a configuration file search order (you cannot specify them with DD statements in JCL): ... > Thanks. Interesting that FTP.DATA is not there, and yet it is affected by the DATASETPREFIX value... FTP.DATA is *not* there because it *can* be specified with a DD statements in JCL, namely SYSFTPD. See my extract above. > Other than this temporary testing issue we have, what is the usual use of a local "host lookup" file? Whatever use you discover you may need in the future. Possibly after some incremental migration of an application between initial testing, assurance and then finally when cutting over to production with the name server known to have the corresponding entry, the local name can be removed. Any time that you need to avoid the treacle-wading of getting the name server administrator to stir his/her stumps. > I don't know of any RPC use. What is something common on z/OS that might use this? Network File System (NFS). Any typically "server" product you use should say prominently whether or not it relies on RPC as some sort of "enabling" layer. > Same question as above. In effect > I don't know of any PROTO use. What is something common on z/OS that might use this? Each and every one of your programs using the socket interface (maybe including the programs using the Pascal interface and, if so, that would mean each and every program using APIs to the Communications Server IP component) potentially - and, if well-written, definitely - needs access to the data set generically named ETC.PROTO. I guess you missed the 'vital for the task of converting the characters "tcp" to 6 and the characters "udp" to 17' in my previous post! The full range of facilities included under the title "resolver" is as follows: - name to address and address to name translation, the resolver subject on which we have been concentrating so far - the translation of service names to service numbers supported by the generically named ETC.SERVICES data set - the translation of protocol names to protocol numbers supported by the generically named ETC.PROTO data set There is a subset of socket calls which rely upon these facilities. Well-written programs never rely on the numbers but always set up the text strings and use the socket calls in order to find out what the number is today. That way you can - should you ever need to - play games with the mapping of the text strings, such as "tcp" and "udp" in the example I used before and map the text strings to other numbers - for whatever reason. Before you ask, I doubt you ever will - but, in case of some catastrophe where IBM is offering all sorts of help with some bug or other, a temporary solution just might involve some fiddling with the generic ETC.SERVICES or ETC.PROTO data set and all will be grateful that the programmer didn't just hardcode the number. For some reason or other, the SERVICES lookup data set *can* use a DD- statement but, for some other reason or other, the PROTOcol lookup data set can't. I think the usual expression at a time like this is "Go figure!". Chris Mason [1] There may be other places with a full explanation but I haven't noticed them. On Sat, 17 Apr 2010 22:01:14 -0600, Frank Swarbrick <[email protected]> wrote: >Thanks for your responses. See imbedded comments. >-- > >Frank Swarbrick >Applications Architect - Mainframe Applications Development >FirstBank Data Corporation - Lakewood, CO USA >P: 303-235-1403 > > >On 4/15/2010 at 9:35 PM, in message ><listserv%[email protected]>, Chris Mason ><[email protected]> wrote: >> Frank >> >>> Kind of a rambling message. >> >> One way to unscramble this to some extent is to separate any discussion of >> the "resolver directives" file, of which one manifestation is the file >> referenced >> by the SYSTCPD DD-statement from discussion of the FTP parameter file. >> They belong in two different camps and, if you happen to use the SYSTCPD >> DD-statement, come together only in the JCL used to initiate your batch FTP >> jobs. > >Yeah, I do realize that. I mentioned it because it is one of those datasets that is affected by the DATASETPREFIX statement. >"EZY2640I Using 'PROD.FTP.DATA' for local site configuration parameters." > > > Having read about your HOSTS.LOCAL stuff, I was shocked to see you >> actually had a customised resolver procedure. But, from what you say, it >> seems your local Homer Simpson is in charge of it! COMMONSEARCH is one of >> the most neuron-free no-brainers there is! > >Well, barely customised. The only difference between what we use and the version in 'TCPIP.SEZAINST(EZBREPRC)' is the SETUP DD: >//SETUP DD DSN=SYS2.PRD1.PARMLIB(RESSETUP),DISP=SHR,FREE=CLOSE >And that was done only to mean the site standard of using a SYS2.&SYSNAME.PARMLIB member. > >> Incidentally, since you are in a purely test environment, there are two >> reasons >> for dropping the DNS from the LOOKUP statement. One is that you definitely >> avoid name to address translations in the name server which I assume would >> always give you production targets. The other is to know for sure - by means >> of lookup failures while testing - what names the jobs you are testing need. > >Hmm, I didn't think of dropping DNS altogether. Sounds like a good idea. > >> I'm not at all clear as to why you bothered to show the file referenced by >> the >> DEFAULTTCPIPDATA statement. As you can see from the trace nothing from it >> is used. It is only when you use the GLOBALTCPIPDATA file that two files can >> be used and parameters merged in order to create the set of parameters >> used - and even then there are restrictions - but LOOKUP isn't one of the >> restricted parameters. > >Not sure either. Maybe to point out that using the SYSTCPD DD totally overrode anything in the DEFAULTTCPIPDATA dataset. Had the system been set up with a GLOBALTCPIPDATA dataset containing everything that is currently in the DEFAULTTCPIPDATA dataset my SYSTCPD dataset would only have needed: >Trace resolver >DatasetPrefix PROD >Lookup local dns >(I didn't really need SortList, though it probably should be in the global >one.) > >>> If we need to have a permanent hosts file in the future I will recommend >> COMMONSEARCH. >> >> In case you are stopped, make sure the gun is licensed! Horse's heads can be >> messy but they have their uses! Have you seen Syriana yet? I saw it on one >> of the Belgian channels a couple of days ago. > >Haha, I doubt I'd be stopped. It was simply installed using the IBM defaults, and the IBM defaults are assumed to be right until they are proven wrong; right? > >>> It's interesting (to me, anyway) to see the result of the resolver trace: >> >> This is another no-brainer when you want to be sure you understand what the >> system is doing for you regarding name resolution. >> >>> I am curious what affect changing DATASETPREFIX in the system TCP.DATA >> file would do. >> >> On the tin we read: >> >> <quote> >> >> Use the DATASETPREFIX statement to set the high-level qualifier for the >> dynamic allocation of data sets in TCP/IP. >> >> </quote> >> >> The key words here are "dynamic allocation". The z/OS Communications Server >> (CS) IP component has a long and distinguished history and can trace its >> ancestry back to the "TCP/IP for VM" product - the descendants of which are >> still among us. Because of the VM DNA, there is/has been a strong tendency >> towards the "dynamic allocation" of files mimicking the way files are >> naturally >> allocated in CMS. The generic name for the "resolver directives" file as >> found >> in the manuals is evidence of this; TCPIP.DATA stared life as TCPIP DATA in >> a >> CMS context. >> >> So, regarding knowing whether or not a filename uses the hlq specified by >> the >> DATASETPREFIX parameter, if it's allocated dynamically, it's a candidate. >> >> This is what one can find under "Dynamic data set allocation", >> "Configuration >> data set naming conventions", "Understanding search orders of configuration >> information" in Chapter 2, "IP configuration overview" in the CS >> Configuration >> Guide: >> >> <quote> >> >> - hlq >> >> TCP/IP is distributed with a default high-level qualifier (HLQ) of TCPIP. To >> override the default HLQ used by dynamic data set allocation, specify the >> DATASETPREFIX statement in the TCPIP.DATA configuration file. For most >> configuration files, the DATASETPREFIX value is used as the high-level >> qualifier >> of the data set name in the last step in the search order. Note that the >> DATASETPREFIX value is not used as the high-level qualifier of the data set >> name used as the last step in the search order for the PROFILE.TCPIP and >> TCPIP.DATA configuration files. > >That last bit is certainly of interest. The what does this mean: ><quote> >PROFILE.TCPIP search order > >The search order for accessing PROFILE.TCPIP information is as follows. The first file found in the search order is used. > > 1. //PROFILE DD statement > 2. job_name.node_name.TCPIP > 3. hlq.node_name.TCPIP > 4. job_name.PROFILE.TCPIP > 5. hlq.PROFILE.TCPIP > </quote> > >In this case where does HLQ come from? For that matter, where does NODE_NAME come from? > >> </quote> >> >>> But I can't find an authoritative list of all of the dataset names that are >> resolved by the TCPIP DATASETPREFIX. >> >> I imagine that the later Table 3, "TCP/IP configuration data sets", >> under "TCP/IP configuration data sets", is intended to be the definitive >> list of >> CS IP configuration files which - when "dynamically allocated" - can use >> the "hlq" value specified by the DATASETPREFIX parameter for the address >> space. >> >> I guess it helps when looking for something that you are sure it must be >> there! >> I know that, when I used to teach TCP/IP for MVS I referred to the - at the >> time - massively reduced version of this table. >> >> However, given your problem - shared by all users of what is now the CS IP >> component and was "TCP/IP for MVS" plagued, one can say, by the VM >> inheritance, this text from later in the "Dynamic data set allocation" >> section >> might interest you as an "I feel your pain and here's what you can do about >> it": >> >> <quote> >> >> Following are some of the data sets that are only dynamically allocated by >> TCP/IP in a configuration file search order (you cannot specify them with DD >> >> statements in JCL): >> >> ETC.PROTO ETC.RPC >> HOSTS.ADDRINFO HOSTS.SITEINFO >> SRVRFTP.TCPCHBIN SRVRFTP.TCPHGBIN >> SRVRFTP.TCPKJBIN SRVRFTP.TCPSCBIN >> SRVRFTP.TCPXLBIN STANDARD.TCPCHBIN >> STANDARD.TCPHGBIN STANDARD.TCPKJBIN >> STANDARD.TCPSCBIN STANDARD.TCPXLBIN >> >> For each of these data sets, the fully qualified name is established by >> using >> one of the following values as the data set HLQ: >> >> - User ID or job name >> - DATASETPREFIX value >> >> </quote> > >Thanks. Interesting that FTP.DATA is not there, and yet it is affected by the DATASETPREFIX value... >I wonder if this answers my question above as to where HLQ comes from for TCPIP.PROFILE; hlq is perhaps the userID of the job...? > >>> Following are some of the data sets that are only dynamically allocated by >> TCP/IP in a configuration file search order (you cannot specify them with DD >> >> statements in JCL): >> >> Doesn't this have the subtext "These are the data sets which are still a >> pain >> where the sun don't shine!"? >> >> So, if you manage to flush out all the other dynamic allocations with DD- >> statements, you can deal with this residue where necessary. >> >> First, I'm assuming the Far Eastern language translate tables are of no >> concern to you. That eliminates most of the files ending in "BIN" (KJ = >> Kanji, >> HG = Hangeul, SC = Simplified Chinese, CH = Traditional Chinese). >> >> I believe you need worry about the TCPXLBIN files *only* if you need >> translation of ASCII to EBCDIC and vice versa which is *not* standard. > >Nah, I have enough trouble with English. :-) > >Seriously, though, I keep worrying that we will run in to an issue with the fact that the default TCPXLBIN uses EBCDIC Code Page 1047 (Open Systems) instead of 037 (or 1140). Our Cobol programs use 037. BUt until we actually have files that have brackets or carets etc. in it I don't see that there will be an appetite for changing from the IBM supplied default. > >> When you manage to make to your colleague in charge of the resolver setup >> file an offer which he or she cannot refuse, you need no longer worry about >> the "HOSTS" files. You'll be using the GLOBALIPNODES or DEFAULTIPNODES >> statements instead. > >Indeed. Don't know if that day will come. Other than this temporary testing issue we have, what is the usual use of a local "host lookup" file? > >> If you use "Remote Procedure Call" (RPC) I guess you're stuck with ETC.RPC. > >I don't know of any RPC use. What is something common on z/OS that might use this? > >> That just leaves ETC.PROTO, vital for the task of converting the >> characters "tcp" to 6 and the characters "udp" to 17 and maybe not a great >> deal more, but I expect having to set up just this one file won't give you >> sleepless nights - unlike some of the measures you could be taking with that >> colleague![1] > >Same question as above. > >> Chris Mason > >Thanks again, Chris! > >Frank ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html

