Australia - Updated: 24-SEP-2003
hp.com home products and services support and drivers solutions how to buy
» contact hp
hp.com home hp OpenVMS ECOs

IMPORTANT NOTICE

The online distribution of OpenVMS and related product patches is being migrated to the HP ITRC (Information Technology Resource Center) patch distribution site. The new ITRC patch server will allow OpenVMS customers to take advantage of many enhanced features for patch searching and distribution.

Beginning August 1, 2003, OpenVMS and related Layered Product, publicly available patches will be available from the HP ITRC web site at

http://itrc.hp.com/service/patch/mainPage.do

The same patches will still be available from the existing patch server in Colorado Springs (http://www.support.compaq.com/patches/) through the end of October 2003, to give customers sufficient time to update their bookmarks and make the transition to the HP ITRC web site.

ECO kits will also be available by raw FTP from (ftp://ftp.itrc.hp.com/).

PLEASE UPDATE YOUR BOOKMARKS AND REGISTER ON THE NEW SITE NOW

Note: if you're having trouble connecting to the ITRC site, please delete any cookies for "itrc.hp.com" from your browser and try again. Report any difficulties with or suggestions to MrVMS

» Sydney CSC home page

Navigation
» ECOinfo main index
» Search ECOs
» Search FTP site
» Browse FTP site

ECO Indexes
» Chronological Index
» Indexed by Version
» Indexed by Rating
» Alpha Indexed by Name
» VAX Indexed by Name
» On Hold List

Associated Links
» OpenVMS Home Page
» OpenVMS News
» DIA/WIS Web Service

Feedback
» mail to CSC
.
Sydney Customer Support Centre OpenVMS ECO information
    Updated: 24-SEP-2003 (Use your browsers' Reload button to ensure you're viewing the most recent version)

UCXAV_E13033 VAX and Alpha DEC TCP/IP V3.3 ECO Summary

To obtain this kit please call the Customer Support Centre or use the FTP site

Search for this ECO kit and dependencies
Search the Compaq FTP web site this kit (exact match)
Search the Compaq FTP web site this or related ECOs

    
    
    Copyright (c) Digital Equipment Corporation 1995, 1996.  All rights reserved.
    
    PRODUCT:    DEC TCP/IP Services V3.3 for OpenVMS VAX
                DEC TCP/IP Services V3.3 for OpenVMS AXP
    
    OP/SYS:     OpenVMS VAX
                OpenVMS Alpha
    
    SOURCE:     Digital Equipment Corporation
    
    ECO INFORMATION:
    
         ECO Kit Name:  UCXAV_E13033
         ECO Kits Superseded by This ECO Kit:  UCXAV_E10033
                                               UCXECO9-033 (UCXECO)
                                               UCXECO7-033
                                               UCXECO6-033
                                               UCXECO5-033
                                               UCXECO4-033
                                               (ECO 4, ECO 5 and ECO 6
                                                Were Never Officially
                                                Released Into TIMA)
         ECO Kit Approximate Size:  29,345 Blocks
         Kit Applies To:  DEC TCP/IP Services V3.3 for OpenVMS
                            VAX V5.5-2, V6.0, V6.1, V6.2
                          DEC TCP/IP Services V3.3 for OpenVMS
                            AXP V6.1, V6.2
         System/Cluster Reboot Necessary:  Yes
    
    
    ECO KIT SUMMARY:
    
    An ECO kit exists for  DEC TCP/IP Services V3.3 for OpenVMS VAX and
    OpenVMS Alpha.  This kit addresses the following problems:
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3 Kernel Images
    ---------------------------------------------------------------------------
    ECO 1 updates:
    --------------
    
    ECO A	9-June-1995		                Alpha and VAX
    
    	Note: This ECO is a forward retrofit of ECO J for V3.2.
    
      	Images:
    
    	UCX$BGDRIVER.EXE			UCX V3.3-7A  (Alpha)
    	UCX$INTERNET_SERVICES.EXE		UCX V3.3-7A
    	UCX$INTERNET_SERVICES_V6.EXE		UCX V3.3-7A
    	UCX$INTERNET_SERVICES_SEC.EXE		UCX V3.3-7A
    	UCX$INTERNET_SERVICES_SEC_V6.EXE	UCX V3.3-7A
    	UCX$INETACP.EXE				UCX V3.3-7A
    
    	Problems:
    
    	1.  A crash occurs in SBDROP which calls PANIC due to what
                appears to be an inconsistent receive socket buffer.
    
    	2.  A crash occurs in PWIP, in adjTCPwindow, with an access
                violation due to referencing a stale UCB.
    
    	Solutions:
    
            Both of these crashes may be triggered when the PWIP application
            chooses to close a connection before it has deallocated all the
            MBUFs that have been passed to it.  Both of these problems can
            be corrected by redesigning the mechanism used to handle the
            deferred TCP window adjustment for PWIP.  Formerly, two UCB
            fields, UCB$L_BG_SO_CC and UCB$L_BG_SO_MBCNT, were used to keep
            track of the SO_CC and SO_MBCNT values associated with MBUFs
            passed up to PATHWORKS or DECnet/OSI.  The redesigned mechanism
            makes use of a new structure, the DWAB (Deferred Window
            Adjustment Block), to keep track of these quantities.
    
    	This redesign goes with PWIP changes to PWIPDRIVER_READ.C and
            PWIP_DRIVER_SUPP.C.  It is imperative to install both changes
            (i.e., NET and PWIP) simultaneously.
    
    	References:
    
    	CFS.26962, CFS.27049, CFS.26447, CFS.27437, CFS.26903,
    	CFS.27472
    
    ECO B	21-Jun-1995			        Alpha and VAX
    	27-Jun-1995
    
    	Images:
    
    	UCX$BGDRIVER.EXE			UCX V3.3-7B  (Alpha)
    	UCX$INTERNET_SERVICES.EXE		UCX V3.3-7B
    	UCX$INTERNET_SERVICES_V6.EXE		UCX V3.3-7B
    	UCX$INTERNET_SERVICES_SEC.EXE		UCX V3.3-7B
    	UCX$INTERNET_SERVICES_SEC_V6.EXE	UCX V3.3-7B
    	UCX$INETACP.EXE				UCX V3.3-7B
    
    	Problems:
    
    	1.  When an ICMP_NETMASK_REQUEST is issued by a host whose address
       	    is 0.0.0.0, it is expected that an ICMP_NETMASK_REPLY will be
    	    broadcast in response, providing such a feature is enabled.
    
    	    An initial problem exists in that ICMP_INPUT() does not enable
    	    broadcasts (via the flag, IP_ALLOWBROADCAST) when it replies
    	    through IP_OUTPUT().  As a result, the error EACCESS is returned
    	    by the interface code.
    
                The user is supposed to be able to set the option to have an
                ICMP_NETMASK_REPLY broadcast in response to an
                ICMP_NETMASK_REQUEST.  However, no facility currently exists
                to directly control such a feature.  A guideline is that only
                gateways tend to generate such replies. (Although a specific
                host could be so enabled, this is not expected to be common.)
                Therefore, this feature will only be enabled for gateways.
    
                To turn on the feature, issue the command:
    
    		UCX SET PROTOCOL ICMP /UNREACHABLE
    
            2.  A case of incorrect synchronization in the UCX$INETACP can
                leave  the system hung with the UCX$INETACP in RWAST state
                waiting for  I/O to run down on a BG device that the ACP has
                tried to deassign. Also, a crash occurs in
                INETACP_SERV_ACCEPT_CLOSE due to a non-zero value in the
                REQCB$W_CHAN_2 field which indicated that a valid channel
                existed and that the corresponding REQCB$L_UCB_2 was valid.
    
    	3.  A crash occurs in INET_SLIP_OPEN when trying to initialize
                compression.
    
    	4.  A system crash occurs in INET_SEL_READ_ALL with a zero
                pointer to  the temporary space allocated for select.
    
    	Solutions:
    
    	1.  Change IP_ICMP_VMS.C to include OpenVMS conditional code
                which senses the "IPGATEWAY" flag (set by the above
                command), and calls  ip_output() with the IF_ALLOWBROADCAST
                flag.  When "IPGATEWAY" is set to FALSE, it results in
                disallowed broadcasts; requests from  0.0.0.0 are rejected
                by the UCX Ethernet layer which returns EACCES.
    
    	2.  First, the synchronization error arose because we tried to
                execute substantive code in an AST thread in the
                UCX$INETACP.  The AST thread was triggered by a Read ATTN
                completion.  We should never execute anything but code to
                queue a REQCB in the context of the AST.  The fix is to do
                just that in routine INETACP_USER_INFO_AST and to move the
                substantive code to INETACP_USER_INFO_AST_CONT.
    
                Second, the interpretation of the REQCB_W_CHAN_2 field is
                modified  to take into account that this field is overlaid
                with the  REQCB$W_PROTO field. Given that this latter field
                can only take the  values 0 and 1, and given that valid
                channel numbers are 10, 20, 30,  etc. (all in hex), we now
                interpret a non-zero number with the low  bit clear as a
                valid channel and anything else (e.g., 1) as a  non-channel.
    
    	3.  The problem is that an allocation failure was unrecognized,
                and we used the SS$_xxx status code in R0 as if it were an
                address. The  fix is to change the calling sequence to
                INIT_INET_COMPRESSION (in INET_COMPRESS.MAR and called from
                INET_SLIP.MAR) so it can recognize when it fails.  From now
                on, the routine returns a status in R0 and the pointer to
                the allocated structure in R1.   We also fixed a
                typographical error in INETACP_SLIP.MAR, in  routine
                DETACH_VIRTUAL_TERMINAL, where a movl should have been a
                movw.
    
    	4.  Upon entry to INET_SELECT, we no longer clear the field that
                holds the pointer to the temporary space until after we have
                rechecked it. When the caller passes a bad parameter or
                calls to  select an already selected device, we erase the
                pointer to  the temporary space allocated for a previous
                select call.
    
    	References:
    
    	1. CFS.24959, CFS.28452
    	2. CFS.29320
    
    ECO C	7-July-1995				Alpha and VAX
    
    	Images:
    
    	UCX$BGDRIVER.EXE			UCX V3.3-7C  (Alpha)
    	UCX$INTERNET_SERVICES.EXE		UCX V3.3-7C
    	UCX$INTERNET_SERVICES_V6.EXE		UCX V3.3-7C
    	UCX$INTERNET_SERVICES_SEC.EXE		UCX V3.3-7C
    	UCX$INTERNET_SERVICES_SEC_V6.EXE	UCX V3.3-7C
    	UCX$INETACP.EXE				UCX V3.3-7C
    
    	Problem:
    
            A system crash occurs at INETACP_USER_INFO_AST_CONT in the
            UCX$INET_ACP process, due to a corrupted SERV$L_REXEC_FLNK
            queue.
    
    	Solution:
    
    	In the code introduced for ECO B, in the solution for problem 2,
            a problem was introduced that corrupted the SERV$L_REXEC_FLNK
            queue. In an attempt to remove all substantive code from routine
            INETACP_USER_INFO_AST, it was forgotten that when the routine is
            called, the REQCB is already queued on the SERV$L_REXEC_FLNK
            queue.  Then when the same, already queued REQCB is queued to
            the AQB, the former queue becomes corrupted.  The solution is to
            REMQUE the REQCB while still in AST context and before INSQUEing
            again.
    
    	Reference:
    
    	CFS.29197
    
    ECO D	12-July-1995				Alpha and VAX
    
    	Images:
    
    	UCX$BGDRIVER.EXE			UCX V3.3-7D  (Alpha)
    	UCX$INTERNET_SERVICES.EXE		UCX V3.3-7D
    	UCX$INTERNET_SERVICES_V6.EXE		UCX V3.3-7D
    	UCX$INTERNET_SERVICES_SEC.EXE		UCX V3.3-7D
    	UCX$INTERNET_SERVICES_SEC_V6.EXE	UCX V3.3-7D
    	UCX$INETACP.EXE				UCX V3.3-7D
    
    	Problem:
    
    	A system crash occurs in UCX$INET_ACP process with KRNLSTAKNV.
    
    	Solution:
    
    	The source of this problem is that the UCX$INET_ACP process is
            calling UCX$ACCESS_SHR routines from kernel mode.  These
            routines result in  calls to RMS which does not support being
            called from kernel mode.
    
    	The solution is to introduce a mechanism that allows the ACP to
            essentially continue a thread begun in kernel mode into user
            mode and  then back to kernel mode.  The implementation includes
            reorganizing the ACP's use of its kernel mode stack.  From now
            on, the ACP switches to  a private kernel mode stack as soon as
            it enters kernel mode.  When  it wants to continue a thread into
            user mode, it calls routine INETACP_CONTINUE_IN_USER_MODE, which
            wraps up its current private  stack context, switches back to
            the normal kernel stack, and returns  back to user mode, where
            the request is processed.  When the user  mode request is
            finished, we call back to kernel mode at routine
            INETACP_CONTINUE_KERNEL, pick up the context left on the private
            stack, and continue.
    
    	References:
    
    	CFS.27841, CFS.28514, CFS.29394, CFS.30262
    
    ECO E	25-July-1995				Alpha and VAX
    
    	Images:
    
    	UCX$BGDRIVER.EXE			UCX V3.3-7E  (Alpha)
    	UCX$INTERNET_SERVICES.EXE		UCX V3.3-7E
    	UCX$INTERNET_SERVICES_V6.EXE	 	UCX V3.3-7E
    	UCX$INTERNET_SERVICES_SEC.EXE		UCX V3.3-7E
    	UCX$INTERNET_SERVICES_SEC_V6.EXE	UCX V3.3-7E
    	UCX$INETACP.EXE				UCX V3.3-7E
    
    	Problems:
    
    	1.  A system crash occurs in INET_GET_SINGLE_DATA due to an
                impossibly large value in SO$L_USER_OFFSET.
    
    	2.  A system crash occurs in P_DOOPTIONS (IP_INPUT_VMS.C) in a
                movc3 instruction with R0 containing 0.
    
    	Solutions:
    
    	1.  The crash is due to structure skew (INPCB structure) between
                MACRO and C modules (on VAX only).  The solution is to
                introduce a fill variable into the IN_PCB.H module to align
                subsequent fields and thereby eliminate the skew.  After the
                correction to the declaration, we recompile all the C
                modules that use the INPCB, which are: IN_PCB_VMS.C,
                IP_OUTPUT_VMS.C, TCP_INPUT_VMS.C, TCP_OUTPUT_VMS.C,
                TCP_SUBR_VMS.C, TCP_TIMER_VMS.C, TCP_USRREQ_VMS.C, and
                UDP_USRREQ_VMS.C.
    
    	2.  We called routine IFPTOIA and did not check the validity of
                the returned value.  The solution is to check the returned
                value for the value NULL and reject it instead of using it.
    
    	Reference:
    
    	CFS.30118
    
    ECO F   01-Aug-1995                             Alpha and VAX
    
            Images:
    
            UCX$INETACP.EXE                         UCX V3.3-7F
    
            Problem:
    
            A system crash occurs in INETACP_FORMAT_REMOTE due to processing
            of an invalid UCB. It most probably occurs when a TELNET session
            is being terminated during closure of devices.
    
            Solution:
    
            The crash is most likely due to a timing issue when the INET_ACP
            tries to close a device to which a channel has already been
            deassigned. In trying to do so, since the UCB in question is no
            longer valid, we try to use this UCB and cause  a crash due to
            incorrect information. This was found upon analysis of the crash
            dump when we looked at the UCB that was being used to close the
            device.
    
            In INETACP_TN_CLOSE we ensure that the device being closed is
            actually still open by the INET_ACP. Using $GETDVI, we get the
            device unit number and compare it to the unit in the device UCB.
            If the channel is invalid or the unit numbers are different, we
            do not attempt to continue closing the device. If for any reason
            (timing?) the device is already closed, we avoid using the
            invalid UCB to process things further, thus avoiding a system
            crash.
    
            Reference:
    
    	CFS.30627
    
    ECO G   16-Aug-1995                 Alpha and VAX
    
            Image:
    
            UCX$INETACP.EXE             UCX V3.3-7G
    
            Problem:
    
            Previous fix (ECO D/E) had the side-effect of causing incorrect
            offset data to be returned by IO$_ACPCONTROL QIOs in which a
            HOSTENT_OFFSET or NETENT_OFFSET structure was requested.
    
            Solution:
    
            Update the offsets in the copy of the buffer that will be
            returned, not in the original buffer written by UCX$ACCESS_GET.
    
            Reference:
    
            None; discovered during internal testing.  This problem prevented
            the NFS client from operating properly.
    
    ECO 2 Updates:
    --------------
    ECO H   07-Sep-1995                  Alpha and VAX
    
            Image:
    
                UCX$INETACP.EXE             UCX V3.3-7H
    
            Problem:
    
            The REXEC server should return the first byte of acknowledgment
            correctly. A zero should be returned if there were no problems
            in creating/authenticating the process and a 1 (or a positive
            number) should be returned if there was an error.
    
            Typically from a user's point of view the problem would be seen
            if the rexec command (from a U*ix machine) or rsh command (with
            username and password) were issued to an OpenVMS host with
            either the username and/or password being correct. In such a
            case, the host issuing the command would receive a first byte of
            zero indicating success when it was actually a failure to
            execute the remote command. Subsequently the REXEC server would
            return a 1 and the failure message, but for certain applications
            this might be too late.
    
            Solution:
    
            Rexec service should send an ASCII zero as the first byte only
            when there is no error in creating/authenticating the server
            process. We always sent a 'null' byte on the output port,
            following it up with a '1' later if there was an error. Instead,
            we now send this positive acknowledgment in the driver when we
            are writing out the first few bytes as output. In the case of an
            error, we clear the ccl bit in the UCB so that there is no
            carriage control associated with the with the output. Thus, the
            positive acknowledgment that is sent with carriage control
            enabled is completely avoided.
    
            References:
    
            CFS.22776, CFS.30992
    
    ECO 3 Updates:
    --------------
    ECO I   23-Sept-1995                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7I  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7I
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7I
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7I
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7I
            UCX$INETACP.EXE                     UCX V3.3-7I
    
            Problem:
    
    	System crash in UCX$INET_ROUTED process immediately after
            deleting the SLIP interface.
    
            Analysis:
    
    	The crash is due to a window between the deallocation of the
            VCIB for the SLIP interface and the deallocation of the IF_UCB
            structure for this same interface.  During this time there is a
            possibility for code to reference the deallocated VCIB, which
            results in the crash.
    
    	Solution:
    
    	In INET_SLIP_CLOSE, in the INET_SLIP.MAR module, we now clear
            the IF_UCB$L_VCIB_IP field as soon as we deallocate the VCIB.
    
            Reference:
    
    	CFS.30062
    
    ECO K   28-Sept-1995                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7K  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7K
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7K
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7K
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7K
    
            Problem:
    
    	Multiple pseudo-interfaces sharing a physical interface cannot
            all communicate across a wide-area network unless IP forwarding
            is enabled.
    
            Solution:
    
    	In INET_SOURCE_CHECK, loop through the list of all pseudo
            interfaces before disallowing a packet which does not at
            first appear to be local.
    
            Reference:
    
    	CFS.30905
    
    ECO L   29-Sept-1995                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7L  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7L
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7L
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7L
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7L
            UCX$INETACP.EXE                     UCX V3.3-7L
    
    	Problem:
    
    	Carriage control problems (incorrect printing of CCL characters)
            during RSH/REXEC execution.
    
            Solution:
    
    	Incorporate carriage control for writes by the RSH/REXEC server.
            It now emulates the carriage control functions for a terminal
            driver. Only when the DEV$V_CCL bit in the UCB is set, we use P4
            to determine the carriage control behavior desired. The
            specifications for the carriage control functions are the same
            as that documented for the terminal driver under the section
            "Write Function Carriage Control". Since only the RSH/REXEC
            server use the DEV$V_CCL bit, P4 will act as a carriage control
            modifier only for this server. P4 for any other writes will
            still behave as before (i.e., the current support of P4 as a
            flag to specify NBIO, MSG_PEEK and OOB still holds good).
    
            Reference:
    
    	CFS.30821
    
    ECO M   5-Oct-1995                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7M  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7M
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7M
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7M
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7M
            UCX$INETACP.EXE                     UCX V3.3-7M
    
            Problem:
    
            System pool fills up with VCRPs, exhausting pool, causing a
            CLUEXIT.
    
            Solution:
    
    	Problem is essentially the same as the one that caused us to
            invent adjTCPwindow, for deferred TCP window adjustment, but in
            this case it is for UDP.  Basically, UDP datagrams are received
            by the BGDRIVER and passed up to PWIP, but although they are not
            consumed immediately, in the BGDRIVER we update the socket
            buffer counters as though they had been consumed.  The result is
            that a flood of datagrams can then be received.  The solution is
            to defer the accounting in the socket buffer until the datagrams
            are consumed by the PWIP client.
    
            Note that this fix entails changes to both PWIPDRIVER and to the
            NET facility.
    
    	Reference:
    
    	CFS.31492
    
    ECO 5 Updates:
    --------------
    ECO N   18-Oct-1995                  Alpha and VAX
    
            Images:
    
            UCX$BGDRIVER.EXE                    UCX V3.3-7N  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7N
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7N
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7N
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7N
            UCX$INETACP.EXE                     UCX V3.3-7N
    
            Problem:
    
    	System crashes during shutdown, due to deleting an interface
            that has contradictory data in its IF structure.  Namely, the IF
            is for a SLIP device (i.e., SLx) but the IF$B_IFTYPE field
            indicates an Ethernet device.
    
            Solution:
    
    	The problem is a flaw in the logic that creates pseudo
            interfaces. Creating a pseudo interface on an existing SLIP
            interface produced the inconsistent data structures that led to
            the crash.  This can be fixed in one of two ways; namely by
            prohibiting the creation of pseudo interfaces on SLIP lines or
            by adding logic to create them in a consistent manner.  Analysis
            of the problem reveals that it would require a substantial
            investment of time to add the functionality to allow pseudo
            interfaces on SLIP lines and the benefit of this proposed
            functionality seems marginal. Therefore, we have opted to prevent
            this from occurring.
    
            Reference:
    
    	CFS.33896
    
    ECO 6 Updates:
    --------------
    ECO O   30-Oct-1995                  Alpha and VAX
    
            Images:
    
            UCX$BGDRIVER.EXE                    UCX V3.3-7O  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7O
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7O
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7O
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7O
    
            Problem:
    
    	TCP packets arriving out-of-order (as a result of intervening
            segments being dropped by the network, for example) could cause
            the low water mark to remain set upon completion of a READ
            operation using the IO$M_LOCKBUF modifier.  If the following
            READ specifies a smaller buffer size, then it might never
            complete due to the lingering effects of the one which was
            satisfied with re-ordered packets.
    
            Solution:
    
    	Always zero the low water mark upon completion of any READ
            operation where IO$M_LOCKBUF was specified.
    
    	Reference:
    
    	CFS.33932
    
    ECO P   8-Nov-1995                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7P  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7P
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7P
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7P
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7P
            UCX$INETACP.EXE                     UCX V3.3-7P
    
    	Problem:
    
    	Inadequate ARP table causes too many ARP messages to be
            broadcast.  Also, correct counting of ARP messages to properly
            account for which ones are broadcast and which are not
            (INET_IF_VCI.MAR)
    
            Solution:
    
    	Allow for dynamic allocation of ARP table at UCX startup.  Note
            that this is an interim fix that will require UCP support in a
            future release.
    
            Reference:
    
    	CFS.33563
    
    ECO Q   17-Nov-1995                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7Q  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7Q
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7Q
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7Q
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7Q
    	UCX$INETACP.EXE                     UCX V3.3-7Q
    
    	Problem:
    
    	System crash in security driver when using the local interface.
    
            Solution:
    
    	In INET_IPINTR (INET_IN_OUT.MAR), in security driver conditional
            code, check for zero pointer to IF_UCB, and if so, use the Local
            interface.
    
            Reference:
    
    	Internal report
    
    ECO R   6-Dec-1995                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7R  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7R
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7R
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7R
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7R
            UCX$INETACP.EXE                     UCX V3.3-7R
    
            Problems:
    
    	1.  Synchronization crashes in PWIP.
    
            2.  The enhancement to allow >64KB transfers broke some older
                applications that make use of the P5 vectored write
                mechanism.
    
            3.  Crash (Alpha only) after having deallocated the SLIP
                structure to the INETCB free list where it was re-allocated
                and corrupted.
    
            Solutions:
    
            1.  Along with PWIP changes done in PWIP ECO F, we clear the
                UCB$L_BG_TEL_UCB field when we deassign a BG UCB.
    
            2.  Go back to accepting only 16 bits of transfer length.
    
            3.  Dispatching for the REQCB$C_DEACTIVATE_SLIP function was
                inexplicably left out of the Alpha specific dispatch table.
                As a result, a SLIP structure, queued as an REQCB to the AQB
                was prematurely deallocated, reallocated, and then trashed.
                The fix is to add dispatching for this function to the
                table.
    
            References:
    
            1. Internal report
            2. CFS.35548
            3. CFS.35206
    
    ECO 7 Updates:
    --------------
    ECO S	14-Dec-1995                  Alpha and VAX
    
            Images:
    
            UCX$BGDRIVER.EXE                    UCX V3.3-7S  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7S
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7S
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7S
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7S
            UCX$INETACP.EXE                     UCX V3.3-7S
    
            Problem:
    
    	Second attempt at fixing following problem. System pool fills up
            with VCRPs, exhausting pool, causing a CLUEXIT.
    
            Solution:
    
    	This problem arises when we receive many duplicate TCP packets
            each only containing a FIN and also containing a sequence number
            one higher than the one we are expecting.  As a result, we queue
            these redundant packets until all pool is consumed with them.
            The problem is that we do not recognize them as redundant.
    
            With the addition of a logic, we will recognize the redundant
            packets and deallocate them immediately.
    
            Reference:
    
    	CFS.34368
    
    ECO T   28-Dec-1995                  Alpha and VAX
    
            Images:
    
            UCX$BGDRIVER.EXE                    UCX V3.3-7T  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7T
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7T
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7T
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7T
            UCX$INETACP.EXE                     UCX V3.3-7T
    
            Problem:
    
    	System crash, INVEXCEPTN, due to VCRP$L_DEALLOC_RTN field being
            zero.
    
            Solution:
    
            The solution is to test for the error and then to skip  the
            deallocation in this case.
    
            Reference:
    
    	CFS.36199
    
    ECO U   28-Dec-1995                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7U
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7U
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7U
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7U
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7U
    
            Problems:
    
    	After urgent TCP data (OOB data) arrives and is read, the socket
            is still considered to be in OOB state until non-OOB data
            arrives. The select() call, however, was returning immediately
            in this case due to the OOB state, even when no OOB data was
            available.
    
            Solutions:
    
    	Do not return from select() with an exception flag if the
            receive buffer is empty.
    
            Reference:
    
    	CFS.36143
    
    ECO V   4-Jan-1996                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7V  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7V
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7V
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7V
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7V
            UCX$INETACP.EXE                     UCX V3.3-7V
    
            Problem:
    
    	If 2 processes are sharing a socket and process A calls $DASSGN
            on that shared BG device, I/O queued to the device by process B
            is also canceled.
    
            Solution:
    
    	In INET$CANCEL, initialize two new fields in the UCB so that
            later on, downstream, we can determine that this is NOT the last
            deassign of this device, and in this case we selectively cancel
            only the I/Os that  belong to the process doing the $DASSGN.
    
            References:
    
    	CFS.33352, CFS.26480
    
    ECO W   11-Jan-1996 - 29-Jan-1996           Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7W  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7W
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7W
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7W
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7W
            UCX$INETACP.EXE                     UCX V3.3-7W
    
            Problems:
    
    	1.  Applications such as the PATHWORKS mail server, which
                disable carriage control (CCL) after being invoked through
                RSH or REXEC, were preventing the initial NULL byte from
                ever being sent.
    
            2.  System crash in TNDRIVER with INVEXCEPTN due to continuing
                sporadic synchronization problems.
    
            3.  System enters a high IPL loop repeatedly calling
                COM$FLUSHATTNS from INET_FLUSH_ALL_AST.
    
            4.  System crash in EXE_STD$PRIMITIVE_FORK, trying to deliver
                what is supposed to be an Attention AST, but is really a
                pointer to a the PWIPDRIVER receive socket call back
                routine.
    
            5.  When the UCX TELNET server accepted a connection from a host
                with a 12-digit IP address, that host's name was not
                correctly resolved. Instead, the IP address was shown.
    
    	6.  Automatically configuring SLIP interfaces using the "UCX SET
                CONFIG INTERFACE" command, fails while hand configuring of the
                same interface succeeds.
    
            7.  System crash in data link driver, when we return to the data
                link  driver after its having called us back from a
                SYNCH_JSB invocation.  At the time we return to the data
                link R4 contains a zero, and the VCIB has been deallocated.
    
            Solutions:
    
            1.  Allow the DCL procedure which starts RSH and REXEC
                connections to perform the first output, guaranteeing
                inclusion of the NULL. Also, do not add a leading LF
                character before the first output, since this is unnecessary
                and produces an extra blank line.
    
            2.  The main part of this fix is to introduce more extensive
                validation code in the TNDRIVER.  However some of the data
                to be validated comes from the BGDRIVER and is most
                conveniently passed to the TNDRIVER in the INETCB structure.
                Therefore, we create a new field in the INETCB, the
                INETCB$L_BG_UCB_SIZE_TYPE_FLCK field, and initialize it in
                INETACP_INIT.MAR, in routine, INETACP_INIT_INETCB.  The data
                is referred to in the TNDRIVER in module
                UCX$TN_SERVER_MAIN.MAR, in routines TN$START_COMMON and
                TN_UCB_TO_BG_UCB.
    
                The INETACP code additions are benign and can coexist with
                previous TNDRIVER versions, however the new TNDRIVER
                requires the new INETACP.
    
            3.  This problem was introduced by ECO V. The problem arises in
                a loop where we call COM$FLUSHATTNS.  The solution is to
                only traverse  the loop once when doing selective cancel
                I/O.
    
            4.  This problem is a synchronization problem between PWIP and
                the the BGDRIVER (or UCX$INTERNET_SERVICES for VAX).  At the
                time of the crash we have a SOCKET structure that points to
                a UCB but the corresponding UCB does not point back to the
                SOCKET.  This apparently occurs when we are tearing down a
                connection in PWIP and some data comes into the SOCKET.  The
                fix for this requires changes in NET and in PWIP.  In NET,
                we define two new bits: UCB$X_BG_PWIP in the UCB$W_BG_FLAGS
                word and SOCKBUF$X_PWIP in the SOCKBUF$L_FLAGS field. In
                NET, these bits are only looked at in INET_MAIN.MAR.  Both
                of these bits are set and cleared in PWIP.  Also,
                previously PWIP only set the UCB$X_BG_SELECT bit in the
                UCB$W_BG_FLAGS word instead of the first of these new bits.
                This led to some confusion in INET_MAIN.MAR.
    
                Now we unambiguously label PWIP devices. Note that the
                SOCKBUF$L_FLAGS field is declared in INET_NPGD.SDL for macro
                code and a corresponding SB_FLAGS field is declared in
                SOCKETVAR.H for the C code. For consistency's sake, we also
                declare a new bit, SB_PWIP, to correspond to SOCKBUF$X_PWIP
                even though it is not referred to in the C code.
    
            5.  Do not add a trailing space character to the ASCII form of
                the IP address.  This extra character caused the address to
                exceed the legal length, in the case of a 12-digit address,
                and prevent translation.
    
    	6.  When the configuration database contains an automatic SET
                INTERFACE for a SLIP interface, the UCP implicitly performs
                a UCX SET INTERFACE command that includes the /BROADCAST
                mask parameter.  Since SLIP interfaces do not support
                broadcasting, this causes us to reject the interface.  The
                solution is to introduce code in INETACP_SLIP, in routine,
                CREATE_P5_BUFFER, to explicitly ignore the command to set a
                broadcast address on the interface.
    
            7.  The normal flow on VCI port management calls to the data
                link is we issue a ASYNCH_JSB (which returns to our
                caller); VCI calls us back when the port management
                function is initiated; VCI calls us back after the port
                management event associated with the completion of the
                function occurs.
    
                The bug was that if the VCI callback indicated an error, we
                assumed that they would not make the second callback and
                that therefore we should perform cleanup at the time of the
                first callback.  The result was that we cleaned up things
                that the data link still had need of.
    
                The fix is to always assume that the second callback will
                occur, and use a timeout mechanism to get us going for
                cleanup if they do  not give us the second callback. In that
                way, we do not perform  the cleanup prematurely.
    
            References:
    
            1. Reported informally via the PATHWORKS group
            2. CFS.36056
            3. Internal testing
            4. CFS.33756
            5. CFS.27194
    	6. Internal reports
    	7. CFS.37081
    
            Notes:
    
            1.  To constitute a complete fix for the PATHWORKS mail server
                problem, this new ECO must be used in conjunction with the
                new startup files (UCX$RSHD_STARTUP.COM and
                UCX$REXECD_STARTUP.COM) from the INSTALL component.
    
            2.  The INETACP code additions are benign and can coexist with
                previous TNDRIVER versions, however the new TNDRIVER
                requires the new INETACP.
    
            3.  These code additions require the corresponding new
                PWIPDRIVER, if one is running PWIP.
    
    ECO 8 Updates:
    --------------
    ECO X   14-Feb-1996                  Alpha and VAX
    
            Images:
    
            UCX$BGDRIVER.EXE                    UCX V3.3-7X  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7X
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7X
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7X
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7X
            UCX$INETACP.EXE                     UCX V3.3-7X
    
    ECO Y   27-Feb-1996                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7Y  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7Y
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7Y
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7Y
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7Y
            UCX$INETACP.EXE                     UCX V3.3-7Y
    
            Problem:
    
    	1.  On VAX systems, when SLIP is enabled on a terminal line, the
                UCB for the terminal has an unrelocated value for its FDT.
                This might result in a crash.
    
            2.  Problems with shared sockets.  First the selective cancel
                I/O functionality introduced in ECO D and refined in ECO E
                still did not properly select I/Os to be canceled.  Second,
                when I/Os were selectively canceled, if the active IRP on a
                queue was canceled, the queue was left in limbo, with no
                mechanism for getting it restarted.  Third, a day one design
                flaw was found in the code that implements the basic
                mechanism that manages the read, write and miscellaneous
                queues on a BG device.  This flaw effectively precluded true
                shared sockets and manifested itself in the following way.
                When a queued operation completed, the next operation on the
                queue was then handled in the context of the process that
                handled the first operation, even when the new operation did
                not belong to this process.  The result was corruption of
                the address space of the process within whose context the
                erroneous I/O was handled.
    
            3.  The maximum socket listener backlog of 5 was too small for
                modern applications.
    
            Solution:
    
            1.  In INET_SLIP_OPEN in INET_SLIP.MAR, we were already
                relocating the class driver vector table.  At the same time
                we now relocate the DDT$L_FDT field.
    
            2.  The first problem problem was solved by tightening the
                selection criteria in the INET_SHUTDOWN_FLUSH_*
                (INET_ACCESS.MAR) family of routines so as to properly
                select the I/Os to be canceled and to then re-construct the
                queues.  The second problem, restarting stalled queues was
                solved by introducing a new routine,  QUEUE_INET_KAST, in
                INET_MAIN.MAR, which is a simplified version  of
                INET_IRP_UP_1, and whose purpose is to restart queues in the
                context of a particular process.
    
    	    The third problem, where I/O request were being serviced in
                the wrong context, was solved by introducing a test for the
                proper context into the main queue dispatching routine,
                INET_ENQ_IO_RESTART, in INET_RCV_XMT.MAR.  When a mis-match
                is  found, the queue is now left dormant, but a call is made
                to the  new routine, QUEUE_INET_KAST, to restart the queue
                in the proper process context.
    
            3.  Increase the backlog to 32 (up to 512, for privileged
                processes).
    
            References:
    
            1. Security report
            2. Internal report of hung processes, in RWAST state,
               running WWW server
    
    ECO Z   29-Feb-1996                  Alpha and VAX
    
            Images:
    
            UCX$BGDRIVER.EXE                    UCX V3.3-7Z  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7Z
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7Z
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7Z
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7Z
            UCX$INETACP.EXE                     UCX V3.3-7Z
    
            Problem:
    
    	Code review of the ECO G (V4.0) fix turned up a very subtle and
            unlikely to occur problem in the code that should be corrected
            for shared sockets.  The problem has to do with the INET_KAST
            mechanism that delivers an AST to the process that owns an IRP
            that needs to be "resumed".  In the unlikely event that two IRPs
            on the same UCB, belonging to different processes, need to be
            "resumed" simultaneously, then the second of these IRPs will be
            processed in the context of the wrong process.  The reason that
            this appears to be so unlikely is that for this to happen, there
            would have to be ongoing I/O on at least two of the queues of
            one UCB, with the active IRPs belonging to different processes,
            and the I/Os would need "resumption" within a very small window.
    
    	Solution:
    
    	The solution to this is to add a test in INET_KAST, in
            INET_MAIN.MAR, just before we "resume" an IRP.  At that point we
            test that we are executing in the context of the process that
            owns the IRP.  If we are then we just proceed.  If we are not,
            we then queue the ACB to the process that owns the IRP, and we
            exit from the current AST running in the context of the wrong
            process.  This will in effect cause us to re-enter the routine
            we are currently executing in, INET_KAST, but in the context of
            the correct process.  We will then continue correctly.
    
            Reference:
    
    	Internal code review
    
    ECO AA   1-Apr-1996                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7AA  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7AA
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7AA
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7AA
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7AA
            UCX$INETACP.EXE                     UCX V3.3-7AA
    
            Problems:
    
    	1.  With the CASE_INSENSITIVE flag enabled, proxies were not
                being correctly found in the communication proxy cache.
    
    	2.  System crash in INET_SOCONNECT due to the fact that
                UCB$L_BG_SOCKET contains the value zero.
    
            Solution:
    
    	1.  Correct and simplify the sequential proxy lookup routine.
    
    	2.  After picking up the contents of UCB$L_BG_SOCKET, validate
                its contents, and if invalid terminate the I/O request with
                the SS$_BADPARAM status.
    
            Reference:
    
    	1.  Internal report
    	2.  CFS.40207
    
    ECO 9 Updates:
    --------------
    ECO B   23-APR-1996                  Alpha and VAX
    
            Images:
    
            UCX$BGDRIVER.EXE                    UCX V3.3-7AB  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7AB
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7AB
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7AB
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7AB
            UCX$INETACP.EXE                     UCX V3.3-7AB
    
            Problems:
    
    	System crash in INET_SOACCEPT due to the fact that
            contains the value zero.  This happened at UCX shutdown.
    
            Solutions:
    
    	After picking up the contents of INET$GL_PTR_INETCB, validate
            its contents by making sure that it is a system address.
            If it is invalid terminate the I/O request with the
            SS$_DEVNOTMOUNT status.
    
            Reference:
    
    	CFS.39581
    
    ECO AC   1-MAY-1996                   Alpha and VAX
    
    	Equivalent to V4.0 ECO L.
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7AC  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7AC
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7AC
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7AC
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7AC
            UCX$INETACP.EXE                     UCX V3.3-7AC
    
            Problems:
    
    	System crash in INET_SELECT_UNBUILD_LIST due to a corrupt
            select list.
    
            Solutions:
    
    	Apparently in fixing the problems associated with shared sockets
            (ECOs Y and Z above) we changed the behavior slightly so that we
            failed to ALWAYS remove a UCB from a select list before
            deassigning and deallocating the UCB.  As a result it was
            possible to have a deallocated UCB remaining on a select list.
    
            In INET$CANCEL_COMMON we now call a new routine,
            INET_SELECT_REMOVE_UCB, that unconditionally removes an about to
            be deallocated UCB from any select list that it might be on.
    
            Reference:
    
    	Internal report
    
    ECO AD  2-MAY-1996                  Alpha and VAX
    
            Image:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7AD  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7AD
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7AD
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7AD
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7AD
            UCX$INETACP.EXE                     UCX V3.3-7AD
    
            Problems:
    
    	System crash AT TNDRIVER+2C6 due to corruption at TNDRIVER+2CC.
    
            Solutions:
    
    	The problem arises because of the overlaying of UCB$L_PDT by the
            UCX defined field UCB$L_ACP_LINK in both BG and TN UCBs.  In UCX
            shutdown, under certain conditions, the TTDRIVER will
            misinterpret the UCB$L_PDT field and use it as a pointer into
            what it thinks is another UCB.  The TTDRIVER will then clear a
            longword at an offset from the pointer. Since in our case we
            have a pointer into the TNDRIVER at UCB$L_PDT, we wind up with
            the TTDRIVER clearing a longword of code in the TNDRIVER,
            leading to a subsequent crash when UCX is re-started.
    
    	References:
    
    	Internal reports
    
    ECO AE  15-MAY-1996                 Alpha and VAX
    
    	Equivalent to V4.0 ECO O.
    
    	Image:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7AE  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7AE
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7AE
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7AE
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7AE
            UCX$INETACP.EXE                     UCX V3.3-7AE
    
            Problem:
    
    	System crash at IP_FORWARD+1F8, after bringing UCX down and then
            restarting it.
    
            Solution:
    
    	Initialize the IPFORWARD_RT cache to eliminate the possibility
            that we will try to forward a packet using a stale IF pointer.
    
            Reference:
    
    	CFS.40260
    
    ECO 10 Updates:
    --------------
    ECO AF  12-JUL-1996                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE		    UCX V3.3-7AF
    	UCX$INTERNET_SERVICES.EXE           UCX V3.3-7AF
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7AF
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7AF
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7AF
            UCX$INETACP.EXE                     UCX V3.3-7AF
    
    	Problem:
    
    	1.  When the originating and target usernames match in an
                incoming request, but do not match in the proxy database,
                the proxy is not properly located.
    
    	2.  The routing table gets filled with entries that all have
                the RTF_UP flag bit cleared, but have a non-zero reference
                count.
    
            Solution:
    
    	1.  Change the way matching usernames are handled during proxy
                lookup.
    
       	2.  In routine rtalloc, in ROUTE_VMS.C, prevent overwriting of
                the ro->ro_rt field before calling rtfree for this rtentry.
                This prevents the orphaning of old entries with an outstanding
                refcount.
    
            Reference:
    
    	CFS.42195
    
    ECO AG  13-JUL-1996 			Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7AG
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7AG
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7AG
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7AG
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7AG
            UCX$INETACP.EXE                     UCX V3.3-7AG
    
            Problems:
    
            Fix number 2, in the above ECO may have a curious side effect.
            It was observed that the default route is not created properly.
    
            Solutions:
    
            Until the above behavior can be verified, fix number 2, of ECO
            AF is removed, and the previous version of ROUTE_VMS.C has been
            restored.
    
            Reference:
    
            Internal testing.
    
    ECO 11 Updates:
    --------------
    ECO AH  6-AUG-1996                  Alpha and VAX
    
            Images:
    
            UCX$BGDRIVER.EXE                    UCX V3.3-7AH  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7AH
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7AH
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7AH
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7AH
            UCX$INETACP.EXE                     UCX V3.3-7AH
    
            Problems:
    
    	1.  The continuing saga of the routing table getting filled
    	    with entries that all have the RTF_UP flag bit cleared,
    	    but have a non-zero reference count.
    
            2.  System crash in routine ip_output due to INP_ROUTE.RO_RT
    	    pointing at deallocated rtentry.
    
            Solutions:
    
    	1.  First we reinstate the fix mentioned in ECO AF but withdrawn
    	    in ECO AG.  The problem noted there was a build problem only.
    	    Also, in routine ip_output, in IP_OUTPUT_VMS.C we were
    	    overwriting the static global route structure, 'iproute',
    	    without first doing an RTFREE of the rtentry associated with
    	    the route.  The result is an rtentry whose refcnt is
    	    permanently increased by 1, and which therefore will never go
                away.  The solution is to do the RTFREE.
    
            2.  In routine rtpurge, an incorrect call to rtfree has the
                possibility of deallocating an rtentry while leaving an
                INP_ROUTE.RO_RT field still pointing at it.  This is the
                exact situation cited above.  The solution is to remove the
                call to rtfree.
    
            References:
    
            CFS.43319, CFS.42499
    
    ECO 12 Updates:
    ---------------
    ECO   10-Sept-1996                  Alpha and VAX
    
            Images:
    
    	UCX$BGDRIVER.EXE                    UCX V3.3-7AI  (Alpha)
            UCX$INTERNET_SERVICES.EXE           UCX V3.3-7AI
            UCX$INTERNET_SERVICES_V6.EXE        UCX V3.3-7AI
            UCX$INTERNET_SERVICES_SEC.EXE       UCX V3.3-7AI
            UCX$INTERNET_SERVICES_SEC_V6.EXE    UCX V3.3-7AI
            UCX$INETACP.EXE                     UCX V3.3-7AI
    
            Problem:
    
    	Continuing occurrences of problem reported in ECO M.  System
            pool fills up with VCRPs, exhausting pool, causing a CLUEXIT.
    
            Solution:
    
    	This problem is really not a UCX problem, but rather a datalink
            driver problem.  However, we in UCX can add a small amount of
            code and prevent the problem from crashing the system.  The
            problem is triggered by a broadcast storm, from an errant
            Windows NT node, that produces thousands and thousands of
            broadcast datagrams so quickly that all pool is overrun even
            before we get to look at the first of them.  Normally UCX
            accepts a datagram from the datalink driver and forks on it
            (i.e. queues it for later processing) so that control can be
            immediately passed back to the datalink driver. When the
            datalink finishes its tasks, we go to process the datagrams on
            our queue.  In the case here, the datalink receives so many
            datagrams that it does not finish with its tasks until the
            queued datagrams occupy all of pool.  The fix that we put in
            artificially limits the number of such datagrams that we will
            queue to ourselves.  When the number of unprocessed queued
            datagrams passes a threshold value (1000 for now) we begin
            deallocating all datagrams above this threshold.  This in effect
            prevents the datalink from overrunning pool since each new
            received datagram can use the deallocated space.
    
    	References:
    
    	CFS.44630, CFS.31492
    
    ECO 13 Updates:
    --------------
    
    	Note:
    
    	The ECO 12 problem with the MTHRTL ID is fixed.
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3 UCX$INETDRIVER.EXE
    ---------------------------------------------------------------------------
    ECO 1 Updates:
    --------------
    ECO A   20-Jun-1995                  Alpha and VAX
    
            Images:
    
    	UCX$INETDRIVER.EXE           UCX V3.3-7A
    
    	Problem:
    
    	The system hangs when a process running in a Kernel AST thread
            tries to reacquire the I/O Database Mutex that it already owns.
    
            Solution:
    
            The INET_CANCEL routine, which calls EXE$CANCELN, explicitly
            releases the I/O Database Mutex before calling EXE$CANCELN and
            explicitly reacquires it after return from EXE$CANCELN.  This is
            done because EXE$CANCELN lowers IPL to 0, thereby leaving the
            possibility of being interrupted by an AST that might try to
            reacquire the Mutex.
    
            INET_CANCEL routine reorganized.
    
            Reference:
    
    	CFS.29258
    
            Problem:
    
    	Thread startup fails to initialize OP_R_FLAGS.  This can
    	lead to problems with asynchrony and I/O completion.
    
            Solution:
    
            When initializing the thread, clear OP_R_FLAGS to ensure that
            the initial context is clear.
    
            References:
    
            CFS.29331
            CFS.29334
    
    ECO 8 updates:
    ---------------
    
    ECO B   20-Feb-1996                     Alpha and VAX
    
            Images:
    
    	UCX$INETDRIVER.EXE      UCX V3.3-7B
    
    	Problem:
    
    	Multi-processor system crashes with CPUSPINWAIT bugcheck.
    
            Solution:
    
    	The I/O completion inserts the IRP into the CPU-specific
            I/O completion queue and posts an interrupt to the CPU's
            I/O completion routine.  This code executed at IPL 0 and,
            if the process was rescheduled onto another processor, it
            is possible that the INSQUE instruction was attempting to
            insert the IRP onto the last processor's I/O completion
            queue.  This could cause corruption in the IRP/ACB as
            INSQUE is not interlocked between multiple processors.
    
            The correction elevates IPL to IPL$_SCHED to prevent the
            rescheduling of the process during this critical set of
            instructions.
    
    	Reference:
    
    	CFS.34601
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3 PWIP images
    ---------------------------------------------------------------------------
    ECO 1 updates:
    ---------------
    
    ECO A   9-June-1995                     Alpha and VAX
    
            Note: This ECO is a forward retrofit of ECOs C and D for V3.2.
    
            Images:
    
            UCX$PWIPDRIVER.EXE 	 	UCX V3.3-7A
    
    	Problems:
    
    	1.  A system crash occurs in PANIC (in UCX$INTERNET_SERVICES or
                UCX$BGDRIVER) called from SBDROP, due to an inconsistent
                receive socket buffer showing non-zero CC (Character Count)
                with no MBUFs hanging off the socket buffer.
    
    	2.  A system crash occurs in adjTCPwindow when doing arithmetic
                on fields of a stale UCB.
    
    	Solutions:
    
    	1.  The problem is due to premature clearing of the
                UCB$M_BG_Defer_WinAdj flag in routine
                PWIP_HANDSHAKE_TRANSPORT in PWIPDRIVER_SUPP.C. The fix
                eliminates clearing this bit in this routine.
    
    	2.  This problem is triggered by an upstream MBUF being freed
                after the connection has been closed.  Previously, MBUFs
                that passed upstream had a pointer to the UCB and if the
                MBUF was not deallocated before the connection disappeared,
                there was a risk of using a stale UCB.
    
    	    The solution to this is to create a new structure, the DWAB
                (Deferred Window Adjustment Block) which is guaranteed to
                persist until the last MBUF is returned.  We now point the
                MBUFs to the DWAB instead of to the UCB.
    
    	    Note that this fix involves changes to both PWIPDRIVER and
                to the NET facility (UCX$INTERNET_SERVICES.EXE for VAX and
                UCX$BGDRIVER.EXE for Alpha).
    
    	Reference:
    
    	CFS.26962
    
    ECO 3 Updates:
    --------------
    ECO B   22-Sep-1995             Alpha and VAX
    
            Images:
    
                UCX$PWIPACP.EXE	UCX V3.3-7B
    
            Problems:
    
            IO$_SETMODE to set socket option SO_REUSEADDR is failing.
            Also set TCP option, TCP_NODELAY.
    
            Solutions:
    
    	Fixed.
    
            Reference:
    
            CFS.32670
    
    ECO C   5-Oct-1995             Alpha and VAX
    
            Images:
    
    	UCX$PWIPDRIVER.EXE	UCX V3.3-7C
    
            Problems:
    
            1.  System pool fills up with VCRPs, exhausting pool, causing a
                CLUEXIT.
    
    	2.  Receipt of SS$_UNREACHABLE causes connections to disappear.
    
            Solution:
    
            1.  Problem is essentially the same as the one that caused us to
                invent adjTCPwindow, for deferred TCP window adjustment, but
                in this case it is for UDP.  Basically, UDP datagrams are
                received by the BGDRIVER and passed up to PWIP, but although
                they are not consumed immediately, in the BGDRIVER we update
                the socket buffer counters as though they had been consumed.
                The result is that a flood of datagrams can then be
                received.  The solution is to defer the accounting in the
                socket buffer until the datagrams are consumed by the PWIP
                client.
    
    	2.  In PWIP_READ, in PWIP_READ.C, when the return status
                from the  call to UCX_RECEIVE is SS$_UNREACHABLE, then we
                retry the call.
    
            Note that this fix entails changes to both PWIPDRIVER and to the
            NET facility (UCX$INTERNET_SERVICES.EXE for VAX and
            UCX$BGDRIVER.EXE for ALPHA).
    
    	Reference:
    
            CFS.31492, CFS.29873
    
    ECO 5 Updates:
    --------------
    ECO D   24-Oct-1995             Alpha and VAX
    
            Images:
    
            UCX$PWIPACP.EXE		UCX V3.3-7D
    
    	Problem:
    
            Crash in PWIP ACP due to invalid kernel stack
    
            Solution:
    
    	In PWIPACP.C, call MMG$EXPKSTK() to extend kernel stack by 4
            pages. This must be done in kernel mode so call via
            SYS$CMKRNL().  This is conditionalized to VAX only.
    
    	Reference:
    
    	CFS.33625
    
    ECO 6 Updates:
    --------------
    ECO E   20-Nov-1995             Alpha and VAX
    
    	Note, this ECO is a backward retrofit of a fix for V4.0.
    
            Images:
    
            UCX$PWIPDRIVER.EXE	UCX V3.3-7E
    
    	Problem:
    
            System crash due to pool corruption.  We typically see the
            pattern:
    
                    00000000  00000000  xxxxxxxx  yyyy0002
    
            where xxxxxxxx is one of the IP addresses of the crashing
            system, overwriting valid data in pool.
    
            Solution:
    
            The problem was found in routine BUILD_ADDR_ACK, in module
            PWIPDRIVER_ACK.C, where we allocate and fill in an MBLK with
            data. The last part of the data is an array of SOCKADDR_IN
            structures, which are filled in with the IP address(es) of the
            local system.  When the local system is multi-homed (i.e., it
            has more than one IP address) this array has more than one
            entry.  The problem was in the calculation for the address of
            the second and subsequent entries in this array. The calculation
            in error used the following "C" instruction:
    
                    sockaddr = sockaddr+sizeof(struct sockaddr_in);
    
            Since sockaddr was declared:
    
                    struct sockaddr_in *sockaddr;
    
            the result of the calculation was to add the SQUARE of the
            length of an entry to sockaddr, rather than the length of one
            entry.  This is because "C" considers each unit to be an entry
            structure length. The correct calculation is to replace the
            offending line with:
    
                    sockaddr = sockaddr + 1;
    
            The crash resulted from the calculation giving an address well
            beyond the end of the structure, falling into some other
            structure in pool. When pool checking is NOT on, this error may
            well go unnoticed for long periods of time since it is very
            likely that the corrupted memory is currently unallocated.
    
    	Reference:
    
    	CFS.34737
    
    ECO F   4-Dec-1995             Alpha and VAX
    
    	Note, this ECO is a backward retrofit of a fix for V4.0.
    
            Images:
    
    	UCX$PWIPDRIVER.EXE	UCX V3.3-7F
    
            Problem:
    
            Various crashes in PWIP due to synchronization problems. For
            example, one of the problems is due to the arrival of a
            downstream write after an upstream disconnect has arrived.
    
            Solution:
    
    	One of the sources of the lack of synchronization was that
            in several places in the code we were deassigning a BG device
            without having first done a QIO IO$_DEACCESS on the device.
            For normal UCX devices this is allowed, but for kernel
            interface access devices, as are all PWIP BG devices, this
            is not allowed.  Therefore, the solution was to add explicit
            IO$_DEACCESS|IO$M_SHUTDOWN QIO requests prior to deassigning
            the BG devices.  These changes were point into several
            routines in module PWIPACP_UCX.C.
    
            Another source of problem was the failure to verify that a
            connection was in the midst of being torn down.  To solve
            this we introduced two specific verification steps, one
            in PWIP_RAST (in PWIPDRIVER_READ.C) and the other in
            PWIP_WRITE (in PWIPDRIVER_WRITE.C).  Specifically, we
            verify in each case, whether the PDCB and the BG UCB mutually
            point at each other.  If not, we conclude that the connection
            is in the process of being torn down and we act accordingly.
    
            Reference:
    
            Internal testing
    
    ECO 7 Updates:
    --------------
    ECO G   16-Jan-1996             Alpha and VAX
    
            This corresponds to ECO B for V4.0
    
            Images:
    
        	UCX$PWIPDRIVER.EXE	UCX V3.3-7G
    
    	Problem:
    
    	System crash in EXE_STD$PRIMITIVE_FORK, trying to deliver what
            is supposed to be an Attention AST, but is really a pointer to a
            the PWIPDRIVER receive socket call back routine.
    
            Solution:
    
    	This problem is a synchronization problem between PWIP and the
            the BGDRIVER (or UCX$INTERNET_SERVICES for VAX). At the time of
            the crash we have a SOCKET structure that points to a UCB but
            the corresponding UCB does not point back to the SOCKET. This
            apparently occurs when we are tearing down a connection in PWIP
            and some data comes into the SOCKET.  The fix for this requires
            changes in NET and in PWIP.  In PWIP, we eliminate the
            BG_KERNEL_AST_HOOK bit (defined in PWIPDRIVER_UCX.H as
            equivalent to UCB$X_BG_SELECT) and define the new BG_PWIP
            (equivalent to the new NET bit UCB$X_BG_PWIP) and use it instead
            of BG_KERNEL_AST_HOOK. In a small change in routine
            PWIP_HANDRELEASE_TRANSPORT, we no longer always clear this bit.
            Now we only clear it if the UCB points to a SOCKET. This change
            corresponds to a change in INET_MAIN.MAR (in
            INET_DELIVER_ATTNAST) that will eliminate the cause of the
            crash.
    
            We also set the new SOCKBUF$x_PWIP bit in the RCV and XMT socket
            buffers in routine PWIP_HANDSHAKE_TRANSPORT and we clear them in
            routine PWIP_HANDRELEASE_TRANSPORT.
    
            Note that for the ECO stream, PWIPDRIVER_UCX.H explicitly
            defines SOCKBUF$M_PWIP as 0x20.  For the normal stream, this
            definition will be picked up from NET.
    
            Reference:
    
    	CFS.33756
    
            Note:
    
    	These code additions require the corresponding new
            BGDRIVER/INTERNET_SERVICES.
    
    ECO 8 Updates:
    --------------
    ECO H   15-Feb-1996              Alpha and VAX
    
           This corresponds to ECO C for V4.0
    
            Images:
    
            UCX$PWIPDRIVER.EXE	UCX V3.3-7H
    
    	Problem:
    
    	System crash in PWIP_HANDRELEASE_TRANSPORT, called from
            CLOSE_DEV, with the alleged BG UCB argument not really a BG UCB.
    
            Solution:
    
    	This problem is apparently another PWIP synchronization bug.
            We were handed a PDCB from upstream and we took the UCB pointer
            from it.  In order to alleviate the problem we will now verify
            that the purported UCB is still pointing back to the PDCB
            before writing into the UCB.
    
    	Reference:
    
    	CFS.33756
    
    ECO 10 Updates:
    --------------
    ECO I   14-June-1996             Alpha and VAX
    
            This corresponds to ECO D for V4.0
    
            Images:
    
            UCX$PWIPDRIVER.EXE	UCX V3.3-7I
    
    	Problem:
    
    	Improper deallocation of multi MBUF UDP datagrams.
    
            Solution:
    
    	Create a new, simple deallocation routine,
            adjUDPaccounting_single, and pass its address on the call to
            allocate the MBLK/DBLK for EACH MBUF in a UDP datagram, not only
            the first.  This routine detaches the given MBUF from the
            possible chain and deallocates it by calling the older
            adjUDPaccounting.  This latter routine deallocates an entire
            chain, but since we are only passing it a single detached MBUF,
            it will deallocate just that.
    
    	Reference:
    
    	CFS.40812
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3  BIND Services.
    ---------------------------------------------------------------------------
    ECO 6 Updates:
    --------------
    ECO C    20-Nov-1995             Alpha and VAX
    
            Images:
    
            UCX$ACCESS_SHR.EXE 	UCX V3.3-7C
    
    	Problem:
    
    	On the local host issuing "UCX SHOW MX" local host just returned
            the local record, but filtered all the remaining MX records.
    
            Solution:
    
    	An invalid filter routine filtered MX records for the localhost
            affecting SMTP mail.
    
    	Reference:
    
    	CFS.33206
    
    ECO 7 Updates:
    --------------
    ECO D   02-Jan-1996             Alpha and VAX
    
            Images:
    
    	UCX$ACCESS_SHR.EXE	UCX V3.3-7D
    
    	Problem:
    
    	SHOW MX does not show a local host as a gateway.
    
            Solution:
    
    	Stop the local MX lookup AFTER the local host was shown.
    
    	Reference:
    
    	CFS.35888
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3  DNS Name Service.
    ---------------------------------------------------------------------------
    ECO 7 Updates:
    --------------
    ECO A   18-Jan-1996             Alpha and VAX
    
            Images:
    
    	UCX$BIND_SERVER.EXE	UCX V3.3-7A
    
    	Problem:
    
    	DNS name server, when configured as a secondary would report
            that its database (DB files) had expired records based on the
            preset expiration time, and would hence not perform "zone
            transfer" for updating its records from the primary. "UCX SHO
            HOST" would still display the stale records in the secondary.
    
            Besides, the log file would display "repetitive" annoying
            message to the DNS admin/user indicating the expiration of the
            "DB files", with every request for "zone transfer" or via
            "UCX SHO HOST". The log file would tend to grow over a period
            of time.
    
            The workaround available to the customer was to either delete
            the "backup copies" of the database files relevant to the
            secondary name server, and restart the name server (only to see
            it happening again after the expiration time) or to increase
            the "serial #" of the SOA record in the primary server. Both
            these workarounds called for repeated user intervention.
    
    	Solution:
    
    	With the expiration of the time (as set in the SOA record),
            momentarily lower the "serial number" in the "SOA" record
            that has been read via db_load routine to "zero" thus causing
            the secondary name server to have a lower serial number
            compared to the "serial number" in the SOA record of the
            "primary". This would force the "zone transfer" to take place
            The fix is in sync with the DNS community.
    
            A validating routine was added in NS_FORW.C to display the
            error/warning message related to the expired zone (display
            just once and remove duplicate messages)
    
            Reference:
    
    	CFS.35882
    
    ECO B  26-Jan-1996 		Alpha and VAX
    
            Images:
    
    	UCX$BIND_SERVER.EXE	UCX V3.3-7B
    
    	Problem:
    
    	An annoying information message, that would spit out BIND server
            information message to "syslog file" for every failed "recvfrom"
            calls on port 53 for invalid packet length has been fixed. The
            reason for the "connect refused/rejected" is that it contained
            an explicit check:
    
            if ((n == -1) && (errno == EWOULDBLOCK)) break;
    
            The break caused it to skip over the line that logged the error.
    
     	Reference:
    
    	CFS.35882
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3  UCX$TELNET.EXE
    ---------------------------------------------------------------------------
    ECO 1 Updates:
    --------------
    ECO A   01-Jun-1995             Alpha and VAX
    
            Images:
    
            UCX$TELNET.EXE		UCX V3.3-7A
    
    	Problem:
    
    	The following commands do not parse properly:
    
    		SET AYT <anything>
                    SET ECHO <anything>
                    SET ERASE <anything>
                    SET ESCAPE <anything>
                    SET FLUSHOUTPUT <anything>
                    SET INTERRUPT <anything>
                    SET KILL <anything>
                    SET MODE <anything> (*1)
                    SET QUIT <anything>
    
            Solution:
    
    	Changes to the parameter's name causes the routine GET_SPECIAL()
            to return the incorrect string.  It returns TRUE P1, not label
            P1.  Instead, pass the name of the parameter to get_special().
    
            *1) Pass "P2" instead of "P1" to CLI_GET_VALUE().
    
            Problem:
    
    	The /TERMINAL_TYPE qualifier of the TELNET command does not
            apply the setting as the default for the image execution, as it
            should.
    
            Solution:
    
            Store the terminal type in the default type buffer instead of in
            a temporary buffer.
    
    ECO 3 Updates:
    --------------
    ECO B   18-Sept-1995                 Alpha and VAX
    
            Images:
    
            UCX$TNDRIVER.EXE                UCX V3.3-7B
    
    	Problem:
    
    	System crash with invalid R9 in checking code that verifies
            registers after fork.
    
            Solution:
    
    	Use PRESERVE_REG and PUSH_REG/POP_REG and PUSHR_FULL/POPR_FULL
            to ensure that full 64-bit registers are preserved.
    
    ECO C   21-Sept-1995                 Alpha and VAX
    
            Images:
    
            UCX$TNDRIVER.EXE                UCX V3.3-7C
    
            Problem:
    
            Virtual terminals do not work for incoming sessions.
    
            Solution:
    
            Ensure that the TT2$M_DISCONNECT bit is set when virtual
            terminals are enabled (UCX SET COMM /REMOTE=VIRTUAL).
    
            Reference:
    
            CFS.32412
    
    ECO D   11-Oct-1995                 Alpha and VAX
    
            Images:
    
            UCX$TNDRIVER.EXE                UCX V3.3-7D
    
            Problem:
    
            Following closely-spaced logins/logouts involving TNA devices,
            the TNDRIVER enters a state wherein additional devices are no
            longer being deleted, but remain in existence until the next
            system reboot.
    
            Processes which generate a lot of output during execution of an
            exit handler and image rundown would hang following breakage of
            the TCP/IP network link, rather than being able to finish their
            output and terminate.
    
            Executing a UCX STOP COMMUNICATION command while active TNDRIVER
            terminal sessions existed could cause a crash.
    
            Solution:
    
            Initialize the appropriate timer queue fields upon UCB
            creation.
    
            Remove the limit on the number of output operations which are
            permitted following forced closure of a terminal session.
    
            Validate the AQB before utilizing it.
    
            Reference:
    
    	Numerous customer problem reports
    
    ECO 4 Updates:
    --------------
    ECO E   11-OCT-1995                 Alpha and VAX
    
            Images:
    
    	UCX$TELNET.EXE		UCX V3.3-7E
    
    	Problem:
    
    	When using IBM-3278-4 [R] model terminals, if the user is
            entering some data when at the same time unsolicited data comes
            from the IBM host, data is lost.
    
            In the SNA version we return error status to the IBM host, if we
            are in a state that does not expect incoming data from the IBM
            host. The IBM host can handle the error on the out-of-band
            channel and sync up with the terminal emulator. With TN3270
            there is only one channel and the TN3270 server on the host does
            not deal with the error messages well.
    
            Solution:
    
    	If the terminal emulator receives an unexpected message from the
            host, do not reject it as in the past. We now set the response
            status to 0 in the state table and act on the incoming message
            as if it were expected. Because we use different buffers for
            incoming and outgoing data, no data will be lost.
    
    	Reference:
    
    	CFS.29514, CFS.23060, CFS.27550
    
    ECO 5 Updates:
    --------------
    ECO G   01-Nov-1995                 Alpha and VAX
    
            Images:
    
            UCX$TELNET.EXE              UCX V3.3-7G
    
            Problem:
    
            Most terminal settings appear to be lost when TELNET sets up an
            interactive session with the remote host.
    
            Solution:
    
    	TELNET honors the terminal's settings, but it sets the terminal
            PASTHRU characteristic which causes the client's terminal driver
            to ignore those settings.
    
            The correction involves recoding the client's terminal driver
            interface to use the appropriate set of QIOs and library calls
            so that the PASTHRU setting is not required.
    
            Reference:
    
    	CFS.32095, CFS.33818
    
    
    ECO 6 Updates:
    --------------
    ECO H   14-Nov-1995                 Alpha and VAX
    
            Images:
    
            UCX$TNDRIVER.EXE                UCX V3.3-7H
    
            Problem:
    
            System crash TN$ABORT due to synchronization error whereby the
            TN UCB is pointing at a stale BG UCB.
    
            Solution:
    
            In several places in the TNDRIVER, the code tests for the
            validity of the pointer to the BG UCB by verifying that it is a
            system address.  In order to minimize the likelihood of this
            problem, we introduce a more rigorous validation of the address
            of the BG UCB. In particular, if the address is a system
            address, then we verify that this BG UCB is also pointing to the
            TN UCB at offset UCB$L_BG_TEL_UCB.  If not, we essentially
            determine that the address is not valid and refuse to use it.
    
            Reference:
    
    	CFS.34783
    
    ECO I   20-Nov-1995                 Alpha and VAX
    
            Images:
    
            UCX$TELNET.EXE                  UCX V3.3-7I
    
    	Problem:
    
    	When the user specifies the /NOINTERACTIVE TELNET command
            qualifier two different problems could arise:
    
    	1.  If no node name was specified, the user was given the
                interactive  prompt TELNET>. Since the user specified
                /NOINTERACTIVE on the  command line, this behavior was not
                desired.
    
    	2.  The TELNET keypad key "FIND" allowed the user to spawn
                commands off to DCL. If the /NOINTERACTIVE TELNET command
                qualifier was specified, allowing the user to spawn commands
                off to DCL  created a security leak. The TELNET keypad key
                "FIND" was disabled  if the command qualifier /NOINTERACTIVE
                was specified.
    
    	Solution:
    
    	Support for the /NOINTERACTIVE command qualifier.
    
    	Reference:
    
            Internal problem report
    
    ECO J   29-Nov-1995                 Alpha and VAX
    
            Images:
    
    	UCX$TELNET.EXE                  UCX V3.3-7J
    
    	Problem:
    
    	ECO G created a problem obtaining and providing the terminal
            type consistently to the remote host.
    
            The order of the terminal type determination was not consistent
            because the TTType() routine was being called from three places.
    
            The order should be:
    
            1.  The default terminal type of SYS$OUTPUT,
            2.  Any SET TERMINAL/DEVICE setting from the TELNET.INI
                (initialization) file,
            3.  The value of the qualifier /TERMINAL_TYPE from the
                TELNET command line.
    
            Solution:
    
    	Modified the mainline code to obtain the default terminal type
            of SYS$OUTPUT, invoke the startup procedure, then use the value
            from the /TERMINAL_TYPE qualifier.
    
            Reference:
    
    	CFS.33818
    
    	Problem:
    
    	Exiting TN3270 using Crtl/Z leaves Crtl/T and Crtl/Y disabled.
    
    	Solution:
    
    	When the STE$HIBER() routine returns, assume a link disconnect
            and set the session's NT_STATUS to SS$_LINKDISCON.  This will
            cause the exit path to clean up properly.
    
            Reference:
    
    	CFS.34668
    
    ECO 7 Updates:
    --------------
    ECO K   11-Jan-1996                 Alpha and VAX
    
            Images:
    
    	UCX$TNDRIVER.EXE                UCX V3.3-7K
    
            Problem:
    
    	Continuing system crashes due to synchronization errors whereby
            the TN UCB is pointing at a stale BG UCB.
    
            Solution:
    
    	Expand the validity tests introduced in ECO H above and make
            them more extensive.  In addition, add a new test to validate
            the link between a supposed BG UCB and a SOCKET.
    
            In expanding the validity tests, we now use data passed from the
            BGDRIVER (in the INETCB).  This means that this ECO of the
            TNDRIVER requires at least ECO W of the NET facility.
    
            In addition, as a build note, in order to properly link the
            TNDRIVER with the reference to a new INETCB field, it is
            necessary to temporarily copy the INET.MLB from the OBJ_PAT
            directories to the relevant OBJ directories.
    
            Reference:
    
    	CFS.36056
    
    ECO L   17-Jan-1996                 Alpha and VAX
    
            Images:
    
    	UCX$TELNET.EXE                  UCX V3.3-7L
    
            Problem:
    
    	On AXP system, the TN3270 emulator does not load the customized
            EBCDIC/DMCS Translation table, and fails with the error message
            %UCX-E-TRALOAFAI, failed to load translation tables from
            SYS$SYSROOT:[SYSLIB]TN3270DEF.TBL
    
            Solution:
    
    	The image header format has changed.  A new alias code has been
            defined for Alpha and the location of the number of header disk
            blocks has also been moved.  This requires that a new LOAD_xxx
            routine be developed. This routine has the name LOAD_AXP.
    
            Reference:
    
    	CFS.33698
    
    ECO M   18-Jan-1996                 Alpha and VAX
    
            Images:
    
    	UCX$TELNET.EXE			UCX V3.3-7M
    
    	Problem:
    
    	ECO G and ECO J created a problem providing the terminal type
            consistently to the remote host from the TELNET prompt.  This
            is now corrected (again).
    
            Solution:
    
    	Modify the CONNECT/OPEN code to default the terminal type buffer
            to that obtained using the ECO J algorithm.  If P3 of the
            command is specified, it will be used instead of the default
            value.
    
    ECO 8 Updates:
    --------------
    ECO N   6-Feb-1996                 Alpha and VAX
    
            Note: This is the analog of ECO F for V4.0.
    
            Images:
    
            UCX$TNDRIVER.EXE             UCX V3.3-7N
    
    	Problem:
    
    	System crash due to corrupted memory.  Specifically the area
    	in a TN UCB beyond the UCB$T_TEL_TTY_NAME, for approximately
            64KB, may have been destroyed.
    
            Solution:
    
    	The problem is an ineffective length calculation for a MOVC3
    	instruction. Apparently we calculate a negative length in some
    	circumstances, and then we did a compare (that was NOT unsigned)
    	that permitted a very large effective length to be used.
    	The solution is to insure that is within bounds.
    
    	Reference:
    
    	CFS.37455
    
    ECO O   25-Mar-1996                  Alpha and VAX
    
            Images:
    
    	UCX$TELNET.EXE		UCX V3.3-7O
    
    	Problem:
    
    	Entering an escape sequence while in character mode results in
            the transmission of multiple segments to the server.  This
            causes problems when poorly-coded servers expect escape
            sequences to appear in a single input segment.
    
            This correction is a courtesy.
    
            Solution:
    
    	Enable escape sequence recognition and, when in character mode,
            remove the limitation of one character for the input buffer.
    
    	Reference:
    
    	CFS.38533
    
    ECO 9 Updates:
    --------------
    ECO P   4-May-1996                  Alpha and VAX
    
            Images:
    
            UCX$TNDRIVER.EXE                UCX V3.3-7P
    
            Problem:
    
    	System crash AT TNDRIVER+2C6 due to corruption at TNDRIVER+2CC.
    
            Solution:
    
    	The problem arises because of the overlaying of UCB$L_PDT by the
            UCX defined field UCB$L_ACP_LINK in both BG and TN UCBs.  In UCX
            shutdown, under certain conditions, the TTDRIVER (i.e., Terminal
            Class Driver) will misinterpret the UCB$L_PDT field and use it
            as a pointer into what it thinks is another UCB.  The TTDRIVER
            will then clear a longword at an offset from the pointer.  Since
            in our case we have a pointer into the TNDRIVER at UCB$L_PDT, we
            wind up with the TTDRIVER clearing a longword of code in the
            TNDRIVER, leading to a subsequent crash when UCX is re-started.
    
    	The solution is part of a coordinated change that also has NET
            component changes.  See the ECO L description in the NET
            'redeem' for V4.0 for a full description of the changes.
    
            References:
    
    	Internal reports
    
    ECO 10 Updates:
    --------------
    ECO Q   19-Jun-1996                 Alpha and VAX
    
            Images:
    
    	UCX$TELNET.EXE			UCX V3.3-7Q
    	UCX$TNDRIVER.EXE		UCX V3.3-7Q
    
    	Problem:
    
    	When creating an outbound session, the TNDRIVER automatically
            sends WILL-DO-ECHO and WILL-DO-SGA in the output stream.  This
            creates problems from some TELNET clients/devices on the remote
            host.
    
            Solution:
    
    	In TELNET client, add the /OPTIONS qualifier to accept ECHO and
            SGA (and others) as options keywords which will be passed to the
            INETACP at session creation.
    
            In TNDRIVER, add code to sense that this is an outbound session
            and, to negotiate ECHO and SGA if the user has selected the
            options from the TELNET client.
    
    	Reference:
    
    	CFS.41867
    
    	Problem:
    
    	The TELNET CREATE_SESSION command does not accept more than four
            digits for the port number parameter.
    
            Solution:
    
    	Increase the size of the buffer used to read the port number
            from DCL. This correction was also applied to
            CREATE_INCOMING_SESSION and ATTACH.
    
    	Reference:
    
    	CFS.42159
    
    ECO R   8-July-1996                 Alpha and VAX
    
            Images:
    
    	UCX$TNDRIVER.EXE			UCX V3.3-7R
    
    	Problem:
    
    	Incoming TELNET sessions hang.
    
            Solution:
    
    	Problem is caused by previous fix.  An incorrect branch
            destination caused us to skip part of normal negotiation for
            inbound sessions. In UCX$TN_SERVER_TELNET.MAR, we modify the
            branch destination of a newly introduced instruction so that
            previous behavior for inbound sessions is retained.
    
    	Reference:
    
    	CFS.0895
    
    ECO S   15-July-1996                 Alpha and VAX
    
    	Images:
    
    	UCX$TELNET.EXE			UCX V3.3-7S
    
    	Problem:
    
    	The TELNET DELETE_SESSION command returns a false error message.
    
            Solution:
    
    	Correct the status check on the $ASSIGN() to the network device.
    
    	Reference:
    
            Local testing.
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3 Management Control Program (UCP)
    ---------------------------------------------------------------------------
    ECO 1 Updates:
    --------------
    ECO A    16-Jun-1995                 Alpha and VAX
    
            Images:
    
    	UCX$UCP.EXE		     UCX V3.3-7A
    
    	Problem:
    
    	The /HOLD qualifier is not supported in UCX ANALYZE MAIL/REPAIR
            even though it is documented.
    
            Solution:
    
            Provide parser support in UCP for the /HOLD qualifier.
            The other part of this fix is in SMTP (and is included
            in ECO A for SMTP images) to provide the rest of the
            support to place entries on hold after an ANALYZE MAIL
            /REPAIR has been executed.
    
            References:
    
            CFS.23288, CFS.23828
    
    ECO 5 Updates:
    --------------
    ECO B    01-Nov-1995                          Alpha and VAX
    
            Image:
    
            UCX$UCP.EXE			   UCX V3.3-7B
    
            Problem:
    
            UCP crash with the SET CONFIGURATION INTERFACE command when
            an invalid broadcast mask is specified.
    
            Solution:
    
    	Validate the broadcast mask string.
    
            Reference:
    
    	CFS.32916
    
    ECO 6 Updates:
    --------------
    ECO C   12-Dec-1995                          Alpha and VAX
    
            Image:
    
    	UCX$UCP.EXE    UCX V3.3-7C
    
    	Problem:
    
    	Permanently defined CLUSTER_TIMER is lost after restart of UCX.
    
    	Solution:
    
    	Send CLUSTER_TIMER to INET_ACP along with all other communication
     	parameters.
    
    	Reference:
    
    	CFS.29886
    
    ECO 7 Updates:
    --------------
    ECO D   29-JAN-1996                          Alpha and VAX
    
            Images:
    
    	UCX$PING.EXE		UCX V3.3-7D
    
    	Problem:
    
    	PING always returns $STATUS=1 when used with qualifiers.
    
    	Solution:
    
    	The finish() fixed to return UCX$_LOOP[IN]ACT status codes.
    
    	Reference:
    
    	CFS.37154
    
    ECO 8 Updates:
    --------------
    ECO E   27-FEB-1996                          Alpha and VAX
    
            Image:
    
    	PING.EXE			UCX V3.3-7E
    
    	Problem:
    
    	Ping would not resolve hostnames that start with "X" correctly.
    
    	Solution:
    
    	Relink UCX$PING.EXE against updated UCX$IPC_SHR.
    
    	Reference:
    
    	CFS.37910
    
    ECO 10 Updates:
    --------------
    ECO F    8-JUN-1996                          Alpha and VAX
    
            Image:
    
            UCX$UCP.EXE                     UCX V3.3-7F
    
    	Problem:
    
    	Probe and drop timer are not propagated upon UCX startup if
            drop timer is lower than the default probe timer (75 seconds).
    
            Solution:
    
    	Reverse order of probe and drop timer settings upon startup
            so that new (lower) probe timer value is already set by the
            time of setting drop timer value.
    
    	Reference:
    
    	CFS.40000
    
    	Problem:
    
    	In SHOW PROXY display, if the last record is both NFS and
            communication, only its NFS part is displayed.
    
            Solution:
    
    	Make proper "end of file" situation handling.
    
    	Reference:
    
    	CFS.41660
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3  UCX$IPC_SHR.EXE
    ---------------------------------------------------------------------------
    ECO 1 Updates:
    --------------
    ECO A 14-June-1995                          Alpha and VAX
    
            Image:
    
            UCX$IPC_SHR.EXE                     UCX V3.3-7A
    
            Problem:
    
            When one thread blocked I/O in a multithreaded environment,
            other threads were also intermittently blocked.
    
            Solution:
    
            The DECthreads environment does not always correctly handle the
            case where threads are sharing an event flag, each waiting for
            it to be set.
    
            Modify the UCX socket library so that a new event flag is
            allocated for each operation, rather than using the same event
            flag over and over.
    
            Reference:
    
    	CFS.28055
    
    ECO 6 Updates:
    --------------
    ECO B  1-Dec-1995                        Alpha and VAX
    
            Images:
    
    	UCX$IPC_SHR.EXE                     UCX V3.3-7B
    
    	Problem:
    
    	Due to a typo in the previous ECO, the select() call
            intermittently returned an incorrect status.
    
            Solution:
    
    	Fix the typo -- R1 should have been R8.
    
    ECO 8 Updates:
    --------------
    ECO C    25-Dec-1996                        Alpha and VAX
    
            Images:
    
    	UCX$IPC_SHR.EXE		UCX V3.3-7C
    
    	Problem:
    
    	The INET_ADDR does not resolve hex and octal prefix correctly.
            Hex addr must have a prefix 0x and octals must have 0 in front.
            Routine should return -1 for all unresolved addresses.
    
            Solution:
    
    	Routine now checks for '0' as the first char and the following
            'x'.  Also checks for trailing characters at the end.
    
            Reference:
    
    	CFS.37910
    
    ECO D   28-Feb-1996
    
    	Images:
    
    	UCX$IPC_SHR.EXE         UCX V3.3-7D
    
    	Problem:
    
    	In UCX$CLOSE, we performed an IO$_DEACCESS operation.  When
            sockets are shared between multiple processes, this means that
            one process closing a socket would prevent other processes from
            continuing to use it.
    
            Solution:
    
    	If the reference count on the affected device socket is greater
            than 1, skip the IO$_DEACCESS.
    
    	Reference:
    
    	Internal report
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3 SNMP_ AGENT
    ---------------------------------------------------------------------------
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3  UCX$BOOTP.EXE
    ---------------------------------------------------------------------------
    ECO 1 Updates:
    --------------
    ECO A  7-Aug-1995                        Alpha and VAX
    
            Images:
    
            UCX$BOOTP.EXE                    UCX V3.3-09
    
            Problems:
    
            1.  Boot replies are not properly sent to BOOTP relay servers
                (wrong port).
    
            2.  Cannot run interactively for testing.
    
            3.  ACCVIO when BOOTP client name is not defined.
    
            4.  Cannot find client load file.
    
            5.  No client host name in boot reply.
    
            6.  Omit file version number in load file name.
    
            7.  Obtain all local IP addresses from kernel, and send proper
                one for each client.
    
            8.  There are references to "gateway" when "relay" is the proper
                term.
    
            Solutions:
    
            1.  Fix check for relay agent address in GIADDR for BOOTREQUEST,
                not BOOTREPLY op code.  Send replies to relay ("gateway")
                servers' ServerPort.  Use the terms "ClientPort" and
                "ServerPort to be consistent with RFC951.
    
            2.  Fix socket()/bind() problem so we can run the BOOTP server
                interactively.
    
            3.  Fix BootRequest() to handle clients that have no host name;
                this caused an ACCVIO.
    
            4.  Fix GetFileSize() to properly handle file name construction
                when there is no host name.
    
            5.  Fix VendHost() to handle null or abbreviated host name.
    
            6.  Move file name to BOOTP response in GetFileName and leave
                off the file version number.
    
            7.  Instead of trusting that GETHOSTNAME() returns the host name
                that points to ALL interfaces, read the IFNET structure from
                the kernel, and build a table of known local IP addresses
                for outgoing responses to use in GIADDR.  Match subnet masks
                to select the appropriate address to send. Put the server
                name  in the response packet, according to the the name
                associated  with the interface, i.e., GETHOSTBYADDR().
    
            8.  Have the Trace routines refer to the relay as a relay, not a
                "gateway."
    
            Reference:
    
    	CFS.22665
    
    ECO 4 Updates:
    --------------
    ECO B   20-Oct-1995                               Alpha and VAX
    
            Images:
    
            UCX$BOOTP.EXE 		UCX V3.3-07B
    
            Problem:
    
            Send BOOTP relay responses to relay host, not client.
    
            Fix socket()/bind() problem so BOOTP can be run interactively.
    
            Fix ACCVIO caused when client has no host name.
    
            Fix file name construction when there is no Host name.
    
            Put fully qualified domain name for client in response, if it
            fits.
    
            Do not trust GETHOSTNAME()/GETHOSTBYNAME() to return all
            possible IP addresses; use SENSEMODE QIOs to build full
            list and scan routing table to identify appropriate IP
            address to include in response to client.
    
            Put the server name in the response options area.
    
            Put Gateway(s) in response options area.
    
            Handle nonexistent boot file properly.
    
            Solution:
    
            Fix check for relay agent address in GIADDR for BOOTREQUEST, not
            BOOTREPLY opcode.  Send replies to relay ('gateway') servers'
            ServerPort.  Use the terms  'ClientPort' and 'ServerPort' to be
            consistent with RFC951.
    
            Fix socket()/bind() problem so we can run BOOTP server
            interactively.
    
            Fix BootRequest() to handle clients that have no host name -
            this caused an ACCVIO.
    
            Fix GetFileSize() to properly handle file name construction when
            there is no HostName.
    
            Fix VendHost() to handle null or abbreviated HostName.
    
            Move file name to BOOTP response in GetFileName, and leave off
            the file version number.
    
            Instead of trusting that GETHOSTNAME() returns the host name
            that points to ALL interfaces, read the IFNET structure from
            the kernel, and build a table of known local IP addresses for
            outgoing responses to use in GIADDR.  Match subnet masks to
            select the appropriate address to send.
    
            Put the server name in the response packet, according to the
            the name associated with the interface, i.e. GETHOSTBYADDR()
    
            Have the Trace routines refer to the relay as a relay, not a
            'gateway'.  The semantics are confusing enough (thanks to RFC
            951).  It's a relay, not a gateway.
    
            In SUBNET_MATCH, fix for() loop to test correctly (n < ifnum).
    
            Remove one-line function NET_MATCH(), and in GET_IPROUTE() use
            an AND to compare a network route to a target address.
    
            In GET_IPROUTE(), initialize variable route to NULL, and if no
            route to the client is found, ignore the request.
    
            In TraceReply(), check to see if the file exists, and if not
            say so, instead of printing "-1 Blocks" and no file name.
    
            A small optimization:
    
                In INIT(), check for only one interface. If only one
                interface exists, do not allocate the RTABLE because it will
                not  be needed.
    
                In BootReply, if only one interface exists, do not scan
                the route table to try to match interface addresses.
    
            In BootRequest, handle non-existent file correctly (ignore the
            request unless the client specified a file, in which case we
            return a null file string).
    
            In GET_ROUTABLE(), use MAXROUTECOUNT, not ROUTECOUNT (which
            is not yet defined) when specifying the size of RTABLE in the QIO.
    
            In INIT(), print a message when UCX$TFTP_ROOT does not exist, so
            it is clear why BOOTP exits instead of running.
    
            References:
    
            CFS.22665, CFS.32366, CFS.3247, CFS.31249
    
    ECO 6 Updates:
    --------------
    ECO C   29-Nov-1995 				Alpha and VAX
    
            Images:
    
            UCX$TFTP.EXE            UCX V3.3-7C
    
            Problem:
    
    	Endless loop when client NAKs a DATA packet on RRQ
            Random insertion of 0D (CRs) into binary RRQ DATA
    
            Solution:
    
    	In proper checking for NAK (ERROR) response and drop
    	transfer in progress.When checking for duplicate requests,
    	if I/O is pending on the existing (first) transfer, kill it
    	anyway and cancel the I/O.
    
    	Corrected typo in if statement that checked for ASCII mode
    	and caused 0Ds to be inserted.
    
    	References:
    
    	CFS.33938
    
            Images:
    
    	UCX$BOOTP.EXE		UCX V3.3-7C
    
    	Problem:
    
    	If client supplies file name but the file does not exist,
            BOOTP drops request.  It should respond with a null file
            name field.
    
            Solution:
    
    	If file does not exist, zero file name field in response
            and send it.
    
            Also, for debugging purposes, add check for ARP record
            to see if client is already known.  This allows BOOTP
            client test program to send test requests with an
            arbitrary hardware address (i.e. 01-02-03-04-05-06)
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3 R Commands.
    ---------------------------------------------------------------------------
    ECO 3 Updates:
    --------------
    ECO A    03-Oct-1995                            Alpha and VAX
    
            Images:
    
            UCX$RSH.EXE            UCX V3.3-7A
    
    	Problem:
    
    	Problem using /SYSERROR in RSH command
    
            Solution:
    
    	Alter the order in which create/bind/connect sockets
            in SETUP_NETWORK_ENVIRONMENT(). When diagnostics/error
            messages need to be sent to a different device other than
            STDOUT, we need to execute code such that SOCK_1 gets
            created/bound/connected first before we work with SOCK_2.
            No new code added, just changed the order of execution.
    
            Reference:
    
            CFS.31263
    
    	Procedure:
    
    	RSH.CLD
    
    	Problem:
    
    	RSH did not work with /user or /password alone but worked for
            the combination.
    
            Solution:
    
    	Fix the code in RSH.CLD so that /user and /password can be used
            individually.
    
            Reference:
    
            CFS.32208
    
    ECO 4 Updates:
    --------------
    ECO B     16-Oct-1995                              Alpha and VAX
    
    	Images:
    
            UCX$RSH.EXE            UCX V3.3-7B
    
            Problem:
    
    	Fix a problem introduced in ECO A (3.3) where the RSH
            command was failing with a bind() error on STDOUT on
            execution.
    
            Solution:
    
    	Had inadvertently missed using an initial address of 0
            to bind the socket for STDOUT.
    
    	References:
    
    	CFS.31263, CFS.33663, CFS.32208
    
    ECO 7 Updates:
    --------------
    ECO C   16-Nov-1995                              Alpha and VAX
    
            Images:
    
    	UCX$RSH.EXE                     UCX V3.3-7C
    
    	Problem:
    
    	Output from RSH is not correct both in leading and ending
            new lines. The output log file is missing blank lines.  The output
            is prematurely truncated (not being flushed).
    
            Solution:
    
    	Sense the device type of SYS$OUTPUT and modify routine
            WRITE_OUTPUT() to generate the proper output.  Ensure that the
            buffer is flushed.
    
    	Reference:
    
    	Internal reports
    
    ECO D   31-Jan-1996                               Alpha and VAX
    
    
    	Images:
    
    	UCX$RSH.EXE                     UCX V3.3-7D
    
    	Problem:
    
    	Command lines not enclosed in quotes are converted to lower case.
    
            Solution:
    
    	Parse the command line appropriately.
    
    	References:
    
    	Internal reports
    
    	Problem:
    
    	Fragments of the output stream are lost if it contains NULL
            character(s).
    
    	Solution:
    
            Fixed.
    
    	Reference:
    
    	Internal report
    
    ECO 10 Updates:
    --------------
    ECO E   17-Jun-1996                              Alpha and VAX
    
            Images:
    
            UCX$RSH.EXE                     UCX V3.3-7E
    
    	Problems:
    
    	1.  Customer would like the ability to enable TCP KEEPALIVE
                similar to FTP and TELNET clients.
            2.  Interactive mode does not work properly.
            3.  Output of RSH/REXEC is slow (300 baud).
            4.  Output of RSH/REXEC generates lines of single characters
                when output is directed to a non-terminal.
    
    	Solutions:
    
    	Fixed.
    
    	References:
    
    	1. CFS.33696
    	2. CFS.38608
    	3. CFS.40055
    	4. CFS.40513
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3 REMOTE COPY Command.
    ---------------------------------------------------------------------------
    ECO 3 Updates:
    --------------
    ECO A     15-Jun-1995                              Alpha and VAX
    
            Images:
    
    	UCX$RCP.EXE		UCX V3.3-7A
    
    	Problem:
    
    	Error setting privileges.
    
    	Solution:
    
    	Alter the order of steps to set privileges. Do privilege
                check/sets only in RRESVPORT().
    
    	Problem:
    
            Exit with proper status after execution of RCP command.
    
            Solution:
    
            Though RCP has its own message facility, we were not exiting
            with a proper status indicating success/failure. Changed all the
            relevant routines to do this. Limitation : On a remote-remote
            copy since we use RSH to execute the RCP command remotely, exit
            status always indicates success due to the inability of RSH to
            return anything else.
    
            Reference:
    
    	Internal reports
    
    ECO 4 Updates:
    --------------
    ECO B    17-Oct-1995                              Alpha and VAX
    
            Images:
    
            UCX$RCP.EXE              UCX V3.3-7B
    
    	Problem:
    
    	RCP client waiting for acknowledgment message
    
    	Solution:
    
    	RCP server needs to send a single byte of acknowledgment due
            to changes in the RSH/REXEC server code.
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3 NFS Server
    ---------------------------------------------------------------------------
    ECO 2 Updates:
    --------------
    ECO A   07-Sep-1995                              Alpha and VAX
    
            Images:
    
    	UCX$CFS_SHR.EXE		UCX V3.3-7A
    
            Problem:
    
    	Reading a fixed, sequential file which has an incomplete last
    	record resulted in the loss of the partial record.
    
            Solution:
    
            This fix removes the application of a previous fix from V3.2 ECO
            A  as it pertains to sequential files containing fixed length
            records.
    
            Reference:
    
    	CFS.27713
    
    ECO 3 Updates:
    --------------
    ECO B   11-Oct-1995                               Alpha and VAX
    
            Images:
    
    	UCX$CFS_SHR.EXE		UCX V3.2-7B
    
    	Problem:
    
    	Call to BFS$$SLEEP had one extra digit of 0 in its argument,
            thus sleeping for 5 seconds instead of a half second when cache
            buffers are depleted.  This causes a sparse write to take much
            longer than necessary.
    
            Solution:
    
    	Eliminate extra 0 digit.
    
    	Reference:
    
    	CFS.31281
    
    	Problem:
    
    	The thread synchronization routines could leave ASTs disabled
    	on internal calls.  This results in a kernel mode loop within
    	ASTDEL attempting to deliver ASTs to executive mode while ASTs
    	are disabled.
    
            Solution:
    
    	Clear the AST context bits when the thread goes asynchronous.
    
    	Reference:
    
    	CFS.30672
    
    ECO 7 Updates:
    --------------
    ECO E   26-Dec-1995                              Alpha and VAX
    
            Images:
    
            UCX$CFS_SHR		UCX V3.3-7E
    
    	Problem:
    
    	Server returns null in the $ADF$ file for unknown or missing
            version limit.  It should be %X7FFF.  This confuses the client
            into purging when it should not.
    
    	Solution:
    
    	Substitute %X7FFF for null in the VMS_VERLIMIT filed of
            the RDCB extension.
    
    	Reference:
    
    	CFS.33538
    
    ECO 8 Updates:
    --------------
    ECO F   16-Feb-1996                              Alpha and VAX
    
            Images:
    
    	UCX$CFS_SHR.EXE
    
    	Problem:
    
    	Device, volume and file protections, and ACLs are not
    	supported properly.
    
            Solution:
    
    	Sense V6+ of OpenVMS, add support for the volume ORB
       	and the new protection mask formats, and add support
            for ACLs using VM variable allocations.
    
    	Reference:
    
    	CFS.22201
    
    	Problem:
    
    	Renaming directory files on file systems which are
    	exported with the TYPELESS_DIRECTORIES option require
            that the file type .DIR is specified on the from and
            to file names.
    
            Solution:
    
    	The file type .DIR should be enforced (if provided)
            and defaulted to .DIR;1 if absent.
    
    	Reference:
    
    	CFS.37981
    
    ECO G   20-Feb-1996                              Alpha and VAX
    
            Images:
    
    	UCX$CFS_SHR.EXE     	V3.3-7G
    
    	Problem:
    
    	When the export option NODATA_CONVERSION is selected for
    	a file system, STREAMCR files are converted to STREAMLF
            format.
    
            Solution:
    
    	Change the file system code to return the data in its raw
            state when NODATA_CONVERSION is set, and convert from
            STREAMCR to STREAMLF otherwise.
    
    	Reference:
    
    	CFS.38128
    
    ECO H   24-Mar-1996                              Alpha and VAX
    
            Images:
    
            UCX$CFS_SHR.EXE           	UCX V3.3-7H
    
    	Problem:
    
    	When installing ECO A onto a non-V5 system, a protection
    	error (NOPRIV) is generated when performing the device
            protection check.
    
            Solution:
    
    	Change the system version check condition from an AND to
            an OR in the NEQL check.
    
    	Reference:
    
    	CFS.38128
    
    ECO 9 Updates:
    --------------
    ECO I   09-May-1996                              Alpha and VAX
    
            Images:
    
            UCX$CFS_SHR.EXE            		UCX V3.3-7I
    
    	Problem:
    
    	The ECO F code can attempt to move a larger ACL area into
    	a smaller area, causing an ACCVIO or corruption.
    
    	Solution:
    
    	Change the size of the move to the exact ACL size, not the
            size of the initially allocated ACL area.
    
            Reference:
    
    	Internal testing
    
    ECO 10 Updates:
    --------------
    ECO J   15-May-1996                              Alpha and VAX
    
            Images:
    
    	UCX$CFS_SHR.EXE          UCX V3.3-10J
    
    	Problem:
    
    	ECO I does not take into consideration when the preallocated
    	ACL buffer (512) is smaller than the actual ACL (> 512).
    
            Solution:
    
    	Use the MIN(.RDCB_PTR[RDCB$L_ACL_SIZE],.ACL_LENGTH) when
            moving the ACL.
    
    	Reference:
    
    	Internal report
    
    ECO K   19-JUN-1996                              Alpha and VAX
    
            Images:
    
    	UCX$CFS_SHR.EXE
    
    	Problem:
    
    	ECO D does not work for bound volume sets.  The directory
    	record has a null FIB$B_FID_RVN if the file is on the same
            member volume as the directory.
    
            Solution:
    
    	If FIB$B_FID_RVN is null, replace it with the one from the
            file handle.
    
    	Reference:
    
    	CFS.35040
    
    ECO L   9-JUL-1996                               Alpha and VAX
    
            Images:
    
    	UCX$CFS_SHR.EXE			UCX V3.3-10L
    
    	Problem:
    
    	If NODATA_CONVERSION is in effect, the server uses ";"
    	instead of "." as the version number delimiter.
    
            Solution:
    
    	Add a pair of parentheses to the test for name conversion.
    
    	Reference:
    
    	CFS.42549
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3 NFS Client
    ---------------------------------------------------------------------------
    ECO 1 Updates:
    --------------
    ECO A   3-Mar-1995                              Alpha and VAX
    
            Images:
    
            UCX$DNFSACP*.EXE
    
            Problem:
    
            Directory updates made locally at the server are delayed
            in becoming visible to the client, even with small values
            for the directory cache and attributes cache timeouts.
    
            Solution:
    
            Zero the finfo->last_read time if the directory cache has
            timed out. (This forces CHECK_ACCESS to do a real GETATTR.)
    
           Reference:
    
    	CFS.25032
    
    ECO A   1-Jun-1995                              Alpha and VAX
    
            Images:
    
            UCX$DNFSACP*.EXE
    
            Problem:
    
            GRPPRV privilege was required to get access to a file
            owned by a same-group user with group access allowed.
    
            Solution:
    
            Fixed code to allow access to users in the same group.
    
            Reference:
    
    	CFS.27193
    
    ECO A   28-Jun-1995                              Alpha and VAX
    
            Images:
    
            UCX$DNFSACP*.EXE
    
            Problem:
    
            Normally, directories do not need and do not have ADF
            files.  However, SET DIR /VERSION_LIMIT creates an ADF file.
            This causes a problem when deleting the directory, as the
            RMDIR command is used on both the directory and the ADF, and
            the ADF deletion fails.
    
            Solution:
    
            A new parameter has been added to the calling sequence of the
            FREMOVE_INIT routine to specify whether a directory or a
            regular file is being deleted.
    
            Reference:
    
    	Internal report
    
    ECO 7 Updates:
    --------------
    ECO B   29-Dec-1995                          Alpha and VAX
    
            Images:
    
            UCX$DNFSACP.EXE		UCX V3.3-7B
    
    	Problem:
    
    	An untranslatable hostname in a proxy record causes a
    	premature halt to the loading of the proxy database.
    
    
    	Solution:
    
    	Test return status from the hostname translation without
        	loading the status variable.
    
    	Reference:
    
    	CFS.34570
    
    ECO 8 Updates:
    --------------
    ECO C   31-Jan-1996                           Alpha and VAX
    
            Images:
    
            UCX$DNFSACP.EXE         UCX V3.3-7C
    
    	Problem:
    
    	Happens only with Windows NT Intergraph server. On trying to
            create a file in a directory allowing no write access, the
            client loops many times retrying and finally dismounts the DFNS
            device.  In this case, Intergraph returns NFSERR_PERM instead of
            NFSERR_ACCES.
    
            Solution:
    
    	Fix incorrect parentheses in C statement checking status.
    
    	Reference:
    
    	CFS.36516
    
    ECO 10 Updates:
    --------------
    ECO D   12-JUN-1996                           Alpha and VAX
    
    	Images:
    
            UCX$DNFSACP*.EXE			UCX V3.3-7D
    
    	Problem:
    
    	PGFIPLHI system crash can happen in UCX$DNFSACP when
    	accessing the argument stack.
    
            Solution:
    
    	Preload the addresses of arguments into registers before
            raising IPL.
    
    	Reference:
    
    	CFS.41981
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3 UCXPCNFSD.EXE.
    ---------------------------------------------------------------------------
    ECO 8 Updates:
    --------------
    ECO A	20-Mar-1996                           Alpha and VAX
    
    	Images:
    
            UCX$PCNFSD.EXE				UCX V3.3-7A
    
    	Problem:
    
    	Incorrect brackets prevent authentication from ever
    	working with V1 protocol.
    
            Solution:
    
    	Move misplaced bracket.
    
    	Reference:
    
    	CFS.38231
    
    ---------------------------------------------------------------------------
    Fixes for DEC TCP/IP Services V3.3 UCX$NTPD.EXE.
    ---------------------------------------------------------------------------
    ECO 1 Updates:
    --------------
    ECO A   12-Aug-1995                           Alpha and VAX
    
            Images:
    
            UCX$NTPD.EXE                          UCX V3.3-7A
    
            Procedures:
    
            UCX$NTPD_STARTUP.COM
            UCX$SHUTDOWN.COM
    
            Problem:
    
            UNIX [R] (OSF/1, ULTRIX) interoperability problem: Time is not
            being set properly due to unsupported time zone offset and other
            code affecting the internal variable NTS_offset.
    
            Solution:
    
            Support time zone offset; the system logical UCX$NTP_TZ must be
            defined manually until we derive and set the time zone offset
            with the configuration and installation procedures.  UCX$NTP_TZ
            for Boston, MA should have the following definition in
            SYS$COMMON:[SYSMGR]UCX$NTPD_STARTUP.COM, where it is commented
            out:
    
                    $ define/system ucx$ntp_tz -040000
    
            You must define it manually for ECO A by replacing -040000 with
            the appropriate value for your time zone offset and
            uncommenting the DCL define statement. Note that the time zone
            offset does not take care of the daylight savings problem, which
            will be fixed later using an OpenVMS system service.
    
            Problem:
    
            UCX$SHUTDOWN.COM (in INSTALL) does not shut down the NTP server.
    
            Solution:
    
            SYS$MANAGER:UCX$SHUTDOWN.COM calls SYS$MANAGER:UCX$NTPD_SHUTDOWN.COM.
    
            Problem:
    
            Interoperability problems with NTP V1 hosts.
    
            Solution:
    
            Added a second keyword, "version," to the configuration file
            "peer" command:
    
                    peer <ip_address> [version <NTP_version>]
    
            For example:
    
                    peer 198.115.142.47 version 1
    
            When the server polls the specified peer, it specifies NTP
            version 1 in the packet. This is necessary to communicate with a
            peer that only supports NTP V1 and when the NTP server is not
            listed as a peer on the V1 server.  If the V1 server polls the
            OpenVMS NTP server first, the version number in the packet is
            noted and used later in packets sent to the V1 server. Prior to
            this, transmit.c toggled the version number if it received a V1
            packet. In the case of versions 2 and 3, NTP alternates versions
            in case the peer does not respond.
    
            Problem:
    
            Remove the +/- 20-minute capture limitation. If the offset was
            greater than 20 minutes slow or fast, we ignored the packet,
            thereby limiting the server to set time within a +/- 20-minute
            difference.  This was due to lack of time zone support. This is
            also dependent on defining UCX$NTP_TZ before UCX$NTPD.EXE
            starts; since we know the time zone offset, the 20-minute
            limitation can be removed.
    
            Problem:
    
            Process Software code base needs closer conformance to NTP V3,
            RFC 1305.  (The NTP V1 problem above is another instance of
            this.)
    
            Solution:
    
            This is just the beginning; it may eventually look and behave
            more like the xntp code base. But for now, three new
            configuration file keywords are supported:
    
            1.  "Local-master <stratum>" where stratum must be between 10
                and 32, or 0 (to disable local-master).
            2.  "Master-clock <stratum>" configures NTP as a master server
                at a stratum lower than 10. This is used for hosts that have
                special hardware to synchronize its clock.
            3.  "Server <ip_address> [version <NTP_version>]" -- When another
                NTP server is specified with this command, this server will
                operate in client mode and the other server in server mode.
                In client/server mode, the client will adjust time according
                to the server but the server will never synchronize to the
                client.  As with the peer configuration keyword, you may
                specify the server's NTP version.
    
            The intent for supporting master-clock and local-master is that
            master-clock is for systems with synchronization hardware and
            local-master is for "free-running" hosts without synchronization
            hardware. It is possible that we have to refine more parameters
            here as more intelligence can be applied to managing clock
            precision.
    
            For master-clock and local-master, we generate pseudo-peer
            127.127.1.1 and set sys.peer to this pseudo-peer.  We also did
            some fixes with  client mode and changed the "acquire" log
            message to differentiate  peers and servers.
    
            Miscellaneous changes:
    
            Keyword error checking prints out notification for unrecognized
            keywords in the configuration file.
    
            Sample Configuration
            --------------------
            The following is an example of a highly redundant and robust
            configuration with multiple levels of backups.
    
            On the Internet close to your network, there is host a.b.c.1
            running at stratum 1 and host d.e.f.2 running at stratum 2.  In
            house, you have host x.y.z.1 which is synchronized with a WWVB
            radio clock, and configured as a stratum 1 master clock.
    
    
                            [a.b.c.1] stratum 1
                            [d.e.f.2] stratum 2
    
                    Internet
                    ====================================
                    LAN
    
                            [x.y.z.1]
                            master-clock 1  <==> WWVB CLOCK
    
                            [x.y.z.2]
                            local-master 10
                            server x.y.z.1
                            server a.b.c.1
                            server d.e.f.2
                            peer x.y.z.2
    
                            [x.y.z.3]
                            local-master 12
                            server x.y.z.1
                            server a.b.c.1
                            server d.e.f.2
                            peer x.y.z.3
    
                    Computer Room
                    ------------------------------------
                    Offices
                            [x.y.x.*]
                            server x.y.z.1
                            server x.y.z.2
                            server x.y.z.3
    
            As backup servers, two hosts, x.y.z.2 and x.y.z.3 in a climate-
            controlled room, are chosen and one is configured at stratum 10
            and the others at stratum 12.  All other workstations on the
            floor are pointing to x.y.z.1 - 3 for their synchronization
            source.
    
            When the configured topology is running and "stable," each local
            host will be synchronized to x.y.z.1 since it is  "closer" than
            the stratum 1 host on the Internet, and all machines will be
            running at stratum 2.
    
            When x.y.z.1 goes down and if the Internet connection is still