DESERT 4.0.0
sun-ipr-sink.h
Go to the documentation of this file.
1//
2// Copyright (c) 2017 Regents of the SIGNET lab, University of Padova.
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions
7// are met:
8// 1. Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// 2. Redistributions in binary form must reproduce the above copyright
11// notice, this list of conditions and the following disclaimer in the
12// documentation and/or other materials provided with the distribution.
13// 3. Neither the name of the University of Padova (SIGNET lab) nor the
14// names of its contributors may be used to endorse or promote products
15// derived from this software without specific prior written permission.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28//
29
41#ifndef SUN_SINK_H
42#define SUN_SINK_H
43
44#include "sun-hdr-ack.h"
45#include "sun-hdr-data.h"
47#include "sun-hdr-probe.h"
49
50#include <uwcbr-module.h>
51#include <uwip-clmsg.h>
52#include <uwip-module.h>
53
54#include "packet.h"
55#include <module.h>
56#include <tclcl.h>
57
58#include <fstream>
59#include <iostream>
60#include <rng.h>
61#include <sstream>
62#include <stdio.h>
63#include <stdlib.h>
64#include <string>
65#include <vector>
66
70class SunIPRoutingSink : public Module
71{
72
73 friend class SendTimer;
74
75public:
79 class SendTimer : public TimerHandler
80 {
81 public:
83 : TimerHandler()
84 , module(m)
85 {
86 }
87
88 protected:
92 virtual void expire(Event *e);
93
95 *module;
96 };
97
102
106 virtual ~SunIPRoutingSink();
107
108protected:
109 /*****************************
110 | Internal Functions |
111 *****************************/
122 virtual int command(int, const char *const *);
123
129 virtual void recv(Packet *);
130
138 virtual int recvSyncClMsg(ClMessage *);
139
148 virtual int recvAsyncClMsg(ClMessage *);
149
158 virtual void initialize();
159
164 virtual void sendProbe();
165
173 static string printIP(const nsaddr_t &);
174
182 static string printIP(const ns_addr_t &);
183
191 static nsaddr_t str2addr(const char *);
192
201 inline const double
202 getDelay(const double &period_) const
203 {
204 if (PoissonTraffic_)
205 return (-log(RNG::defaultrng()->uniform_double()) /
206 (1.0 / period_));
207 else
208 return 0;
209 }
210
211 // Timer
215 virtual void start();
216
220 virtual void stop();
221
225 virtual void transmit();
226
232 virtual void setProbeTimer(const double &);
233
239 virtual const double &getProbeTimer() const;
240
241 /*****************************
242 | Acks |
243 *****************************/
254 virtual void sendBackAck(const Packet *);
255
262 virtual void initPktAck(Packet *);
263
264 /*****************************
265 | Statistics |
266 *****************************/
272 static inline const int
274 {
275 return sizeof(hdr_sun_probe);
276 }
277
283 static inline const int
285 {
286 return sizeof(hdr_sun_ack);
287 }
288
294 inline const long &
296 {
297 return probe_count_;
298 }
299
305 inline const long &
307 {
308 return number_of_ackpkt_;
309 }
310
311 /*****************************
312 | Trace file |
313 *****************************/
320 virtual void tracePacket(
321 const Packet *const, const string &position = "UNDEF___");
322
327 virtual string createTraceString(const string &, const double &,
328 const int &, const int &, const int &, const int &, const int &,
329 const int &, const int &, const double &, const int &, const int &);
330
337 virtual void writeInTrace(const string &);
338
344 virtual void writePathInTrace(const Packet *);
345
346 // Internal variables
347 nsaddr_t ipAddr_;
348 double t_probe;
355 // Statistics
356 static long probe_count_;
358 static long number_of_ackpkt_;
362 unsigned int **arrayofstats_;
369 // Timer
372 // Trace file
373 bool trace_;
382 ostringstream osstream_;
383 ofstream trace_file_;
390private:
399};
400
401#endif // SUN_SINK_H
Definition sun-ipr-sink.h:80
SendTimer(SunIPRoutingSink *m)
Definition sun-ipr-sink.h:82
virtual void expire(Event *e)
Definition sun-ipr-sink.cpp:71
Definition sun-ipr-sink.h:71
static nsaddr_t str2addr(const char *)
Definition sun-ipr-sink.cpp:368
int PoissonTraffic_
Definition sun-ipr-sink.h:349
virtual void start()
Definition sun-ipr-sink.cpp:392
virtual void writePathInTrace(const Packet *)
Definition sun-ipr-sink.cpp:573
SunIPRoutingSink()
Definition sun-ipr-sink.cpp:76
static long number_of_ackpkt_
Definition sun-ipr-sink.h:358
virtual ~SunIPRoutingSink()
Definition sun-ipr-sink.cpp:93
bool trace_
Definition sun-ipr-sink.h:373
virtual int recvAsyncClMsg(ClMessage *)
Definition sun-ipr-sink.cpp:111
virtual void setProbeTimer(const double &)
Definition sun-ipr-sink.cpp:417
static const int getProbePktHeaderSize()
Definition sun-ipr-sink.h:273
static const int getAckHeaderSize()
Definition sun-ipr-sink.h:284
virtual void transmit()
Definition sun-ipr-sink.cpp:408
virtual void initPktAck(Packet *)
Definition sun-ipr-sink.cpp:466
const double getDelay(const double &period_) const
Definition sun-ipr-sink.h:202
virtual void sendProbe()
Definition sun-ipr-sink.cpp:307
const long & getAckCount() const
Definition sun-ipr-sink.h:306
const long & getProbeCount() const
Definition sun-ipr-sink.h:295
double periodPoissonTraffic_
Definition sun-ipr-sink.h:351
char trace_separator_
Definition sun-ipr-sink.h:387
bool trace_path_
Definition sun-ipr-sink.h:375
SendTimer sendTmr_
Definition sun-ipr-sink.h:370
virtual const double & getProbeTimer() const
Definition sun-ipr-sink.cpp:427
char * trace_file_path_name_
Definition sun-ipr-sink.h:379
virtual void sendBackAck(const Packet *)
Definition sun-ipr-sink.cpp:435
virtual void initialize()
Definition sun-ipr-sink.cpp:294
virtual string createTraceString(const string &, const double &, const int &, const int &, const int &, const int &, const int &, const int &, const int &, const double &, const int &, const int &)
Definition sun-ipr-sink.cpp:538
nsaddr_t ipAddr_
Definition sun-ipr-sink.h:347
ostringstream osstream_
Definition sun-ipr-sink.h:382
static string printIP(const nsaddr_t &)
Definition sun-ipr-sink.cpp:343
virtual int recvSyncClMsg(ClMessage *)
Definition sun-ipr-sink.cpp:103
virtual int command(int, const char *const *)
Definition sun-ipr-sink.cpp:123
virtual void writeInTrace(const string &)
Definition sun-ipr-sink.cpp:562
virtual void recv(Packet *)
Definition sun-ipr-sink.cpp:224
SunIPRoutingSink(const SunIPRoutingSink &)
virtual void tracePacket(const Packet *const, const string &position="UNDEF___")
Definition sun-ipr-sink.cpp:491
ofstream trace_file_
Definition sun-ipr-sink.h:383
double t_probe
Definition sun-ipr-sink.h:348
int numberofnodes_
Definition sun-ipr-sink.h:360
int printDebug_
Definition sun-ipr-sink.h:352
char * trace_file_name_
Definition sun-ipr-sink.h:377
ofstream trace_file_path_
Definition sun-ipr-sink.h:385
unsigned int ** arrayofstats_
Definition sun-ipr-sink.h:362
static long probe_count_
Definition sun-ipr-sink.h:356
virtual void stop()
Definition sun-ipr-sink.cpp:400
Definition sun-hdr-ack.h:52
Definition sun-hdr-probe.h:53
Provides the Ack Messages header description.
Provides the Data Messages header description.
Provides the Path Establishment Messages header description.
Provides the Probe Messages header description.
Common structures and definition used by SUN.
Provides the UWCBR packets header description and the definition of the class UWCBR.
Cross layer messages definition for the UWIP Module.
Provides the UWIP packets header description. Definition of the class that define the network layer.