Installation FAQs
- What are the system requirements for QualNet?
Click here for system requirements for QualNet 4.0
Click here for system requirements for QualNet 3.9.5
- What if I receive a Java error when I run QualNet Animator, Designer, or Analyzer?
QualNet requires Java 1.3 SDK. Type
java -version
to check the active Java version. Java can be downloaded from http://java.sun.com/ .
For Windows, installation is simple, and the new version should work right away.
For UNIX, however, you may need to install RPMs, unzip .zip files to specific directories, or install Sun packages. See the Sun web site for help.
For Linux, it is usually enough to download the RPM, su to root, and run:
rpm -ivh name_of_rpm.rpm
PATH information must also be updated. For example, if Java 1.3 was installed to /usr/java/jdk1.3.1_04, you will need to make sure /usr/java/jdk1.3.1_04/bin is in the PATH; other Java versions should not be in the PATH.
The RunQualnet scripts use the csh shell, so you should modify the PATH in your .cshrc file in your home directory (you should do this even if your login shell is bash or some other shell). Usually this line, added to the end of the file, will do:
set path = ( /path/to/java/1.4/bin $path )
Check that your changes have taken effect by opening another terminal window, and running the "java - version" command.
- How do I install Visual C++ correctly?
Note: If you do not have the Visual C++ CDs available to re-install the software with the Register environment variables option enabled, you can configure this manually. Right-click the My Computer icon on the Desktop and click Properties. This opens System Properties. Navigate to the Environment Variables window (in Windows XP, this is accessible from the Advanced tab).
- Click New in the System variables section.
- Create the following three environment variables:
Note: The default Visual C++ 6.0 path is shown; adjust the path to match your system.
include=C:\Program Files\Microsoft Visual Studio\VC98\include
lib=C:\Program Files\Microsoft Visual Studio\VC98\lib
MSDevDir=C:\Program Files\Microsoft Visual Studio\Common\MSDev98
- In the System variables section, click the Path variable.
- Edit as necessary.
Path=[existing directories];
C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;
C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;
C:\Program Files\Microsoft Visual Studio\Common\Tools;
C:\Program Files\Microsoft Visual Studio\VC98\bin
Click OK to apply these changes.
You should now be able to run cl.exe from new command-line windows you open.
Note: If you still cannot, please use the Windows Search feature to locate cl.exe on your hard drive, and adjust your environment variables accordingly.
- Why can't it find a header file when I type nmake?
It is possible that your environment variables are not set correctly. Please refer to How do I install Visual C++ Correctly? for instructions on proper Visual C++ configuration.
- What does it mean when I run nmake and get an internal compiler fatal error?
More than likely, to fix this problem, you must install Visual Studio 6 Service Pack 5.
You can go download SP5 at http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/default.asp .
- What if I get an invalid key or host error and cannot run QualNet?
This error occurs when trying to run QualNet on default installations of Red Hat Linux 7.1 and higher. This error also occurs on any other UNIX OS (particularly Linux 2.4 kernels) where /etc/hosts is incorrect. To fix this problem, you will need to modify the /etc/hosts file on the computer on which you installed QualNet.
Note: The license server computer may also have this problem, and it should also be fixed.
First, su to root (you will need the root password). Run hostname to obtain the hostname of your workstation. If "localhost" is reported, you will need to choose another name, and update the name by typing "hostname my-hostname", where my-hostname is the name you've chosen.
You also need to find out the complete DNS name of your computer; for example, if the hostname is rh71, the complete DNS name could be rh71.lan.scalable-networks.com. If you don't know what DNS domain your host resides on, make one up, or just use ".localdomain".
Next, run /sbin/ifconfig -a to obtain the IP address of your workstation.
Open the /etc/hosts file. Update this file so that it looks like the following:
127.0.0.1 localhost.localdomain localhost
ip-address my-full-DNS-name my-hostname
Replace ip-address, my-full-DNS-name, and my-hostname; with the IP address, full DNS name, and hostname for your machine, respectively. Without a full DNS name, sendmail may pause startup for up to a minute whenever you reboot the machine.
It is very important that your hostname does not have 127.0.0.1 on the same line-only localhost.localdomain and localhost should be on the same line as 127.0.0.1. After these changes are made, you should not receive the inconsistent license key error. The inconsistent license key error occurs when either of these situations is true: (a) /etc/hosts and the local DNS server do not have an entry for your hostname, or (b) /etc/hosts reports the hostname as having IP address 127.0.0.1.
Finally, the inconsistent license key error also occurs when your organization has been licensed for more than three subnets, and your subnet is not one of the first three subnets listed in the server license file. This is a bug in the FLEXlm licensing software. If you are in this situation, please contact SNT at license@scalable-networks.com.
QualNet FAQs
- How can I run QualNet from the command line?
Let's assume that you have installed QualNet to ~/qualnet/4.0/.
To execute QualNet at the command-line, cd to ~/qualnet/4.0/bin, and type
./qualnet default.config
default.config is an example scenario. The experiment should run to completion. You may view results from the experiment in default.stat, which is created in the current directory.
- What's the difference between QualNet and other network simulators?
We believe QualNet is the most speedy and scalable of all the network simulators on the market. This allows us to accommodate large, detailed models in manageable runtimes. We also offer high quality customer service and answer your support questions within 48 hours (usually less). For more detailed information, please send an email request to sales@scalable-networks.com for one of our technical white papers.
Simulator FAQs
- How do I add my own statistics to QualNet?
Use IO_PrintStat() to report an end-of-simulation metric to QualNet. The new metric will show up in the .stat file; you can use QualNet Analyzer to graph the new results. An example can be found in application/cbr.cpp. This is an application model in QualNet. It means Constant Bit Rate.
To show metrics as they evolve in real-time (in QualNet Animator), use the GUI_DefineMetric() and GUI_Send{Integer,Real,Unsigned}Data() calls. An example can be found in ip.cpp. If you use QualNet Protocol Designer to create new models, use the built-in facilities to define your metrics. The IO and GUI calls will be made for you. If you are modifying an existing model that was not created using Designer, you will have to insert the IO and GUI calls manually by the QualNet layers?
- How do I modify a protocol to collect a new statistic?
First, add a new variable to the protocol data structure. For example, to collect a new metric for CBR clients, you would modify AppDataCbrClient in applications/cbr.h. Some protocols have a specific data structure for statistics variables. Second, identify the places in the protocol code where the relevant metric is modified or affected, and update your statistic variable. Third, modify your protocol's PrintStats function to print the calculated value at the end of the simulation. For example, with CBR you would modify AppCbrClientPrintStats in applications/cbr.cpp.
- Can QualNet model a system going offline while a simulation is running?
Yes, to an extent. There is a variable called FAULT-CONFIG-FILE that can be used to specify interface failures at specific times. A link failure can be modeled as an interface fault at each end of the link. A node failure can be modeled as a failure of all the nodes' interfaces. The rest of the network will see this node as failed. The node itself, however, will continue operating as if disconnected from the network.
- Is there a way to send messages that bypass the stack and directly deliver the message to the peer protocol in a specified node(s)?
The short answer is yes you can do this but there are caveats and we do not recommend it for a variety of reasons. The two major ones are:
- Such a message will not be dealt with correctly in terms of collisions, time delay etc... But presumably this is a 'simulation only' message
- It might get messy if you try this with parallel QualNet, but again if you know what you are doing and/or do not care about parallel execution this can be achieved.
- How can I have two or more protocols running at a layer communicating with each other using something equivalent to IPC?
You can use MESSAGE_Send with the same layer, as in timers, except specifying a different "protocol" for the Message you created. That would allow communication between protocols at the same layer.
- How do I specify the IP-QUEUE-PRIORITY-SIZE parameter for specific queues?
Each priority This is a scheduling protocol model in QualNet. queue is allocated space separately, not from a common queue. You can use instance IDs and qualifiers to refer to specific queues. For example, the following variable specifies that the priority 2 queues for node 5 are size 100000, while all other queues are the default size of 50000.
IP-QUEUE-PRIORITY-QUEUE-SIZE 50000
[5] IP-QUEUE-PRIORITY-QUEUE-SIZE[2] 100000
- How can I specify more details about the machines in a network (hardware, operating system, etc.)?
Some characteristics of wireless devices can be specified (transmit power, antenna height, etc.), but not the operating system or CPU speed. Those things can be modeled by adjusting the data rate of applications running on that node. Some nodes can be designated as routers, and certain properties, such as backplane throughput, can be specified. Please look at bin/default.router-models for details.
- Is there a way to extend the code?
Yes, the code can be extended. Most of the simulator code is available in source code format, so additional features can be added relatively easily.
- How do I specify a different output file other than default.stat?
Either specify EXPERIMENT-NAME in the configuration file, or add a third parameter to the command line, such as the following:
qualnet default.config experiment1
- In the WFQ scheduler, how do I vary the amount of bandwidth given to different queues in the scheduler?
Users can also specify the queue weight for each of the priority queues (but must then specify the weight for all of them) by specifying:
QUEUE-WEIGHT[priority]
in the experiment.config file, where value is the desired weight for that priority queue. For readability, it is recommended that these queue weights be specified in a range between 0..1, and that the sum of all of the queue weights equal 1. The QUEUE-WEIGHT parameter can be specified for individual nodes or networks using node-specific and network-specific parameterization. See the QualNet User's Guide for more details.
- How do I assign my own numbering scheme to nodes?
This line in config.in controls the number of nodes in QualNet:
SUBNET N16-0 { 1 thru 30 }
This also creates 30 nodes:
SUBNET N16-0 { 101 thru 130 }
However, in this case the nodes are identified by integers from 101 through 130.
This also creates 30 nodes:
SUBNET N16-0 { 2 4 6 8 10 [the-other-even-#'s-here] 60 }
You can put integers from one to about 4 billion (32-bit unsigned int) between the curly braces. So for this example we'd have:
SUBNET N16-0 { 35212 36012 ... }
- How can i use the Visual C++ debugger with QualNet?
If QualNet ever crashes, you should see a message that states: "Click OK to exit, Cancel to debug." Clicking Cancel should start the debugger correctly. To run the debugger from the beginning, let's assume that you're using QualNet 4.0, and that QUALNET_HOME is properly defined. The standard location is C:\qualnet\4.0, and the following discussion uses that value.
Recompile QualNet to enable debugging. (By default, QualNet is compiled for runtime efficiency.) To make this change, complete the following steps:
- Open a Command prompt or MSDOS Prompt.
- Type the following command:
C:\> cd %QUALNET_HOME%\main
- Edit (with your favorite editor) Makefile-windowsnt and change the DEBUG and OPT flags so that only /Zi is enabled. You must remove the /Ox flag, because optimization makes the debugger unusable.
- Type the following commands:
C:\qualnet\4.0\main> nmake -f Makefile-windowsnt clean
C:\qualnet\4.0\main> nmake -f Makefile-windowsnt
- Start Visual C++
- Select File->Open, choose executable files, and open C:\qualnet\4.0\bin\qualnet.exe.
- On the Project->Settings window, Debug tab, set the working directory to C:\qualnet\4.0\bin, and the command line parameters to default.config (or your own configuration file). You must make sure the working directory is set to the directory where you have placed your configuration file. The location of your source files is immaterial.
- Select Build->Start Debug->Step Into to start the program.
When you start the program, you will probably get several messages in one of the debugger status windows that look like this:
Loaded 'C:\WINNT\SYSTEM32\COMCTL32.DLL', no matching symbolic information found.
This is normal. You may see the following error message:
The thread 0x498 has exited with code 3 (0x3). The program 'C:\qualnet\4.0\bin\qualnet.exe' has exited with code 3 (0x3).
It probably means that the configuration file you specified on the Project Settings window is not in the working directory you specified.
Please note that the source code for our main program and many of our utility functions is not available to the debugger. However, wherever source is available, you should be able to set breakpoints and step through the code.
To step to a particular place in the source code, do the following:
- After opening qualnet.exe and setting the parameters as specified above, open the source file you're interested in (e.g. network\ip.cpp).
- Scroll down to the function you want to debug and leave the cursor there.
- Choose "Start Debug->Run to cursor" from the Build menu. The program should run until it gets to the cursor in the open file. You should be able to set breakpoints in several files using the normal Visual Debugger method.
- How do I set up two channels from the command line?
Look at bin/default.config. Uncomment the two lines that look like this:
#PROPAGATION-CHANNEL-FREQUENCY[0] 2.4e9 # multi channel example
#PROPAGATION-CHANNEL-FREQUENCY[1] 2.5e9
This creates two channels. You can modify the settings for each channel by using the [0] or [1] after the PROPAGATION variable names. Place a node into two subnets:
N8-1.0 {1}
N8-2.0 {1}
Set the channel masks for the two subnets.
[N8-1.0] PHY-LISTENABLE-CHANNEL-MASK 01
[N8-1.0] PHY-LISTENING-CHANNEL-MASK 01
[N8-2.0] PHY-LISTENABLE-CHANNEL-MASK 10
[N8-2.0] PHY-LISTENING-CHANNEL-MASK 10
Node 1 will have two radios, one listening on each channel.
- How many events are used to represent one physical packet?
By "physical" packet, it's assumed that you mean frames transmitted over the air, as opposed to application data packets generated by FTP. A packet that originates at the application layer will cause some events as it proceeds down the protocol stack. Generally we treat this as one big event unless it is necessary to queue the packet at the network layer.
For an RTS signal, or another packet once it has reached the MAC layer, there are generally at least four events, start signal/end signal events at both sender and receiver. Between the start signal/end signal events at the receiver, other interfering signals may arrive, and these must be accounted for to measure packet errors.
Also, because of the nature of 802.11, it may be necessary to schedule a backoff timer event before transmitting the RTS, and of course the node sending the RTS must schedule a timer to wait for all the CTS return signals.
- Can you explain the format of the .app file?
The parameters for each application are slightly different. There are explanations of the fields in the default application file in QUALNET_HOME/bin/default.app and in the QualNet User's Guide. The following is a CBR. This is an application model in QualNet. It means Constant Bit Rate. Note: There are some optional parameters as well.
CBR has multiple terminating conditions. It will send packets at the specified interval until either the number of packets specified have been sent, or the end time is reached. If an end time of 0 is specified, the application will not terminate.
- How do I collect statistics on how many physical packets are colliding in a wireless network?
To collect these results, you will need to modify phy/phy_802_11.cpp and mac/mac_802_11.cpp. One possibility is to print out all events at the PHY and MAC layers, and post-process the trace.
- How do I model broadcasts using QualNet?
You can use the following in the .app file:
MCBR 1 255.255.255.255 10000 512 5S 70S 100S
This indicates a multicast CBR session on node 1 broadcasted to anyone in range (non-forwarding). The rest of the parameters are the same as for CBR.
Animator FAQs
- Does QualNet support background pictures like maps and images in the GUI?
Yes. Get in General/General or Config Settings. QualNet supports only JPG and GIF files, and the image will be fitted to the terrain.
- How do I specify icons within the default.config file or when creating my own animation?
The user can specify icons in the config file with "[nodeID] NODE-ICON iconfile" or can set icons for individual nodes in the GUI by selecting the node and editing the node properties.
- How does the Animator get feedback from the Simulator?
CBR the application type
19 the node from
17 the node to
1000 the number of packets
to send
512 the size of packets
50MS the interval
6MS the start time
20S the end time
The Simulator sends animation data to the Animator using the interface specified in include/gui.h. If you run the Simulator with the following command:
C:\qualnet\4.0\bin> qualnet default.config -animate
It will print the text sent to the Animator to standard output instead, so you can see how it is formatted. This is also described in the QualNet Programmer's Guide.
- Can the simulation be interactive as it is running?
Currently, Animator can pause/restart the Simulator and tell it which animation commands (such as dynamic statistics) to send, and how often. Other types of interaction are forthcoming.
- How can I run simulations faster in Animator?
To speed up Animator, turn off all animation (Animation Filters) or run in batch mode (Experiment menu).
- How do I set up two channels using QualNet Animator? Is this the same as from the GUI?
Right-click on one cloud. Change the two Mask variables to 01. (Anything connected to this cloud will listen/broadcast on channel 1.) Right-click on the other cloud, change the masks to 10. (Anything connected to this cloud will listen/ broadcast on channel 0.) Create a node and link it to both clouds. It will have two radios, one listening to each channel.
Analyzer FAQs
- How can I make Analyzer gather custom statistics?
Analyzer will display and graph any statistic printed to the stat file produced by the simulator.