 
 
FTS 1.0 Release Notes
=====================
 
Overview:
---------
The Functional Testing Suite (FTS) is a do-everything utility for
monitoring and controlling VMS systems.  The philosophy here is that
everytime I want to do something under VMS, and there's no command
to do it, I'll write it myself and add it to FTS.  It started out as
a monitor for images which I didn't have source code for (like UCX
applications) and grew into a sort of grab-bag of hacks.
 
FTS (Functionality Testing Suite, aka Futz) is a utility program which
provides services not offered by the standard VMS distribution.  The only
file required is FTS.EXE which should be installed as a foreign command
(ie. "$ FTS :== $disk:[dir]FTS.EXE").
 
WARNING!!!  FTS is an rather brutish program which may very well do nasty
things to your system, least of all crash it.  Don't use this program
unless you think you know what you're doing!
 
Comments and additions are cheerfully accepted:
        Bruce R. Miller
        TGV, Inc.
        603 Mission St.
        Santa Cruz, CA  95060
        (403) 427-4366
        Internet: MILLER@TGV.COM
 
 
New and Changed Features:
-------------------------
 
ALONONPAGED [/size=n]
        Allocate some nonpaged pool.  If no size given, 512 is assumed.
        A 12-byte system header including allocated size is presumed.
DEANONPAGED S0addr [/size=n]
        Deallocate some nonpaged pool.  If no size explicitely given,
        The size in the system header is used.
 
CRASH [/PID=pid]
        Crash the system.  The /PID qualifier specifies the ID of the
        process to blame, but is not currently implemented.  The command
        crashes the system by placing a -1 in the PC.
HALT
        Execute a HALT instruction in KRNL mode.  Sometimes quicker
        than reaching back behind the machine for the HALT button.
 
DEPOSIT location value [/PID=pid]
        Write a value to a location in memory.  Runs in kernel mode but
        does a kmode PROBER/W first.  /PID option not implemented, yet.
EXAMINE location [/PID=pid]
        Fetch a value from memory.  Fetches from kernel mode but executes
        a PROBER instruction first.  /PID option not implemented, yet.
 
EXIT/QUIT/^Z
        Leave the FTS utility.
 
FORCEX [pid] [/rcode=x]
        Forces image exit of a given process with the given status.
        SS$_NORMAL assumed if /RCODE not specified.
 
HELP
        Currently prints a simple help message.  Needs to be improved.
        Can't use standard VMS help facility since that would require
        another file and I want to limit things to FTS.EXE.
 
LOAD JASMON
        Installs the JASMON code in P1 space and takes over the
        P1 system service vector.  Jasmon resides in P1 space and comtinues
        to operate across image activations.  Use WATCH to monitor
        service, UNWATCH to stop monitoring them, and UNLOAD JASMON
        to restore the process to normal.
WATCH SS service
        Intercepts calls to a particular system service.
        For example, "WATCH SS TRNLNM" monitors logical name translation.
WATCH SS QIO[W] device [/STYLE=NULL|DEFAULT|TGV|UCX]
        Intercepts $QIO[W]s to a  particular device (ie. DK: or INET:).
        The /STYLE switch controls the formatting of P1 though P6.
WATCH RMS service
        Intercepts calls to a particular RMS service.
        For example, "WATCH SS OPEN" monitors RMS file opens.
UNWATCH SS service
        Disable monitoring of a system service and restore P1 dispatch vector.
UNWATCH RMS service
        Disable monitoring of an RMS service and restore P1 dispatch vector.
UNLOAD JASMON
        Uninstalls the JASMON code from P1 space and restores the
        P1 system service vector to it's previous state.
Currently supported system services:
        ASSIGN,CANCEL,CANEXH,CANTIM,CANWAK,CHKPRO,CRETVA,DASSGN,DEQ,
        ENQ,ENQW,GETLKI,GETLKIW,LKWSET?,QIO,QIOW,SETIME,SETPRT,TRNLNM
Currently supported RMS services:
        CLOSE,CONNECT,CREATE,DELETE,FLUSH,GET,OPEN,PUT
 
LOAD XDT
        Install XDelta and invoke it.  Works even if system was not
        booted with XDelta.  Caution: XDelta will cause LAVC nodes
        to crash with CLUEXIT run for more than 20 seconds.  You can
        use the EXAMINE and DEPOSIT commands to modify memory in a cluster.
 
NOOP
        Does nothing.  Doesn't even execute a NOOP command.
 
SET PAGE addr [size] /PROTECTION=prot {[/PID] [/REFCOUNT]}
        Modify a memory page in some way.  /PROT sets the page
        protection bits in the PTE to the value specified by the
        given string (eg. "URKW").  /PID and /REFCOUNT not yet
        implemented.  Size only used for process pages.
 
SHOW DEFAULT [pid]
        Print the Default Directory string for the given process
SHOW ERROR hex_code
        Print the text of an error signal.
SHOW ETHER
        List protocols assigned to the EtherNet card.  Not Yet Implemented.
 
SPAWN [command-line]
        Spawn a CLI process and optionall execute a command.
        Currently broken, but not interesting enough to fix.
 
VERSION
        Display information about this FTS version, including authors.
 
WAKE [pid]
        Wakes up a given process.
 
WATCH DEVICE device [/FDT] [/START] [/ALTSTART] [/CANCEL] [/IOPOST]
        Monitors the given device by patching it's DDT.  Interactive
        utility; type any key to exit.
        /FDT prints calls passing through the Function Decision Table.
        /START intercepts the device's StartIO routine.
        /ALTSTART intercepts the device's alternate StartIO routine.
        /CANCEL monitors device request cancellations.
        /IOPOST plugs the IOC$IOPOST interrupt vector and watches it
                for completion of requests for this device.
        Type any key to exit the monitor.
        Take care in monitoring disk and terminal devices with this comand.
 
