Dear ns-community, I probably have found a way to answer my own question which was posted previously concerning the calculation of average queue delay and size with monitor objects.
After thorough study, I eventually found out what one has to do in order to calculate the average queue delay and average queue size (i.e. without extra-tcl code or awk scripts) through a monitor object. The code to do that has already been implemented in ns-2, in monitor objects. However, please note that the methods below correspond to my observations and effort and thereby I do not guarantee that there are 100% error-free, since I might have missed something, or understood something wrong. On the other hand, after the experiments that I carried out with some tcl scripts, it seems that the monitor objects along with these methods work OK. The experiments were carried out for wired links and with no line-failures (the monitor objects in ns present problems in the calculation of the queue statistics when a line drops and comes up again - it seems that all counters get reset!). The NS-2 version I use is ns-2.29 under Debian Sarge For the examples below I am assuming a 3-node topology with links in-between: node1 -> node2 -> node3 The link characteristics (propagation delay, bandwidth, etc) and the queue management (droptail, RED, etc) may be as one desires *********** CALCULATION OF AVERAGE QUEUE SIZE ********************** After the creation of the links and the nodes, we are going to measure the average queue size of the connection from node2 to node3. Instead of using a tcl procedure that is executed every n seconds, we are going to use the Integrator objects that ns-2 already supports under the monitor objects. At first we create the monitor object as usual, for the queue that we want to monitor: set monitorN2_N3 [$ns monitor-queue $node2 $node3 stdout] then we "get" the integrator object through the monitor object for the queue. This method returns an integrator object which later can be queried for the average queue size in packets (Integrator objects calculate integrals of samples over time): set inetgratorObjectN2_N3 [$monitorN2_N3 get-pkts-integrator] (or [$monitorN2_N3 get-bytes-integrator] for average size in bytes) and finally before the end of our simulation we print out the result with: puts stdout "Average queue size: [expr {[$integratorObjectN2_N3 set sum_]/$finishTime}]" where sum_ is a property of the integrator object that contains the integral sum of all the sample points from the start of the simulation until the time we "get" it (finishTime). finishTime is a custom variable containing the finish time of our simulation (100,200 seconds, etc). We have to divide it in order to get the average over all the simulated time. ***************************** CALCULATING AVERAGE QUEUE DELAY *********************************************** In order to calculate the average queue delay of a queue with a monitor object, we can use a Samples object that accompanies the monitor object, which simply uses the timestamp field of a special "common" header (hdr_common) in the packets transmitted. This header is solely used for this purpose (i.e. calculate statistics). Below I include the code for the average queue size as well At first we create a samples object that will be passed to the monitor object later: set monitorN2_N3 [$ns monitor-queue $node2 $node3 stdout] set inetgratorObjectN2_N3 [$monitorN2_N3 get-pkts-integrator] set samples_object [new Samples] Then we must "set it up" to be used with our monitor object: $monitorN2_N3 set-delay-samples $samples_object Then we "get" it through the get method of our monitor object (as we have done for the monitor object) set delaySamplesObject [$monitorN2_N3 get-delay-samples] And then at the end of the simulation we call the "mean" method of the samples object (that has been assigned to our queue) to get the mean delay of the queue in seconds: puts stdout "Average Queue Delay: [$delaySamplesObject mean]" There are other methods to use with the samples object, such as variance, cnt, etc. For more information concerning these methods one might check the "Mathematical Support" chapter 24 of the ns-2 manual. Also, there are set-pkts-integrator and set-bytes-integrator methods as well for setting up the integrator objects as well. However, it is not necessary one to use them, since their corresponding "Samples" objects are being created through init-monitor during the initialization of the monitor object. Only the delay samples is not being initialized and not calling the method set-delay-samples with an existing samples object returns an error. Also, please note that the above might have alradey been documented as such somewhere else beyond my knowledge, but since I have seen this question many times in the forum I decided to post an answer in the forum. My apologies for any inconvenience this might have caused. Comments concerning the above are welcome. Kind Regards, -Fk -- Filippos N Kolovos Software Systems Analyst & Engineer M.Sc. (Eng.) in Data Communications Automation & Networking Department University of Macedonia Library Egnatia 156, P.O.Box 1591 540 06 Thessaloniki, Greece E-Mail: [EMAIL PROTECTED], [EMAIL PROTECTED] ----------------------------------------------