%%%%%% %% %% % % %%%%%% %%%%%% % % % % % % % % % % % % % % % % % % % % % % % % % % % %%%%% % % % % % %%%%%% %%%%%% %%%%%%% % % % % % % % % % % % % % % % % % % % % %%%%%% % % %%%%% % %% % % % VERSION 1.12 Designed by: Pawel Gburzynski and Piotr Rudnicki University of Alberta Department of Computing Science 615 GSB Edmonton, Alberta, CANADA T6G 2H1 tel.: (403) 492-2347, 492-2983 fax: (403) 492-1071 email: pawel@cs.ualberta.ca Programmed by: P. Gburzynski, 1991 ---------------------------------------------------------------------------- | Copyright (C) 1991 P. Gburzynski | | | | The author assumes no responsibility for any damage arising out of the | | use or inability to use this program. | | | ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- | NOTE: This version of SMURPH can work with the following compilers: | | | | * GNU C++ version 1.37.2 or higher (tested on Sun 3, sparc) | | * AT&T cfront version 2.0 (tested on SGI, System V, version 3.3.1) | | * Sun AT&T cfront version 2.0 (tested on Sun 3, sparc) | | | | If you run into problems with the Sun version of the AT&T compiler | | (like complaints about nonexistent syntax errors), modify the compiler | | driver by removing the '-C' parameter from all calls to cpp (you may | | ask your friendly system administrator to do it for you in the system | | version of the driver or you may wish to create your private version of | | the driver, which I recommend). | | | | Some installations of g++ on sparc machines may generate errors | | resulting from various glitches in include files. Please ask your system | | administrator to fix the includes or create your own versions of the | | troublesome include files. I am not responsible for these problems. | ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- | SMURPH is a C++ based modeling package for communication networks and | | protocols. It descends from LANSF -- an earlier version of the package | | (Software Practice and Experience, vol. 21(1), January 1991, pp. 51-76) | | which was based on plain C. | | | | The two packages are distributed for free; however, we encourage the | | users to pay a one-time $107 US registration fee (for both packages) to | | partially cover the maintenance cost. This fee is voluntary. The | | registered users will be informed about new versions, enhancements, bug | | fixes, etc. | | | | To obtain a copy of SMURPH or LANSF, you can use anonymous ftp from | | 'menaik.cs.ualberta.ca' (129.128.4.241). The packages are in directory | | 'pub', files: 'smurph.xxxx.tar.Z' and 'lansf.xxxx.tar.Z' where 'xxxx' | | represents the current version of the corresponding package. To | | register, you should send us a letter (e-mail will do just fine) | | expressing your intention to do so. Then we will mail you the pertinent | | form. | | | | If you don't have ftp access, we can arrange for some other means of | | transportation. Unless you send us your own storage media, we will | | charge you for the cost of them. | | | | The present version of SMURPH runs best with the GNU C++ compiler, | | version 1.37.2 or higher. The GNU C++ compiler is available via | | anonymous ftp from a number of sites, in particular from | | 'menaik.cs.ualberta.ca'. It is planned to make the package compatible | | with other (commercially available) C++ compilers (we will rely here on | | the users' support). | | | | Even if you don't want to pay the registration fee, please drop us a | | note when you get a copy of the package. We would like to know who is | | using our software and for what purpose. We will be grateful for any | | comments and/or suggestions. | | | | The SMURPH project was supported in part by NSERC grants OGP9110 and | | OGP9183, and by a grant from Lockheed Missiles and Space Company, Inc. | ---------------------------------------------------------------------------- Summary of changes: =================== 11/12/90: Special preprocessor added (SMPP) to convert smurph constructs into C++ constructs. Previously this was handled by the compiler preprocessor and the smurph constructs were regular macros. The syntax of many constructs has changed as now we are not restricted by the somewhat limited power of the C macro apparatus. 15/12/90: New environment variable (TheExitCode) added. This variable is set upon the Kernel's DEATH event to indicate the termination reason. 16/12/90: Fixed miscellaneous small and a few serious problems in DSD. 18/12/90: Textual state identifiers are no longer shuffled around by SMURPH; they are stored statically (SMPP) and then referenced upon demand. This should improve the execution time a bit. 19/12/90: Process states specified in 'inspect' (observers) are now automatically associated with the proper process. This means that when a process state is specified in 'inspect' (it is not ANY), the process type must be specified as well, i.e. it cannot be ANY. 19/12/90: Fixed a bug in DSD which caused that removal of EObjects was not recognized properly. 20/12/90: Fixed a bug in mks which caused that '-b 0' was not treated properly. 20/12/90: Fixed a bug in global.h causing compilation errors when smurph was created with '-b 0'. 22/12/90: Fixed a bug in link.c causing that in Kernel exposure with mode 0 the event id was confused. 23/12/90: Fixed a problem in main.c that caused segmentation violation for certain configurations of link events. The code for deallocating request chain has been moved before restarting the process (and simplified a little). 25/12/90: Fixed a bug in main.c that caused incomplete output when the simulator was called with the '-c' option. Simulator call arguments are now included in the output header. 27/12/90: Fixed a bug in client.c that caused incorrect mode 2 exposure of Client. 30/12/90: After a successful getPacket, the environment variable TheMessage (Info01) returns a pointer to the message from which the packet has been acquired, if the message still remains queued; or NULL, otherwise. Previously Info01 returned the packet pointer. That was somewhat redundant and not much useful. 30/12/90 maker now asks for the pathname of a directory where include files for protocol programs are to be kept. It is possible to have a standard library of protocol include files. 01/01/91 SMPP now detects 'expose' not preceded by 'symbol::', which is a confusing error leading to a recursion loop. Detection of nonexistent exposure mode has been modified to avoid problems when supertype exposure is called from a subtype exposure. 01/01/91 Fixed DSD to recognize properly display modes for multiple templates specifying base and standard names. 02/01/91 Fixed a bug in client.c causing incorrect calculation of scaling for Client and Traffic mode 2 exposures. 07/01/91 Fixed a bug in link.c causing (incorrectly) the recognition of the EOT and EMP events for aborted packets on a PLink. 09/01/91 '-t' option added to mks. 10/01/91 SMPP fixed to recognize 'terminate' for 'this' process. Such a 'terminate' is automatically followed by 'sleep' to make sure that the terminated process does not regain control. 10/01/91 Code for 'create' (generated by SMPP) changed slightly. The order of 'start' and 'setup' for observers has been reversed. Previously an observer was started before its setup was executed. 11/01/91 'trace' processing added to SMPP. 13/01/91 'create' syntax augmented to include (optionally) the identifier of the station in the context of which the object is to be created. Upgrade to version 1.01 31/01/91 A private version of i/o library and malloc added. This version can be optionally selected upon initialization (maker). Upgrade to version 1.02 01/02/91 Improved code in DSD for reading templates so that now templates are read much faster. 07/02/91 The simulator executable is now automatically 'stripped' unless mks was called with the '-g' option. 15/02/91 The packet Receiver (and Sender) attribute can now be NONE which is recognized as a special case, e.g. a packet with no specific address (which is different from 'broadcast'). 16/02/91 The method of linking the private SMURPH library has been changed. Previously, the private version of malloc was not recognized (at least on some machines) and the standard version was taken instead. 18/02/91 The default precision of type BIG assumed by mks when '-b' is not specified is now 2 (previously it was 1). 08/03/91 Fixed a bug in lib.c + iolink.c (private i/o library) causing checkpoint restart errors. 11/03/91 Fixed a bug in maker causing problems with creating a non-existent 'bin' directory. 15/03/91 Fixed 'busy' and 'idle' 20/03/91 Fixed a minor bug in SMPP which caused incorrect line numbering in a file containing smurph constructs spanning multiple lines. 21/03/91 Fixed a bug in display.c (flushSupplist) that might cause segmentation violation in a situation involving generation of many displayable objects between two display flushes to DSD. 24/03/91 Rewritten some parts of SMPP, global.h, etc. to make SMURPH compile with the AT&T cfront compiler. 25/03/91 It is now possible to send a signal to the System station. Some processes, e.g. non-standard traffic generators, can be created (and communicated) in the context of the System station. 26/03/91 SMPP now detects and diagnoses attempts to use 'new' for SMURPH object types. Upgrade to version 1.10 01/04/91 Fixed a bug in Timer's wait that caused occasional modification of the delay argument. The problem showed up when clock tolerance was non-zero and BIG_precision was != 1. 06/04/91 Fixed rvar.c to avoid taking sqrt of a possibly negative value in calculating standard deviation for 0 variance. 07/04/91 Fixed a bug in global.h causing compilation errors with the '-i' option of mks. Fixed a bug in rvar.c causing 'division by zero' errors while updating BIG-type RVariables. 08/04/91 It is now illegal to terminate a process that owns some exposable objects. Previously, the termination of such a process resulted in dangling pointers in the ownership hierarchy which was confusing for DSD. This doesn't apply to the Kernel process (but Kernel is never actually terminated). 10/04/91 The output file produced by smurph is now terminated with "@@@ End of output". This line is intended to be used by programs for automated experiment supervision (SERDEL) to determine whether the output file is complete or not. 15/04/91 Code for checkpointing rewritten and rearranged. Now smurph checks for a checkpoint request in its main event-processing loop, so that checkpoints are always performed at a "safe" state. Previously there were some random (and difficult to diagnose) problems with checkpointing -- most likely resulting from interrupted system calls. They may be gone now. 19/04/91 It is now possible to define a limit on the size of message queues: individually for each station, individually for each traffic pattern, or globally. New method 'setQSLimit' (also callable as a) global function) added to 'Traffic' and 'Station'. New option '-q' added to 'mks'. 19/04/91 Mode 2 global screen exposure for Client fixed to display the message count rather than the combined bit count. The manual says that it should be the message count and I think that the manual is right. 15/05/91 Fixed a bug in main.c that caused memory allocation problems when stdin was used by default as the input file. 24/05/91 Fixed a bug in connect.c that caused incorrect socket port specification on little endian machines. 29/07/91 Removed complaints about an empty receiver set for traffic patterns handled by the standard Client. The receiver set can be empty in which case the Receiver attribute of a generated message is NONE. 29/07/91 The definition of ALL (special argument for addSender/addReceiver) changed to ((Station*)ALL). Previously, explicit ALL didn't work as the argument was treated as an integer. 30/07/91 Initialization for the multiple precision arithmetic package is now correctly performed before any user-introduced initialization, possibly involving BIG arithmetic. Previously, static initialization of a BIG type object from an expression involving BIG or floating point values did not work. 30/07/91 The 'usage' menu of mks fixed to say that the default precision for BIG objects is 2, not 1. 30/07/91 An ostream buffer added in the nonstandard i/o package to speed up disk i/o across NFS. 18/08/91 Hacks added to make SMURPH work with the Sun version of the AT&T cfront compiler. The code for determining the compiler type has been centralized and put into version.h. 20/08/91 Random generators for toss and flip rewritten such that they don't use fp operations. Option '-8' added to mks. With this option the user may select standard random number generators (the drand48) family instead of the SMURPH's private generator. The standard generator is slightly slower, but it has a longer cycle. 28/08/91 Fixed connect to detect the situation when the same port is connected twice to two different links. Until now such mistakes would pass unnoticed with disastrous effects. 29/08/91 Fixed a bug in SMPP which caused that occasionally (quite seldom) the tail of the SMPP output was truncated, if data happened to hit the circular buffer boundary with an unfortunate configuration of pointers. 29/08/91 The smurph.h file no longer has to be explicitly included in protocol files. It is included automatically by SMPP. The name of the include file has been changed to Smurph.h. The smurph.h file is now empty, so that its inclusion doesn't affect anything. 06/09/91 Fixed the "too many errors" problem in SMPP. 11/09/91 Fixed some non fatal problems in standard exposures. SMPP now accepts 'wait' preceded by '.', e.g. S->MyPort.wait (BOT, ...); Upgrade to version 1.12. 11/09/91 DSD fixed to properly recognize parameters -t and -u (as advertised in the documentation). 12/09/91 Fixed a bug in DSD causing status misinterpratation for some templates selected for base types. 19/09/91 Fixed a few glitches in description files for EXAMPLES. 19/09/91 mks -r now works with the AT&T compiler. Fixed a bug in client.c causing display problems when the simulator was created with -i. 17/12/91 Fixed a bug in main.c causing addressing errors while restarting processes waiting for process events.