HP OpenVMS Systems Documentation

Content starts here HP TCP/IP Services for OpenVMS

HP TCP/IP Services for OpenVMS
Management


Previous Contents Index

25.5.1 Controlling the Print Stream

If a remote printer supports a raw network data connection rather than the TELNET protocol, you can print to such a printer by suppressing all TELNET modifications of the output stream with the following logical names:

  • TCPIP$TELNETSYM_RAW_TCP
    Suppresses all TELNET type modifications of the print output stream.
    This logical name also prevents the TELNETSYM from doubling IAC characters and sending the TELNET escape sequence to negotiate binary options for files printed /PASSALL.
  • TCPIP$TELNETSYM_SUPPRESS_FORMFEEDS
    Suppresses form feeds between jobs. This includes the form feed that is normally sent before the first job printed to a print queue and the form feed sent at the end of every job. For more information, see Section 25.6.4.1.

25.5.2 Setting Up Error Logging

OPCOM messages sent by TELNETSYM include the name of the execution queue. In addition, each TELNETSYM queue has a log file named TCPIP$TELNETSYM_queue-name.LOG.

By default, TELNETSYM sends messages to the operator and records error and informational messages in the file TCPIP$TELNETSYM_queue-name.LOG. This file is located in SYS$SPECIFIC:[TCPIP$LPD].

You can use logical names to modify the way the TELNETSYM logs information and the type of information it reports. For example, TELNETSYM can log diagnostic messages that you can use when troubleshooting problems with a link.

Use the following logical names to modify error logging:

  • TCPIP$TELNETSYM_VERBOSE
    Turns on the logging of TELNETSYM diagnostics to the file TCPIP$TELNETSYM.LOG. These diagnostics include informational messages that indicate when links have come up or gone down and error messages.
  • TCPIP$TELNETSYM_NO_OPCOM
    Stops TELNETSYM from sending messages to the operator console.
  • TCPIP$TELNETSYM_DEBUG
    Used with TCPIP$TELNETSYM_VERBOSE, this logical name tells TELNETSYM which diagnostic message types to log.
    Specify a value for each bit. Each bit set in the value turns on a particular logging function. The options are:
    Bit 0 Tracks the flow of code. For example:
    xyz-n-xyz-routine entered
    
    Bit 1 Tracks the allocation of memory. For example:
    just freed address 7F0000
    
    Bit 2 Logs the bytes sent and received over TCP/IP link.

    To set a bit, assign the value to the logical name whose binary equivalent would have the bit set. For example, you can tell TELNETSYM to log everything that it writes to and receives from the TCP/IP link by entering:


    $ DEFINE /SYSTEM TCPIP$TELNETSYM_DEBUG 4
    

    Decimal 4 is binary 100 with bit 2 set. Note that you can achieve different combinations by setting more than one bit in the value. A value of 3, for example, sets bits 0 and 1, causing logging of flow of code and memory allocation diagnostics.
    If TCPIP$TELNETSYM_DEBUG is undefined, TELNETSYM does not log these diagnostics.
    Bit 2 is useful in unassisted problem solving. Be aware, however, that the log file can become large because all the data sent over the link to the printer is logged. Bits 0 and 1 are primarily for use by HP. However, with knowledge of PSM$ symbionts, you might find all the options useful.
  • TCPIP$TELNETSYM_LOG_KEEP
    By default, TELNETSYSM saves all log files. Define this logical name to limit the number of log files saved. The value assigned to this logical name is the number of versions of a log file TELNETSYM will allow before it starts purging. When the number of files reaches the number you specified, TELNETSYM starts purging files.
    For example, to configure the queue to purge after more than three copies of the same log file are created, define the logical name as follows:


    $ DEFINE /SYSTEM TCPIP$TELNETSYM_LOG_KEEP 3
    
  • TCPIP$TELNETSYM_SCRATCH
    By default, TELNETSYM stores log files and any temporary files created by relay queues in the directory SYS$SPECIFIC:[TCPIP$LPD]. You can change the default directory for one or all of your TELNETSYM queues. For example:


    $ DEFINE /SYSTEM TCPIP$TELNETSYM_SCRATCH device:[directory.path]
    

    If you define the logical name TCPIP$TELNETSYM_SCRATCH, the log files are stored in the TCPIP$TELNETSYM_SCRATCH directory.
    If you do not define TCPIP$TELNETSYM_SCRATCH, the log files are stored in TCPIP$LPD_ROOT.

25.5.3 Controlling Characteristics of the TCP/IP Link

The TELNETSYM configuration logical names allow you to set TELNETSYM parameters. To see the default values for these parameters, enter the following command:


TCPIP> SHOW PROTOCOL TCP /PARAMETER
TCP
  Delay ACK:              enabled
  Window scale:           enabled
  Drop count:                   8
  Probe timer:                150

                          Receive                Send

  Push:                  disabled            disabled
  Quota:                    61440               61440

