NED File src/DT_App/DTApp.ned

Name Type Description
DTApp simple module

The Delay-Tolerant Application

Source code:

//
// Copyright (C) 2012 Nikolaos Vastardis
// Copyright (C) 2012 University of Essex
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program; if not, see <http://www.gnu.org/licenses/>.
//

package ECMM.DT_App;

import inet.applications.udpapp.UDPApp;

//
// <b> The Delay-Tolerant Application </b>
//
// It is actually quite similar to the UDPBasicBurst Application module.
// Sends \UDP packets to the given \IP address at the given interval.
// Compatible with both IPv4 and IPv6. Their only difference it that
// the DTApp has a bit more advanced duplicate message detection mechanism
// and it is able to compute a percentage outcome of the delivered packages.
// This percentage does not indicate anything on its own, but by averaging
// all the metrics from all the modules, the actual delivery percentage can
// be extracted. 
//
// The interval can be a constant or a random value (e.g. exponential(1)).
// If the destAddresses parameter contains more than one address, one
// of them is randomly chosen for each packet. An address may be given in the
// dotted decimal notation, or with the module name. (The IPAddressResolver
// class is used to resolve the address.) To disable the model, set
// destAddresses to "". 
//
// The peer can be UDPSink or another DTApp
//
// @author Nikolaos Vastardis
//
simple DTApp like UDPApp
{
    parameters:
        int localPort;
        int destPort;
        volatile int messageLength @unit("B"); 			//  length of messages to generate, in bytes
        volatile double messageFreq @unit("s"); 		// should usually be a random value, e.g. exponential(1), if -1 the application is a sink
        volatile double message_freq_jitter @unit("s"); // should usually be a random value, e.g. uniform(-0.001,0.001)
        string destAddresses; 							// list of \IP addresses, separated by spaces, it's admit the macros radom("node type") and random_name("node name")
        volatile double time_off @unit("s"); 			// time without transmision
        volatile double burstDuration @unit("s");  		// burst duration time
        bool activeBurst; 								// if false the address is selected in the begining and never change
        double time_end @unit("s"); 					// time of the last transmision packet 
        double time_begin @unit("s");					// begin transmission time
        int rand_generator;								// ID random generator
        double limitDelay @unit("s"); 					// maximun delay for a packet, every packet with bigger delay is delete and lost
        bool fixedDestination = default(false);  		// if true the destination address is selected at the begining and never change

        @display("i=block/delay");
    gates:
        input udpIn @labels(UDPControlInfo/up);
        output udpOut @labels(UDPControlInfo/down);
}