TN3270E Working Group G. Pullen Internet-Draft: Alcatel USA Extends: RFC 2355 M. Williams Expiration Date: October 2002 S2 Systems April 17, 2002 TN3270E Functional Extensions Status of this Memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet- Drafts as reference material or to cite them other than as "work in progress." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. Copyright Notice Copyright (C) The Internet Society (1999, 2000, 2001, 2002). All Rights Reserved. Abstract This draft addresses issues and implementation problems defined and discussed at the TN3270E/TN5250E Interoperability Events. It does not replace the current TN3270 Enhancements protocol. It describes functional extensions to the TN3270E protocol. The TN3270E function negotiation mechanism is used to allow the server and client to determine which, if any, of these functions will be supported during a session. This preserves backward compatibility between clients and servers that do not support these features. Among the issues to be address by this draft are SNA/TN3270E Contention state resolution and SNA Sense Code support. Pullen & Williams Internet Draft [Page 1] Internet Draft TN3270E Functional Extensions April 2002 1. Table of Contents 1. Table of Contents . . . . . . . . . . . . . . . . . . . 2 2. Negotiated Function Codes . . . . . . . . . . . . . . . 3 3. Negotiated Function Example . . . . . . . . . . . . . . 3 4. Contention Resolution Function . . . . . . . . . . . . . 4 4.1 Keyboard Restore Problem . . . . . . . . . . . . . . . . 4 4.2 Implied Keyboard Restore Problem . . . . . . . . . . . . 4 4.3 Bid Problem . . . . . . . . . . . . . . . . . . . . . . 4 4.4 Signal Problem . . . . . . . . . . . . . . . . . . . . . 5 4.5 CONTENTION-RESOLUTION Implementation . . . . . . . . . . 5 4.5.1 SEND-DATA Indicator (SDI) . . . . . . . . . . . . . . . 6 4.5.2 KEYBOARD-RESTORE Indicator (KRI) . . . . . . . . . . . . 7 4.5.3 BID Data Type . . . . . . . . . . . . . . . . . . . . . 8 4.5.4 SIGNAL Indicator . . . . . . . . . . . . . . . . . . . . 9 5. SNA Sense Code Function . . . . . . . . . . . . . . . . 12 6. References . . . . . . . . . . . . . . . . . . . . . . . 13 7. Term Definitions . . . . . . . . . . . . . . . . . . . . 13 8. Abbreviations . . . . . . . . . . . . . . . . . . . . . 14 9. Conventions . . . . . . . . . . . . . . . . . . . . . . 14 10. Author's Note . . . . . . . . . . . . . . . . . . . . . 14 11. Change Log . . . . . . . . . . . . . . . . . . . . . . 14 12. Author's Address . . . . . . . . . . . . . . . . . . . . 15 Pullen & Williams Internet Draft [Page 2] Internet Draft TN3270E Functional Extensions April 2002 2. Negotiated Function Codes To maintain backward compatibility with clients and servers that do not support the extended TN3270E functions all new functionality will be negotiated. The current TN3270E function negotiation rules apply. Either side may request one or more of the extended functions by adding them to the function code list during TN3270E function negotiations. Either side may reject the function by removing it from the function list. The extended TN3270E function negotiation codes are defined as: CONTENTION-RESOLUTION 5 SNA-SENSE 7 3. Negotiated Function Example The SNA-SENSE function support is enabled by the negotiation below: Server: IAC DO TN3270E Client: IAC WILL TN3270E . . . Client: IAC SB TN3270E FUNCTIONS REQUEST ... SNA-SENSE IAC SE Server: IAC SB TN3270E FUNCTIONS IS ... SNA-SENSE IAC SE Support is disabled by the negotiation below (the server does not support the SNA-SENSE function): Server: IAC DO TN3270E Client: IAC WILL TN3270E . . . Client: IAC SB TN3270E FUNCTIONS REQUEST ... SNA-SENSE IAC SE Server: IAC SB TN3270E FUNCTIONS REQUEST ... IAC SE Client: IAC SB TN3270E FUNCTIONS IS ... IAC SE Pullen & Williams Internet Draft [Page 3] Internet Draft TN3270E Functional Extensions April 2002 4. Contention Resolution Function This function addresses shortcomings in the current TN3270E (RFC 2355) specification that stem from the fact that SNA is a send/receive state oriented protocol, while TN3270E is relatively state free. The following subsections define the problems to be addressed and the methods to resolve those issues. 4.1 Keyboard Restore Problem The Keyboard Restore problem concerns uncertainty over when the client can send data to the TN3270E server. TN3270E provides for an End-Of-Record (EOR) mechanism, which allows the client to determine where the boundary is between 3270 data stream commands. The server sends EOR whenever it sends data to the client for which the LIC (Last-In-Chain) indicator was set. Clients have no choice but to interpret the presence of EOR as an indication that it is okay to go ahead and send data back to the host (providing the 3270 data-stream has restored the keyboard). Since it is not uncommon for the Server to receive a LIC from the host with no CDI (Change Direction Indicator) set, a serious problem is created where the client will send data to the server when it does not own the send state. The solution is for the server to provide the client with an indication that it may send data. The Send Data Indicator (SDI) mechanism will be discussed later in this document. 4.2 Implied Keyboard Restore Problem The Implied Keyboard Restore problem occurs when an application never explicitly sets the keyboard restore bit of the WCC byte in any of the 3270 data streams during a bracket. In SNA, EB is considered an "implied" keyboard restore in this case. However, since TN clients are not aware of the bracket or direction state the client is not aware that it is allowed to send data and often hangs in X-CLOCK state. The solution for this problem is for the server to detect the implied keyboard restore condition and send the Keyboard Restore Indicator (KRI) flag to inform the client that its keyboard is unlocked (ready state). 4.3 BID Problem In SNA, when a session is in the BETB (Between Bracket), the Primary LU (PLU), or host, may bid for the bracket by either sending an explicit or implicit BID. The Secondary LU (SLU), or terminal, processes the BID, either granting the bracket to the host or rejecting the request. Having granted the bracket the SLU must enter the X-CLOCK (Time) input inhibited state. Pullen & Williams Internet Draft [Page 4] Internet Draft TN3270E Functional Extensions April 2002 An implicit BID occurs when the session is BETB and the host sends a message to the SLU with Begin Bracket (BB) indicated. No BID actually flows but is implied. The SLU may accept or reject as if a BID had been sent. In the TN3270 world, there is no mechanism for including the client in the BID process. The server must process the BID on the client's behalf, without the ability to request the client yield the send state. This leads to a variety of problems when the client attempts to send data inbound after the server has sent positive response to a BID from the host. These problems include hung or lost sessions, lost data, or SNA or host application error messages, depending on data flow, timing, and how the server handles the BID process. This problem can be addressed by allowing the BID to propagate to the client. When the server receives a valid BID (implicit or explicit) from the host (i.e. one that occurs in the BETB state) it will forward it to the client. The client will respond either positively or negatively. Having granted the BID (positive response), the client enters the X-CLOCK input inhibited state until the session reenters contention state. 4.4 Signal Problem The Signal problem occurs when the PLU sends a Signal in order to force the SLU to yield direction. For example, when the secondary has rejected a BID and the host needs to override it. The BID reject may occur when the user types some data (perhaps an unintentional depression of the space bar) and does not press an AID key. The SNA architecture provides that the primary (host) can send a Signal. The secondary should reply with a positive response, send a null RU with Change Direction to yield direction (and Begin Bracket if appropriate), and enter send inhibit state. With TN3270 there is no way for the server to force the client to yield the send state. 4.5 CONTENTION-RESOLUTION Implementation This section defines a new negotiated TN3270E function called CONTENTION-RESOLUTION. Support of this function implies that both the client and the server are able to handle the SDI, KRI and Signal header flags and the BID data type as defined in this specification. This function is intended for SNA TN3270E environments only. Non-SNA server implementations should ALWAYS disable this function during TN3270E function negotiations. When the CONTENTION-RESOLUTION function is supported, the REQUEST-FLAG header field is interpreted as a bit mask, instead of a byte value, to allow the field to be used for Send Data, Keyboard Restore and Signal indicators. Pullen & Williams Internet Draft [Page 5] Internet Draft TN3270E Functional Extensions April 2002 4.5.1 Send Data Indicator (SDI) To use the Send Data Indicator the CONTENTION-RESOLUTION function must be supported by and agreed upon by both the server and client during TN3270E function negotiations. SDI is only valid for TN3270E terminals in PLU-SLU session (3270-DATA type). SDI is not used for SSCP-LU mode to avoid the overhead of the server having to BID to send asynchronous SSCP-LU-DATA records to the client. SDI is meaningful only when sent by the server. It is sent in the REQUEST-FLAG field of the TN3270E header. The SDI bit mask is: SEND-DATA-MASK 0x01 A bit value of 1 (true) indicates to the client that it holds the send state. A bit value of 0 (false) indicates the server (and host by extension) holds the send state. In SNA LU-LU session, the server sends SDI when the host relinquishes send state with either the CDI or the EBI set in the SNA RU header. It is valid for the server to send a null 3270-DATA message (TN3270E header and EOR, no data) to indicate the send state to the client. This allows the server and client to handle a NULL RU containing EBI or CDI received from the host. The server ignores SDI in messages from the client and processes any data as usual depending on data type. When SDI is received by the client and the current TN3270E message has been processed (upon receipt of EOR) the client may send data to the server. If RESPONSES have been negotiated, the client must send RESPONSES to the server regardless of the send state. Upon receipt of SDI, the client must send all pending RESPONSE messages before sending any keyboard input to the server. SDI is not a replacement for the 3270 data stream WCC Keyboard Restore bit. The client must track the 3270 WCC Keyboard Restore flag, TN3270E Keyboard Restore Indicator (KRI) and SDI to determine whether or not it can start sending data to the server. If keyboard restore (WCC or KRI) is received, the keyboard input must still be buffered until the SDI is received. The client may send an ATTN key (IAC IP) regardless of the keyboard State, including input inhibited state. ATTN causes the server to send a SIGNAL to the host requesting Change Direction. This may allow the user to recover from a direction state timing or synchronization problem (i.e. server neglected to send SDI). The client should avoid subsequent ATTN keys until it receives direction from the host. The server may disregard successive ATTN keys while waiting for the first ATTN to be processed and direction is yielded by the host. Pullen & Williams Internet Draft [Page 6] Internet Draft TN3270E Functional Extensions April 2002 The client may also send SYSREQ (if enabled by TN3270E function negotiation) to override the input inhibit state. This allows the user to switch to SSCP-LU session (possibly to logoff). The RESET key is used to clear local terminal and X-SYSTEM error conditions. RESET purges all buffered (type-ahead) keystrokes, except when entered to remove terminal Insert mode. In this case, a second RESET is required to purge the type-ahead buffer. RESET does restore the keyboard allowing the user to begin typing buffered keystrokes. However, it does NOT clear the X-CLOCK condition or allow the client to override the send state and forward data to the server. 4.5.2 Keyboard Restore Indicator (KRI) To use the Keyboard Restore Indicator the CONTENTION-RESOLUTION Function must be supported by and agreed upon by both the server and Client during TN3270E function negotiations. KRI is only valid for TN3270E terminals in PLU-SLU session (3270-DATA type mode). KRI is meaningful only when sent by the server. KRI is sent in the REQUEST-FLAG field of the TN3270E header. The KRI bit mask is: KEYBOARD-RESTORE-MASK 0x02 A bit value of 1 (true) indicates to the client that its keyboard has been restored. The client's X-CLOCK indicator is turned off, allowing the user to enter data. However, the client may not send data to the server until it has also received SDI from the server (which may be set in the same REQUEST-FLAG field). Logically, the client treats KRI the same as it does the 3270 WCC Keyboard Restore bit. KRI is not a replacement for the 3270 data stream WCC Keyboard Restore bit. The client must still track both the KRI and 3270 WCC Keyboard Restore flag to determine the keyboard state. Normally, one or the other will be received. However, the client should not balk if both are received on a 3270-DATA message. The server ignores KRI in messages from the client and processes any data as usual depending on data type. The server sends KRI when it detects an "implied" keyboard restore during LU-LU session. The server must track whether the host application has explicitly set the keyboard restore bit of the WCC byte in any of the 3270 data streams during a bracket. If not, the server must set KRI in the TN3270E message header when EB is set in the SNA header. It is valid for the server to send a null 3270-DATA message (TN3270E Header and EOR, no data) to indicate the KRI to the client. This allows the server and client to handle a NULL RU containing EBI received from the host. Pullen & Williams Internet Draft [Page 7] Internet Draft TN3270E Functional Extensions April 2002 4.5.3 BID Data Type To use the BID data type the CONTENTION-RESOLUTION function must be supported by and agreed upon by both the server and client during TN3270E function negotiations. The BID data type message is only valid on terminal sessions in 3270-DATA (LU-LU) mode. The BID data type is not valid during SSCP-LU mode, NVT mode, or on printer sessions. The BID DATA-TYPE code is defined as: Data-type Name Code Meaning -------------- ---- ------------------------------------------- BID 0x09 The server indicates that the host has sent an implicit or explicit BID by sending this data type to the client. The server sends the new TN3270E BID data type to the client upon receipt of either an implicit or an explicit BID from the host. The server must never send BID to the client when the host already has direction (holds send state). To send the BID data type the server inserts the BID data type in the DATA-TYPE field of the TN3270E header, inserts a null (0x00) in the REQUEST-FLAG field, inserts ALWAYS-RESPONSE (0x02) in the RESPONSE-FLAG field and fills in an appropriate SEQ-NUMBER. The server should use the next number in the progression of sequence numbers. An End-of-Record (EOR) is appended immediately after the TN3270E header (there is no data portion for a BID message). The BID data type must always receive a response from the client regardless of whether the RESPONSES function is supported on the session. The client's positive or negative response to a BID should be exactly the same as those defined in the TN3270 Enhancements RFC, unless the SNA Sense Code Function (defined in section 6) is used by the client to communicate a more specific code. The SEQ-NUMBER is returned by the client in its response, to allow the server to coordinate the response with the BID. When the client receives a BID message it is accepted by returning a positive response, or rejected by returning a negative response. The format of a positive response is the same as the positive response defined for the TN3270E RESPONSES function (i.e., RESPONSE data type, POSITIVE-RESPONSE code in RESPONSE-FLAG field, SEQ-NUMBER from BID). When the client accepts the BID the keyboard state goes to input inhibited, the client displays the X-CLOCK symbol and may not send data until SDI is received from the server. When the server receives a BID response from the client, it is responsible for constructing the appropriate SNA response to the host. Pullen & Williams Internet Draft [Page 8] Internet Draft TN3270E Functional Extensions April 2002 If the client already has buffered data to be sent to the host the client can reject the BID. The negative response uses the TN3270E RESPONSES format (i.e., RESPONSE data type, NEGATIVE-RESPONSE code in RESPONSE-FLAG field, SEQ-NUMBER from BID). Unless the client supports the SNA Sense Codes function, there is no defined reason information in the data portion of the negative response. The server rejects the host's BID with a "Bracket Bid Reject" sense code (0x08130000). The client's send state should remain unchanged upon negatively responding to a BID (i.e. if send state is input inhibited, it stays that way). If the client supports the SNA Sense Code function, it has the option of returning "Receiver in Transmit Mode" (0x081B0000) sense code. This may be returned to reject the Bid when the user has started typing data but has not yet pressed an AID key. A potential race condition exists, where the client sends data at the same time the server is sending a BID to the client. The race condition is handled by the server, and is relatively transparent to the client. When the server receives data before the expected response to the BID, the data is treated as an implied negative response. The server sends the Bracket Bid Reject (0x08130000) negative response to the host's BID and forwards the client's data to the host. When the client's response to the BID is received it is discarded by the server. The client's keyboard state should be input inhibited, whether it responded positively or negatively to the BID, because it has not received SDI for the data it sent previously. 4.5.4 SIGNAL Indicator To use the SIGNAL indicator the CONTENTION-RESOLUTION function must be supported by and agreed upon by both the server and client during TN3270E function negotiations. The SIGNAL indicator is only valid on BID data type messages. The SIGNAL indicator is sent in the REQUEST-FLAG field of the TN3270E header. The SIGNAL bit mask is: SIGNAL-MASK 0x04 A bit value of 1 (true) indicates that a Signal has been received from the PLU. Therefore the BID is "Forced" and the client MUST forfeit the send state. The client must always respond to a BID with the SIGNAL indicator, as described in the BID section. It is not necessary for the client to echo the SIGNAL indicator in its response. However, the server should not balk if the client does echo the SIGNAL indicator. The server must maintain in it's state machine that it is awaiting a response to a SIGNAL indicator. Pullen & Williams Internet Draft [Page 9] Internet Draft TN3270E Functional Extensions April 2002 When a Signal is received from the PLU the TN3270E Server's behavior may be summarized as follows: Send positive response to the host for the Signal If the host already has direction, or in contention state. . . there is nothing more to do Else client has direction. . . send BID with Signal to client and wait for reply or data If data received first. . . forward data to host as normal (will carry CD) Else response received first. . . send null RU CD to Host (with BB if necessary) Upon receipt of Signal from the host, the server returns positive response to the host, regardless of whether the host or client holds direction. If the host holds direction (send state), there is nothing more to be done. The client should already be awaiting data from the host. If the client holds direction, the server sends a BID with the SIGNAL indicator set to inform the client that it no longer holds send state and its keyboard state is input inhibited. The server will receive either data or a positive response from the client. The server forwards any inbound data from the client to the host, while awaiting response to the signal BID. The inbound data record will cause the direction (CD) state to return to the host. When the positive response is received from the client the server has nothing further to do. If the server receives only a response from the client, the server sends a null RU with Change Direction (CD) to the host. The client MUST return positive response to the server. If the client sends negative response to a SIGNAL, even though it is not allowed to do so, the server treats it as a positive response and handles it accordingly. The Client's behavior when a BID containing the Signal indicator is summarized as: Receive BID with Signal indicator If client has direction and buffered keystrokes with AID. . . send first AID buffer Else host has direction (race condition) or no AID. . . the buffered keystrokes are left unchanged Return positive response to Signal Enter X-CLOCK input inhibited mode Buffer any keystrokes/AID typed after the Signal Pullen & Williams Internet Draft [Page 10] Internet Draft TN3270E Functional Extensions April 2002 A Signal does not cause the client to purge any buffered keystrokes. If the client holds direction when the Signal is received, it may send one buffered AID message (if any) before sending positive response to the Signal. If the Host already had direction (race condition) or no AID key is buffered, the type-ahead buffer is retained, as is. The client then accepts the BID, and enters input inhibit mode. No further buffered data may be forwarded to the host until direction is returned to the client. The following diagram illustrates how the client should handle buffered keystrokes relative to BID/SIGNAL processing: |<--- Data typed before BID --->|<--- Data typed after BID --->| | is displayed on the screen. | is NOT displayed on screen. | This allows the host application to do a Read Buffer, update the portion of the screen it wants to change, put the cursor back to the right place for the suspended input and restore the keyboard. The client then streams the buffered keystrokes into the screen image. Upon completion of these processes the screen image should be restored correctly. Pullen & Williams Internet Draft [Page 11] Internet Draft TN3270E Functional Extensions April 2002 5. SNA Sense Code Function This function is intended for SNA TN3270E environments only. Non-SNA server implementations should ALWAYS disable this function during TN3270E function negotiations. When the server and client operate in an SNA environment, it is impractical to perpetuate the one-byte error code mapping style of TN3270E. Especially, when SNA already provides a table of defined Sense codes. The SNA Sense Code function allows the client to return SNA Sense codes to the server, which are in turn forwarded to the SNA Host as a negative response. The client indicates that the data portion of the response message contains a 4-byte SNA sense code by setting the following code in the RESPONSE-FLAG field: SNA-SENSE-CODE 2 The SNA-SENSE function may be negotiated on either terminal or printer sessions. When the SNA-SENSE and RESPONSES functions have been negotiated, the server is committed to accepting SNA-SENSE-CODE responses to 3270-DATA, SCS-DATA (LU1) and BID data type messages. The client retains the option of providing specific SNA Sense codes, or letting the server map all errors to the appropriate SNA sense codes. Pullen & Williams Internet Draft [Page 12] Internet Draft TN3270E Functional Extensions April 2002 6. References [1] IBM's "3174 Functional Description", Bookshelf book CN7A7003, GA23-0218-11. [2] IBM's "Systems Network Architecture Formats", GA27-3136-14. [3] RFC 2355 [4] IBM's "IPDS and SCS Technical Reference", S544-5312-00. 7. Term Definitions This section defines some of the terms used in this document. Input Inhibited - a state where the client does not hold send state. Either the client has presented an AID message to the host or the host has gained direction via the BID process. The keyboard state is any of the type-ahead or keyboard disabled states. Only SYSREQ or ATTN may be forwarded to the server while the client is in Input Inhibited state. SYSREQ and ATTN should never be buffered by the client. Keyboard Disabled - a keyboard state where keystrokes may NOT be buffered by the client. Keyboard disabled states include (X-f), etc. Keyboard States - define the various modes a keyboard may be in during a TN3270E session. When the client holds send state the keyboard is in Ready state. The client is free to process all keyboard input and forward any entered or buffered AID data to the server. An Input Inhibited state is entered when the client surrenders send state by sending an AID buffer or granting a BID request from the host. The diagram below summarizes the various keyboard states: ------------------------------------------------------------- Ready | Input Inhibited |----------------------------------------------------- | Type-ahead | Keyboard Disabled |----------------------------+------------------------ | X-CLOCK | X-SYSTEM | . . . | X-f | . . . ------------------------------------------------------------- Pullen & Williams Internet Draft [Page 13] Internet Draft TN3270E Functional Extensions April 2002 Type-ahead - is a state in which the client (terminal) may buffer keystrokes when the keyboard is an Input Inhibited state. Displayed keyboard state may be either X-CLOCK (Time) or X-SYSTEM (System Lock). Keystrokes (text and AID keys) are buffered waiting for send state to be returned to the client. 8. Abbreviations BB Begin Bracket, byte 2 bit 0 of RH of BC RU BC Begin chain, byte 0 bit 6 of RH BC RU An RU with BC = 1 EB End Bracket, byte 2 bit 1 of RH of BC RU EC End chain, byte 0 bit 7 of RH EC RU An RU with EC = 1 FI Format Indicator, byte 0 bit 4 of RH FIC First In Chain - an RU with BC = 1 and EC = 0 IPDS Intelligent Printer Data Stream LIC Last In Chain - an RU with BC = 0 and EC = 1 LU Logical Unit LUn Logical Unit Type n, n = 0, 1, 2, etc. MIC Middle In Chain - an RU with BC = 0 and EC = 0 OIC Only In Chain - an RU with BC = 1 and EC = 1 RH Request Header, 3 byte header on SNA RU RU Request Unit, an SNA frame starting with an RH SNA Systems Network Architecture 9. Conventions - Byte order is big-endian, e.g. bit 0 is the most significant bit. 10. Author's Note Portions of this document were drawn from the following sources: - Contention Resolution proposal by Rodger Erickson (Wall Data). - SNA Sense Code Support proposal by Derek Bolton (Cisco Systems). - Discussions on the TN3270E list and at the TN3270E/TN5250E Interoperability Events, 1997-1998. Particularly contributions by Jim Mathewson II (IBM), Derek Bolton, Michael Boe, and Diane Henderson (Cisco Systems). 11. Change Log - Removed FMH and Byte-Doubling Suppression Support with consensus of TN3270E Work Group. Pullen & Williams Internet Draft [Page 14] Internet Draft TN3270E Functional Extensions April 2002 12. Author's Addresses Gene Pullen Alcatel USA, Inc. 1000 Coit Road Plano, Texas 75075 Email: gene.pullen@usa.alcatel.com Marty Williams S2 Systems, Inc. 4965 Preston Park Blvd Suite 800 Plano, Texas 75093 Email: marty_williams@s2systems.com Draft Expiration Date: October 2002 Full Copyright Statement Copyright (c) The Internet Society (1999, 2000, 2001, 2002). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Pullen & Williams Internet Draft [Page 15]