The logicals that you can use to modify these parameters are:

  • TCPIP$TELNETSYM_KEEPALIVE
    Controls Keepalive processing.
    The Keepalive timer is used to periodically test the other end of a link that appears to be idle. Its purpose is to detect when a remote host has failed or has been brought down, or when the logical connection has been broken.
    For TELNETSYM, you control this timer with the following command:


    $ DEFINE/SYS TCPIP$TELNETSYM_KEEPALIVE 1
    

    If you change this logical name, you must stop and restart the TELNETSYM queue for the new setting to take effect.
    By default, the Keepalive timer is disabled. Broken connections will be detected only when the relevant application sends data.
  • TCPIP$TELNETSYM_DROPTIME
    The Drop timer indicates how long a connection should be maintained (after repeated timeouts) before closing the connection. The Drop timer is in effect only after the link has been established, and it takes effect only if the Keepalive logical is also defined.
    You control the Drop timer by entering the following command:


    $ DEFINE/SYS TCPIP$TELNETSYM_DROPTIME x
    

    In this command, x specifies the number of seconds to hold the connection before closing it.
    The default value for the Drop timer is 300 seconds.
    Note that the value for the Drop timer must be greater than the value for the Probe timer. When you define only one of these TELNETSYM logical names, the default value will be used for the other logical name.
  • TCPIP$TELNETSYM_PROBETIME
    This logical name allows you to control the Probe timer.
    The Probe timer defines:
    • When establishing an initial connection, the number of seconds TCP/IP Services will wait for a response before a timeout occurs. You can enable this function even if the Keepalive timer is disabled.
    • The length of time allowed to pass before TCP/IP Services checks an idle connection. This function requires that the Keepalive timer be enabled.

    You control the Probe timer by entering the following command:


    $ DEFINE/SYS TCPIP$TELNETSYM_PROBETIME x
    

    In this command, x specifies the number of seconds to wait before timing out the connection.
    The value of the Probe timer must always be less than or equal to the value of the Drop timer. The default value for the Probe timer is 75 seconds.
  • TCPIP$TELNETSYM_SNDBUF
    Specifies the size of the socket send buffer that TELNETSYM uses.

25.5.4 Establishing a TELNETSYM Link

If a network link has not been established, the TELNET symbiont attempts to establish one. Printing starts when the link is successfully established. The TELNET symbiont continues to try to establish a network link until it is successful or until a retry interval you define has expired.

The logical name TCPIP$TELNETSYM_RETRY_INTERVAL defines the time for TELNETSYM to wait between link-establishment retries when link establishment has failed. The value for this logical name is an OpenVMS delta time.

If this logical name is not defined, TELNETSYM defaults to a wait period of 3 minutes between retries.

For example, to define a retry interval of 30 seconds, enter:


$ DEFINE /SYSTEM TCPIP$TELNETSYM_RETRY_INTERVAL "0 00:00:30.00"

25.5.5 Releasing a TELNETSYM Link

By default, TELNETSYM releases an established link at the end of a print job. This behavior is useful when multiple systems contend for the same printer. Configuring TELNETSYM to release the link at the end of a job allows other systems to print quickly. However, this behavior can also be a disadvantage because of the overhead involved with link creation for each print job.

When there is little or no contention for a printer, it is useful to configure TELNETSYM to release the link only after a certain period of idle time has passed. With this approach, TELNETSYM waits for the configured idle time to elapse and then closes the link. This option works well within batch printing applications.

Use the logical name TCPIP$TELNETSYM_IDLE_TIMEOUT to define the length of time to wait before terminating an inactive link. Specify a value that is an OpenVMS delta time.

For example, to define a link-idle-timeout of 10 minutes, enter:


$ DEFINE /SYSTEM TCPIP$TELNETSYM_IDLE_TIMEOUT "0 00:10:00.00"

Idle time occurs during printing as well as between print jobs. Any idle time on the link can cause a timeout. Therefore, it is important to adjust the value of this logical carefully.

25.5.6 Setting the Number of Execution Queues

The logical name TCPIP$TELNETSYM_STREAMS defines the number of execution queues handled by each TELNETSYM process. The value you enter (a number from 1 through 32) when defining this logical name is passed to the PSM$PRINT system routine. The default is a maximum of 32 queues per symbiont process.

Use this logical to turn TELNETSYM into a single-threaded symbiont (value=1) in which each queue runs its own process. This makes diagnosing problems easier and lessens the consequences of a failure.

If you are defining this logical name, define it once. Do not define it differently for each TELNETSYM print queue.

25.6 Solving TELNETSYM Problems

To avoid potential problems with TELNET printing, be aware of the following guidelines and considerations.

25.6.1 Using TCPIP$TELNETSYM for the First Time

If you use the public domain TELNET symbiont and want to switch to the TCP/IP Services TELNET symbiont, you must change the value of the /PROCESSOR qualifier on the TELNET symbiont queues. When you do this, include any command procedures that start up the queues. Change:


/PROCESSOR=TELNETSYM

to:


/PROCESSOR=TCPIP$TELNETSYM

25.6.2 Printing to Terminal Servers