Unresolved Problems:
--------------------
        If we are monitoring the device we are sending the monitor
        data to, we get feed back and blow up.
 
        When doing WATCH DEV <disk>, things can get "screwed up".
 
        JASMON doesn't monitor SS calls from kernel mode.
 
        I don't trust WATCH DEV /CANCEL.
 
Wish List:
----------
        A cancel command which can remove channels from other processes.
 
        Write a generic message queueing/printing system and use it for
        both JASMON and DEVWATCH.
 
        Write a better SHOW PAGE command (ie. one that doesn't crash the VAX)
-b.
 
[Example 1: the PING command talking to the INET: device.]
[Monitor IRPs through the FDT and postprocessing.]
 
NINET9$ fts watch dev inet /fdt/iopost
11:32:39.13 IOPOST: PID 00010024, IRP 8091B130, IOSB (00000001,00000000)
11:32:39.14 FDT: PID 00010024, IRP 8091B130, UCB 805B8930, Func 0032(ACCESS)
            Arg (00000002,00000003,00000001,00000000,00000000,00000000) => 0001
11:32:39.26 IOPOST: PID 00010024, IRP 80922B90, IOSB (00400001,00000000)
11:32:39.30 FDT: PID 00010024, IRP 80922B90, UCB 805B8930, Func 0020(WRITELBLK)
            Arg (000004E0,00000040,00000000,000105B0,00000010,00000000) => 0001
11:32:39.35 IOPOST: PID 00010024, IRP 80917CF0, IOSB (00540001,00000000)
11:32:39.39 FDT: PID 00010024, IRP 80917CF0, UCB 805B8930, Func 0021(READLBLK)
            Arg (000A1CA0,000000C0,00000000,7FE61676,00000012,00000000) => 0001
11:32:39.49 FDT: PID 00010024, IRP 80931C30, UCB 805B8930, Func 0021(READLBLK)
            Arg (000A1CA0,000000C0,00000000,7FE61676,00000012,00000000) => 0001
11:32:40.35 IOPOST: PID 00010024, IRP 80923D70, IOSB (00400001,00000000)
11:32:40.35 IOPOST: PID 00010024, IRP 80931C30, IOSB (00540001,00000000)
11:32:40.37 FDT: PID 00010024, IRP 80923D70, UCB 805B8930, Func 0020(WRITELBLK)
            Arg (000004E0,00000040,00000000,000105B0,00000010,00000000) => 0001
11:32:40.51 FDT: PID 00010024, IRP 8092F7C0, UCB 805B8930, Func 0021(READLBLK)
            Arg (000A1CA0,000000C0,00000000,7FE61676,00000012,00000000) => 0001
[<CR>]
NINET9$
 
[Example 2: Now, load the system service monitor and watch SYS$TRNLNM]
 
NINET9$ fts watch ss trnlnm
Loading database at 7FF0A840
Loaded database
NINET9$ dir
*** $TRNLNM (?,LNM$FILE_DEV,DIRECTORY,?,?) => 000001BC ***
*** $TRNLNM (?,LNM$FILE_DEV,SYS$SYSTEM,?,?) => 00000001 ***
*** $TRNLNM (?,LNM$FILE_DEV,SYS$SYSROOT,?,?) => 00000001 ***
*** $TRNLNM (?,LNM$FILE_DEV,DIRECTORY,?,?) => 000001BC ***
*** $TRNLNM (?,LNM$FILE_DEV,SYS$SYSTEM,?,?) => 00000001 ***
*** $TRNLNM (?,LNM$FILE_DEV,SYS$SYSROOT,?,?) => 00000001 ***
*** $TRNLNM (?,LNM$FILE_DEV,SYS$COMMON,?,?) => 00000001 ***
*** $TRNLNM (?,LNM$FILE_DEV,SYS$OUTPUT,?,?) => 00000001 ***
*** $TRNLNM (?,LNM$FILE_DEV,SYS$DISK,?,?) => 00000001 ***
*** $TRNLNM (?,LNM$FILE_DEV,USERS,?,?) => 00000001 ***
*** $TRNLNM (?,LNM$FILE_DEV,DISK$NINET9_USERS,?,?) => 00000001 ***
 
Directory USERS:[MILLER]
 
$HDRS$ADMIN.MAIL;1  $HDRS$HEDGES.MAIL;1 $HDRS$MAIL.TXT;1    $HDRS$MISC.MAIL;1
$HDRS$SERVICE.MAIL;1                    $HDRS$UCX.MAIL;1    $HDRS$ZONERS.MAIL;1
$MAILINTERFACE.;3   $PLAN.LIS;2         .RHOSTS;1           .SIGNATURE;8
ABSTRACT.TXT;1      ACCESS.DIS;6        ADMIN.MAIL;1        BACKUP.DIR;1
BEACH.TXT;2         BLAH.SDA;3          BLAH.SDL;1          BLAH.TXT;1
[etc...]
 
----------------------------------------------------------------------------
Bruce R'. Miller, MILLER@TGV.COM        (408) 427-4366  in Santa Cruz CA
"Don't it always seem to go, you don't know what you got till it's gone." - JM


Note: A conditional assembly in a second version of JASMON here allows
the $setprv service to appear to always indicate a privileged envrionment.
This is done to allow one to set up a mousetrap for checking code for
covert behavior by making it believe it is running in a fully privileged
environment (when hopefully it is not). The VMS SET WATCH command should
be used in such a situation as well to monitor RMS operations, to tell
what files are being accessed (or attempted).
