1994 HP1000 Guru Column Q: I have replaced my SCSI DAT with a 7980S. I find that I cannot get the 7980S to write at 1600 BPI, it seems to default to 6250. I have tried: CN,lu,15b,1600 to no avail. How can I write at 1600? A: Although the 7980S uses the same SCSI driver, DDQ24, as a DAT tape and the two drives can be used interchangeably, there is ONE significant difference. For a SCSI DAT tape, driver parameter 2 is set to 0. For a 7980S, driver parameter 2 is set to either 1600 or 6250 to determine the density to write at. In order to change DP:2 to 1600 or 6250, it MUST BE set to one of these values in the generation answer file. This is the purpose of the M7980 model number in the generation. M7980 sets DP:2 to 6250. If DP:2 is set to 0, the CN 15B control request will NOT change the value. The driver was written to assume that DP:2:0 means a DAT tape is being used. Conversely, if DP:2 is set to 1600 or 6250, it CANNOT be changed back to 0. The driver will reject any attempt to change DP:2 to 0 with a CN 15B command. Bottom line is to use M7980 in the gen. If you are planning on swapping between DAT and 7980S on the same LU, you will have to leave DP:2 = 0 and you will not be able to write at 1600 without configuring the 7980 manually. Q. When I try to run FST on my RTE-6 system, I get the following message: Will not fit in partition I have a 126 page SHEMA partition named FST1 and I have several 32 page subpartitions of another SHEMA Mother partition available. I do not have a partition of 32 pages that is not defined as a SHEMA partition. When I attempt to assign FST to one of these 32 page partitions, I get: ILLEGAL PARTITION What can I do? A. As you have seen, you cannot assign a program to a subpartition of a BG SHEMA mother partition. This is how FST keeps from being assigned to it's own FST1 SHEMA partition also. You will need a partition or a subpartition of a non-SHEMA mother partition of 32 pages for FST (or any other program of 32 pages) to run in. If you do not have a partition of this description you will need to reconfigure memory. You can either do this in the generation answer file or with a Memory Reconfiguration on bootup. Refer to the RTE-6 System Manager Manual Chapter 10 for more information on Memory Reconfiguration. Q. I have just upgraded to 6.0 RTE-A. I find that users with a capability of 10 can no longer EDIT files, even in their own directory. This worked at 5270. What changed? A. The problem is that D.RTR is now checking security levels for all FMP routines. If one looks at page D-4 of the System Manager Manual, one can see why a user of capability 10 CANNOT edit a file. User 10 can run EDIT, but EDIT needs to create a scratch file. According to the capability of CREATE, one needs a capability of at least 11 or 13 to create a file that is not in the current WD. And a user 10 CANNOT set his working directory, so is stuck with his logon directory. User of 11 can create a file on the same LU as his WD and a user of 13 can create a file on any LU (/SCRATCH is on another LU). Confusing? Welcome to SECURITY/1000. But all of this is open to modification. The solution here is to either make the user a capability 13, or modify the SECURITY table for CREATE,PURGE,UNPRG,CRDIR and RENAME to 10. Q. I seem to recall that for RTE-6, LUPRN had a look up table that could be used to create a customized output, especially for non-standard drivers. Does the IO program for RTE-A have any capability similar to this? A. Yes, it is possible to customize the IO listing to reflect the actual devices connected to your system. For instance, it could describe a tape LU as a "7980", instead of "streaming tape". This can be done using a file called devices in the /SYSTEM directory. Here are sample IO outputs: Runstring: IO Runstring: IO,-d ---------------------------------------------------------------------- lu device name status | lu device name status | 1 HP125 console idle | 1 terminal idle 2 RamDisk 4K pages idle | 2 CS/80 disk idle 3 RamDisk (not mounted) idle | 3 CS/80 disk idle 4 not assigned | 4 not assigned 5 HPIB DAT idle | 5 streaming tape drive idle 6 2932A Not connected idle | 6 printer idle 7 7974A Not connected idle | 7 streaming tape drive idle 8 7970E idle | 8 tape drive idle 9 9144 Not connected idle | 9 CS/80 tape drive idle Note the descriptions on the left side. By default when IO is run with no options, it will look for a file called /SYSTEM/DEVICES for system specific descriptions. You create /SYSTEM/DEVICES for your system. The right side is the 'standard' IO listing, using generic descriptions names. (-d option) The easiest way to create the /SYSTEM/DEVICES file is use IO and redirect the output to a file as follows: CI> IO,,,/SYSTEM/DEVICES (Warning: This will overwrite any existing /SYSTEM/DEVICES file Now edit the file to reflect your system's particular hardware. Here is a sample of the /SYSTEM/DEVICES file used above: * LU Description 1 x HP125 console 2 x RamDisk 4K pages 3 x RamDisk (not MC'ed) 5 x HPIB DAT 6 x 2932A Not connected 7 x 7974A Not connected 8 x 7970E 9 x 9144 Not connected Note that the second position is not currently used. The 'x' above is simply a place holder. All information beyond the second place is used, including spaces. For more information, see the RTE-A Users Manual Chapter 6. Q. I find that when using *DOSNP on my RTE-6 system to create the new snap file, not all of the libraries I specify are included in it. In fact, it looks like the last library file name I specify is truncated. Why? Q. The problem is *DOSNP is a FMGR command file, and FMGR has a 72 character maximum command line length. So if you are trying to include multiple libraries in the snap file, and this causes the LINDX runstring to exceed 72 characters, FMGR will truncate the runstring. One workaround is use CI to run LINDX. If you DO NOT have CI already installed then you can use a list file as a parameter to LINDX. This list file will contain a list of libraries to be included in the snap file. For example: To index an RTE-6 system: LINDX, SYSTEM snapFile [library ...] [+NL] -- or -- LINDX, SYSTEM snapFile [+LI libList] [+NL] +LI libList Read from file/LU "libList" for list of libraries +NL No list of entry points will be produced The liblist feature was added at 6.0. Q. Is there any new firmware for my A Series computer that I should be aware of? Particularly the A990, D Mux, SCSI and LAN. A. Here's the latest: Part Number ----------- A990 Revision 12 Eprom: 12990-80113 12016 921030.0006 firmware: 12106-80111 12040D Revision 5.22 firmware 12040-67806 (contains 5181-8682) 12076 LAN firmware 12076 Option 002 (gets you 12076-81007 & 8) These are the latest. Now, what do they buy you? Well, the A990 has lots of fixes and if you have the 6.1 Communicator, Chapter 3 has a great history of all of them. Also, 6.1 RTE-A includes a rev12 microcode file to allow downloading the rev12 microcode. The SCSI firmware has been out since January of 1993, and includes support for newer peripherals, like the C1701C MO drive. Plus some timing fixes. The 5.22 MUX firmware fixes a TELNET problem with XON/XOFF and powerfail recovery at low baud rates (1200 and 300). The 12076 LAN firmware has been modified to handle ARP packets that are not for the IP address of the host. Previously, these packets were handled by the LAN driver and INPRO. Using the new firmware, the card and driver will toss the unwanted packets. A minor improvement in performance is gained, but probably not perceptible. Q: I am trying to update my 5.27 RTE-A system to 6.0, using the insructions in Appendix B of the Communicator. I am getting undefs during linking of LINK60. What gives? A: A file was accidentally left out of the 6.1 distribution tape. This file, link.r000, was only supplied at 6.0 in order to load LINK on a 5.27 or earlier system. Unfortunately, it didn't make it onto the 6.1 tape. If you have the 6.0 RTE_A tape, you can simply use that copy of link.r000. Otherwise, you will need to call the Response Center to get a copy of this file. Q. Speaking of 6.1, I understand there are some problems with NS1000. Tell us more. A. Two of the more serious problems appear on systems with multiple LAN cards, or that have two separate networks configured via LAN and/or RTR (HDLC) links. With multiple LAN cards, System Available Memory (SAM) can become corrupted if the cards receive data simultaneously. This has been fixed in the LAN driver, %ID*67 With multiple networks, INPRO can abort with a CS06, stack overflow error, when receiving data from both networks simultaneously. Patches for these problems, plus others, are available from the Response Center. Request RTE patch number RTE711. Q: I ran FORMC to verify a bad track on my CS80 disk. FORMC reported a bad track, but when I then tried to spare that bad track, FORMC reported the following NO BAD BLOCKS SPARING NOT PERFORMED If I had a bad track, why didn't FORMC spare it when I told it to? A. RTE disk drivers have historically reported TRACK errors. This worked great for early disks like the 13037 MAC drives, since the physical tracks mapped very easily into RTE logical tracks, and they also spared entire tracks. Newer disks, like the CS80 family, are a so called "block" addressed disk. RTE still talks to logical tracks and sectors, the disk driver then translates this three vector address into the appropriate block address. The physical configuration of the disk, the number of heads, the number of surfaces, the number of sectors per track, are all transparent to RTE. Whereas before, you had to make sure you genned the disc to match the physical disk characteristics, with CS80 disks, the only concern is that you not allocate more blocks than are available. The CS80 driver takes care of converting the track/sector to the block address. Now about sparing. CS80 drives typically spares sectors, not tracks. The system reports bad TRACKS. In order for FORMC to fix the bad TRACK, it needs to determine what SECTOR on the track is bad. Its does this by performing a Write-Then-Read (WTR) test on the suspect track. Before FORMC performs the test, it will read the suspect track, and store the data in FORMC program space. Next, FORMC will execute the WTR test, looking for bad sectors. If the WTR test executes success- fully then no sparing will be performed, because the track was able to be rewritten successfully. Lastly, FORMC will restore the data on the track. The message "NO BAD BLOCKS" means just that. FORMC could not verify a hard error on the track. But it does not mean that it didn't actually do anything. The fact that it tested the track successfully with the WTR test indicates that it was able to read and write successfully to all blocks on the track. For most soft data errors, this should suffice. If you are still unsure of the integrity of the disk, then you will need to use the CS80 EXER program and perform more stringent tests. Q: We have a utility program that reboots another HP1000 over the LAN. (This was written many years ago before LANVCP came along). It has stopped working at RTE-A 6.1, but only when NS/1000 and a third party network product called CityNet is installed. The error occurs when we try to post our class number (as the VCP downloadserver) to Program Code 9 (PC9) via the cntrl 30B call to the LAN driver. The control call returns driver error 5. A: My guess is that you are running out of space to store the class number and program code pair in the IFT extension area. For 6.1, 47 words of the IFT extension are used for driver variables. The remainder is dynamically allocated for storing DSAPs, Program Codes, or Ethernet Types with the associated class numbers and for multicast addresses. The new default extension size of 73 words leaves 26 words for the class table and multicast addresses. This number was chosen to accomodate Node Manager, NS-ARPA, and LANVCP software with no leftover space. Node Manager uses 3 class table entries (PCs 3, 5 and DSAP F8). LANVCP uses 2 class table entries (PCs 1, 9) NS-ARPA uses 5 class table entries (PC 11, DSAPs 6, FC, and Ethernet types 2048, 2054) and 2 multicast addresses. If this is your problem, the fix is to regenerate the system and allocate more space for ID*67's IFT extension. From the 6.1 Communicator: 4.5.6 LAN Driver Enhancements (ID*67) The system table space used by the LAN driver has been significantly reduced at 6.1. Performance has also increased. The improvements were achieved by changing the way incoming packets are processed: o Only one LU and DVT are now required for each LAN card. The LU can be odd or even. Previously, two consecutive LUs were used and the first had to be an even numbered LU. o The default IFT extension size has been reduced from 204 words to 73 words. o The READR program (RPed as READ1 and READ2) is no longer used by the LAN driver or Node Manager software. o The file %GEN67 which contained default driver parameters is no longer used. 4.5.6.1 LAN Direct Driver Access For those who use LAN Direct Driver Access calls to the LAN driver (ID*67), the following additions were made at 6.1: A new subfunction (03b) allows the ability to write up to four packets onto the LAN with one EXEC call. This type of write request is used for large data transfers to reduce the system call turnaround time. This request cannot use either VMAIO or CLASS calls. Another added subfunction (36b) allows the driver to enable or disable the ARP packet filter mode. If this mode is enabled, the LAN driver will discard ARP packets that do not contain the local IP address. 4.5.6.2 IFT Extension Usage The IFT extension serves as a table area for Destination Service Access Points(DSAPs)/Program Codes(PCs) and associated Class I/O class number. This table is referred to as the driver's class table. In addition, the IFT extension is also used to store a Multicast Address List and other variables used in the driver. For the LAN driver prior to the 6.1 release, the default size of the driver's class table was 134 words, the default size of the Multicast Address List was 12 words (allowing for four Multicast Addresses), and 58 words were reserved for driver variables (for a total default size of 204 words). For the LAN driver for the 6.1 release, 26 words (default) are reserved for both the driver's class table and the Multicast Address List and 47 words are reserved for driver variables (for a total default size of 73 words). Since two words are required for each pair of DSAPs number, and three words are required for each Multicast Address, the reserved area for both the driver's class table and the Multicast Address List can be dynamically allocated to to 13 pairs of DSAP/PC and class number, or up to 8 Multicast Addresses, or a combination in between. ------------------------------------------------------------------ Q: I am trying to change the Receive Packet Filter permanently on my 12076A LANIC using Node Manager. I am using the following command: SC,,4,0,P to change the Receive Packet Filter from four to zero, but after rebooting, the value has returned to four. It does not make it permanent. I know I can do this manually everytime I reboot, but why does it change and is there an easier way than Node Manager to set it? A: What is misleading here is that NSINIT resets the Packet Filter. So it appears that NM or the LAN card is failing to permanently set the packet filter, when in reality, NSINIT is resetting it. The Packet filter setting is determined by NSINIT, and depends upon the link type set in the DCN, for example: *DCN: 015.037.241.004,LAN,,38 will configure the LANIC for both 802.3 and Ethernet packets. This assumes you want both PROBE and ARP to work and sets the packet filter to 6. (PROBE requires Multicast, ARP requires Broadcast. Individual always. 6 = I + M + B) On the other hand: *DCN: 015.037.241.004,803,,38 will configure the LANIC for 802.3 only and set the packet filter to 4 (PROBE only, so you only need Multicast and Individual,4 = I + M) See the Node Manager Manual (p/n 12076-90002) for more information on the Packet Filter settings. So that explains why it changed. NSINIT makes an intelligent decision based on information you supply. But you can always change it, as long as you are aware of the ramifications. Here's an easier way than using Node Manager to change the Packet Filter, using a control request: Add to the welcome file AFTER NS has been initialized: CN,lu,37B,0,-20465 Where LU is the LAN card LU, 37B is the function code, 0 is the desired Packet filter setting, and -20465 is a security code. This is from the 12079A DDA manual (p/n 12079-90001) Q: I am confused by the S and E bits of Driver parameter 8 for SCSI MO drives. I am unable to get the system to spindown the MO when I dismount it and I am also unable to prevent users from manually ejecting a Mounted MO during use. How do I implement these features? A: When inserting a MO-disk the drive will spinup. Spindown is also taken care of if you press the eject-button. This is all hardware within the disk itself. In order to allow D.RTR and the driver to handle spinup/down/eject AND also locking the MO from manual ejection during use, two items need to be addressed: 1) The MO disk must be genned with either Bit 15 OR bit 14 set in Driver Parameter 8. Bit 15 (the S bit) means the driver will spin the drive down on last dismount. (Last implies there is more than one LU genned for the platter) Bit 14 (the Eject bit) means the driver will EJECT (after spindown, of course) upon last dismount. Setting bit 15 overrides bit 14. In other words if you set 15 and 14, the driver ignores 14. 2) D.RTR needs to be linked with DDMAX.REL modified for control of spindown/eject. In the VCPLUS directory, find the file DDMAX.MAC. Edit this file and look near the end for: ---------------------------------------------------------------------- * By default, this feature is disabled. Set the following value to -1 * to enable this feature. (Note that this also requires that all of * the MO disk LUs on the same node list must be genned with the same * driver parameter 8 setting either the 'S' or 'E' bit.) d.scsi_mo_eject dec 0 ; disable scsi 40b/41b mode, * * d.scsi_mo_eject dec -1 ; enable scsi 40b/41b mode, * ---------------------------------------------------------------------- You would want to uncomment the last line, and comment the preceding line. Then run MACRO on the modified DDMAX.MAC source and link D.RTR with this modifed DDMAX.REL Note this ONLY applies to the CDS version of D.RTR supplied with VCPLUS. It is not supported with the non-CDS version of D.RTR supplied with RTE-A. What this gets you is the following: When dismounting (the last volume in the node list) the MO will either spindown and eject, or just spindown depending on the setting of bit 14 or 15 in DP 8. Conversely, when mounting a MO, D.RTR will spin the drive up. In addition, when the MO is mounted, the front panel eject button will be disabled, preventing manual eject of the MO during use. A: I have a C1511A HPIB DAT tape drive on my system. If I rewind the tape from the system, and ask it go OFFLINE, it does not eject the tape after rewinding. Is this normal bahavior? Q: Yes, this is normal behavior for the HPIB DAT tape. The SCSI controller DAT tapes will respond to a UNLOAD command from the system and actually unload the tape after rewinding. Unfortunately the HPIB version requires manually unloading the tape Q. Is there a simple way to find out the ID segment address of a program without knowing the session number? IDGET works, but it only searchs the local session or the system session. A. Sure. The following program uses an EXEC29 call, which has existed for some time, and is now documented in the Programmers Reference Manual as of 6.1. The EXEC29 has been around since 1982 or so, just not documented. ftn7x,q,s program id() implicit none integer trimlen integer idadd, buf(3), lu character str*6 equivalence (str, buf) call exec(29, 6hSLEEP , 0, idadd, -1) c ^ ^ ^ ^ c | | | | c | | | searchflag - if present and c | | | sign set, search every ID seg c | | | in system, no matter what c | | | session it is in. c | | | c | | id seg address - returned id segment c | | address or 0 if not found. c | | c | session - ignored if searchflag is c | present and has sign set. c | c program name if (idadd .eq. 0) then write (1,*) 'SLEEP not found.' else call idaddtoname(idadd, buf, lu) write (1,*) str(1:trimlen(str)), '/', lu, idadd endif end c