When you print to a terminal server system, ensure that:

  • Input flow control is disabled for the port to which you are printing.
    Enter:


    > CHANGE PORT port INPUT FLOW DISABLED
    
  • The TELNET server for the terminal server port is set to recognize a new line as a carriage-return character followed by a line feed character.
    Enter:


    > CHANGE PORT port TELNET SERVER NEWLINE TO HOST
    

25.6.3 Stalled Print Queues

When you print a job to a TELNETSYM queue, a link must be established between the queue and the printer. If there is high contention for the printer, it might be busy, causing the first attempt to fail.

TELNETSYM continues to try to establish the link, according to the retry interval logical name TCPIP$TELNETSYM_RETRY_INTERVAL. Until the link is established, the execution queue stalls. When the link comes up, the job prints. A stalled TELNETSYM queue is not necessarily an error.

If the queue stalls while printing a job, the printer probably requires human intervention; that is, the printer is out of paper or jammed.

25.6.4 Solving Formatting Problems

To track down problems with improper formatting on the printed page (for example, "garbage" for a graphics file or unwanted blank pages), use bit 2 of the TELNETSYM logical name TCPIP$TELNETSYM_DEBUG. Defining this logical helps determine whether the source of the problem is TELNETSYM. Follow these steps:

  1. Define the logical as 4 in the system table. Enter:


    $ DEFINE /SYSTEM TCPIP$TELNETSYM_DEBUG 4
    $ STOP /QUEUE /RESET TELNETSYM_queue-name
    $ START /QUEUE TELNETSYM_queue-name
    
  2. Print the job that does not print properly.
  3. Look at the TELNETSYM log file for the queue.
    This file has messages that show you every byte sent over the link to the printer, such as control characters and setup/reset modules.
    If the raw TCP logical name is not defined, you will see doubled IAC characters (hexadecimal FF).
    If you print /PASSALL with the raw TCP logical name not defined, the job starts with the TELNET options negotiation sequence "do binary, will binary."
  4. Identify the problem. Either fix it or report it to your HP support representative. Keep in mind that the OpenVMS print symbiont may be the cause of the problem. TELNETSYM only modifies the output as described in Section 25.1.2.
  5. Turn off debug mode.
  6. Start the TELNETSYM queue.

25.6.4.1 Controlling Form Feed Suppression

Use the TCPIP$TELNETSYM_SUPPRESS_FORMFEEDS logical to control the suppression of form feeds. The bit settings you specify in the value control the time of the operation and the type of form feed suppression to perform:

  • Bits 0 and 1 specify when to do form feed suppression. It can be done at either job setup or job completion time, or both. At least one of these bits must be set to enable form feed suppression.
  • Bits 4 and 5 together specify how to perform form feed suppression. With TCP/IP Services, you can set either of two levels of form feed suppression. Both levels eliminate the form feed character from the stream of output bytes that is sent when the queue is first started.
    • Level 1 form feed suppression operates similarly to form feed suppression under previous versions of TCP/IP Services. It will not eliminate subsequent form feed characters, but will instead substitute a line feed character for the form feed character. As a result, what would have been a carriage-return/form feed sequence in the output stream becomes a carriage-return/linefeed sequence.
    • Level 2 form feed suppression eliminates all form feed characters and carriage-return/form feed sequences from the output stream.

The following examples show how to calculate the value for the logical name:

  1. This example shows how to determine the value of the TCPIP$TELNETSYM_SUPPRESS_FORMFEEDS logical if you want level 2 form feed suppression at both job setup and job completion times. The value of the logical is determined by the bit settings shown in Figure 25-1.

    Figure 25-1 TCPIP$TELNETSYM_SUPPRESS_FORMFEED Level 2 Setting



    The binary value for level 2 form feed suppression at both job setup and job completion time is 100011 (hexadecimal 23 or decimal 35). Because the value of the logical is a decimal value, you define it as follows:


    $ DEFINE/SYSTEM TCPIP$TELNETSYM_SUPPRESS_FORMFEEDS 35
    
  2. This example shows how to determine the value of the TCPIP$TELNETSYM_SUPPRESS_FORMFEEDS logical if you want level 1 form feed suppression at job completion time only. The value of the logical is determined by the following bit settings shown in Figure 25-2.

    Figure 25-2 TCPIP$TELNETSYM_SUPPRESS_FORMFEED Level 1 Setting



    The binary value for level 1 form feed suppression at job completion time only is 010001 (hexadecimal 11 or decimal 17). Because the value of the logical is a decimal value, you define it as follows:


    $ DEFINE/SYSTEM TCPIP$TELNETSYM_SUPPRESS_FORMFEEDS 17
    

25.6.4.2 Buffer Dumps

TELNETSYM logs control characters and nonprinting characters by preceding the hexadecimal value of the byte with a backslash. For example, the following sequence:


Carriage Control
Form Feed
Carriage Control
Line Feed
Tab
the text "Use Your Screen Saver to Conserve Energy."
Carriage Return
Line Feed

is logged as:


\0D\0C\0D\0A\09Use Your Screen Saver to Conserve Energy.\0D\0A

The "do binary, will binary" sequence starting off a /PASSALL job appears as:


\FF\FD\00\FF\FB\00


Previous Next Contents Index