DESERT 4.0.0
uwcbr-module.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
44#ifndef UWCBR_MODULE_H
45#define UWCBR_MODULE_H
46
47#include <climits>
48#include <module.h>
49#include <uwip-module.h>
50#include <uwudp-module.h>
51
52#define UWCBR_DROP_REASON_UNKNOWN_TYPE \
53 "UKT"
54#define UWCBR_DROP_REASON_OUT_OF_SEQUENCE \
55 "OOS"
56#define UWCBR_DROP_REASON_DUPLICATED_PACKET \
57 "DPK"
59#define HDR_UWCBR(p) (hdr_uwcbr::access(p))
60
61extern packet_t PT_UWCBR;
62
66typedef struct hdr_uwcbr {
67 uint16_t sn_;
68 float rftt_;
70 char priority_;
72 uint16_t traffic_type_;
74 static int offset_;
79 static int &
81 {
82 return offset_;
83 }
84
85 static struct hdr_uwcbr *
86 access(const Packet *p)
87 {
88 return (struct hdr_uwcbr *) p->access(offset_);
89 }
90
94 uint16_t &
96 {
97 return sn_;
98 }
99
103 bool &
105 {
106 return rftt_valid_;
107 }
108
112 char &
114 {
115 return priority_;
116 }
117
121 float &
123 {
124 return (rftt_);
125 }
126
130 uint16_t &
132 {
133 return (traffic_type_);
134 }
136
137class UwCbrModule;
138
143class UwSendTimer : public TimerHandler
144{
145public:
147 : TimerHandler()
148 {
149 module = m;
150 }
151
152protected:
153 virtual void expire(Event *e);
154 UwCbrModule *module;
155};
156
161class UwCbrModule : public Module
162{
163 friend class UwSendTimer;
164
165public:
169 UwCbrModule();
170
174 virtual ~UwCbrModule() = default;
175
181 virtual void recv(Packet *) override;
182
189 virtual void recv(Packet *p, Handler *h) override;
190
201 virtual int command(int argc, const char *const *argv) override;
202
208 virtual double GetRTT() const;
209
215 virtual double GetFTT() const;
216
222 virtual double GetTxTime() const;
223
229 virtual double GetPER() const;
230
236 virtual double GetTHR() const;
237
243 virtual double GetRTTstd() const;
244
250 virtual double GetFTTstd() const;
251
255 virtual void resetStats();
256
260 void
262 {
263 std::cout << "UWCBR packets IDs:" << std::endl;
264 std::cout << "PT_UWCBR: \t\t" << PT_UWCBR << std::endl;
265 }
266
267protected:
268 static int uidcnt_;
270 uint16_t dstPort_;
271 std::string log_suffix;
272 nsaddr_t dstAddr_;
274 std::ofstream tracefile;
275 std::string tracefilename;
276
277 bool *sn_check;
281 int debug_;
288 int txsn;
289 int hrsn;
299 int cnt;
302 double rftt;
303 double srtt;
304 double sftt;
305 double lrtime;
306 double sthr;
308 double period_;
311 /* Cumulative statistics */
312 double sumrtt;
313 double sumrtt2;
316 double sumftt;
317 double sumftt2;
319 double sumtxtimes = 0;
321 double sumbytes;
322 double sumdt;
324 uint32_t esn;
335 virtual void initPkt(Packet *p);
336
343 virtual void sendPkt();
344
351 virtual void sendPktLowPriority();
352
359 virtual void sendPktHighPriority();
360
366 virtual void transmit();
367
371 virtual void start();
372
376 virtual void stop();
377
383 virtual void updateRTT(const double &);
384
390 virtual void updateFTT(const double &);
391
398 virtual void updateThroughput(const int &, const double &);
399
405 virtual void incrPktLost(const int &);
406
410 virtual void incrPktRecv();
411
415 virtual void incrPktOoseq();
416
420 virtual void incrPktInvalid();
421
429 virtual double getTimeBeforeNextPkt();
430
436 virtual void printReceivedPacket(Packet *p);
437
443 static int
445 {
446 return sizeof(hdr_uwcbr);
447 }
448};
449
450#endif // UWCBR_MODULE_H
Definition uwcbr-module.h:162
double sumdt
Definition uwcbr-module.h:322
UwCbrModule()
Definition uwcbr-module.cpp:92
virtual void incrPktRecv()
Definition uwcbr-module.cpp:528
virtual void initPkt(Packet *p)
Definition uwcbr-module.cpp:244
static int getCbrHeaderSize()
Definition uwcbr-module.h:444
std::string tracefilename
Definition uwcbr-module.h:275
static int uidcnt_
Definition uwcbr-module.h:268
virtual int command(int argc, const char *const *argv) override
Definition uwcbr-module.cpp:144
virtual void sendPktLowPriority()
Definition uwcbr-module.cpp:295
virtual double getTimeBeforeNextPkt()
Definition uwcbr-module.cpp:567
double rftt
Definition uwcbr-module.h:302
double sumbytes
Definition uwcbr-module.h:321
int txsn
Definition uwcbr-module.h:288
int pkts_lost
Definition uwcbr-module.h:293
virtual double GetRTTstd() const
Definition uwcbr-module.cpp:454
virtual void stop()
Definition uwcbr-module.cpp:338
virtual void incrPktInvalid()
Definition uwcbr-module.cpp:540
uint32_t esn
Definition uwcbr-module.h:324
double sumftt2
Definition uwcbr-module.h:317
double sthr
Definition uwcbr-module.h:306
virtual void incrPktLost(const int &)
Definition uwcbr-module.cpp:522
uint16_t dstPort_
Definition uwcbr-module.h:270
int pkts_ooseq
Definition uwcbr-module.h:292
virtual double GetTHR() const
Definition uwcbr-module.cpp:493
std::string log_suffix
Definition uwcbr-module.h:271
int debug_
Definition uwcbr-module.h:281
bool * sn_check
Definition uwcbr-module.h:277
double sumftt
Definition uwcbr-module.h:316
double srtt
Definition uwcbr-module.h:303
uint traffic_type_
Definition uwcbr-module.h:284
virtual void printReceivedPacket(Packet *p)
Definition uwcbr-module.cpp:584
void printIdsPkts() const
Definition uwcbr-module.h:261
char priority_
Definition uwcbr-module.h:273
virtual double GetTxTime() const
Definition uwcbr-module.cpp:448
int drop_out_of_order_
Definition uwcbr-module.h:282
double sftt
Definition uwcbr-module.h:304
virtual double GetFTTstd() const
Definition uwcbr-module.cpp:466
virtual void incrPktOoseq()
Definition uwcbr-module.cpp:534
virtual void updateThroughput(const int &, const double &)
Definition uwcbr-module.cpp:515
virtual void updateRTT(const double &)
Definition uwcbr-module.cpp:499
int tracefile_enabler_
Definition uwcbr-module.h:326
nsaddr_t dstAddr_
Definition uwcbr-module.h:272
virtual void recv(Packet *) override
Definition uwcbr-module.cpp:350
int pkts_recv
Definition uwcbr-module.h:290
UwSendTimer sendTmr_
Definition uwcbr-module.h:286
virtual void start()
Definition uwcbr-module.cpp:272
double lrtime
Definition uwcbr-module.h:305
virtual ~UwCbrModule()=default
virtual void sendPktHighPriority()
Definition uwcbr-module.cpp:313
double sumrtt
Definition uwcbr-module.h:312
virtual double GetFTT() const
Definition uwcbr-module.cpp:442
virtual double GetPER() const
Definition uwcbr-module.cpp:479
virtual void transmit()
Definition uwcbr-module.cpp:331
int pktSize_
Definition uwcbr-module.h:309
int hrsn
Definition uwcbr-module.h:289
int pkts_invalid
Definition uwcbr-module.h:295
double sumtxtimes
Definition uwcbr-module.h:319
double sumrtt2
Definition uwcbr-module.h:313
int fttsamples
Definition uwcbr-module.h:318
std::ofstream tracefile
Definition uwcbr-module.h:274
virtual double GetRTT() const
Definition uwcbr-module.cpp:436
virtual void updateFTT(const double &)
Definition uwcbr-module.cpp:507
int pkts_last_reset
Definition uwcbr-module.h:296
int cnt
Definition uwcbr-module.h:299
virtual void resetStats()
Definition uwcbr-module.cpp:546
double period_
Definition uwcbr-module.h:308
virtual void sendPkt()
Definition uwcbr-module.cpp:278
int PoissonTraffic_
Definition uwcbr-module.h:279
int rttsamples
Definition uwcbr-module.h:314
Definition uwcbr-module.h:144
UwSendTimer(UwCbrModule *m)
Definition uwcbr-module.h:146
virtual void expire(Event *e)
Definition uwcbr-module.cpp:85
Definition uwcbr-module.h:66
float & rftt()
Definition uwcbr-module.h:122
char priority_
Definition uwcbr-module.h:70
uint16_t traffic_type_
Definition uwcbr-module.h:72
static int & offset()
Definition uwcbr-module.h:80
char & priority()
Definition uwcbr-module.h:113
bool rftt_valid_
Definition uwcbr-module.h:69
uint16_t & traffic_type()
Definition uwcbr-module.h:131
bool & rftt_valid()
Definition uwcbr-module.h:104
float rftt_
Definition uwcbr-module.h:68
uint16_t sn_
Definition uwcbr-module.h:67
uint16_t & sn()
Definition uwcbr-module.h:95
static struct hdr_uwcbr * access(const Packet *p)
Definition uwcbr-module.h:86
static int offset_
Definition uwcbr-module.h:74
packet_t PT_UWCBR
Definition initlib.cpp:45
Provides the UWIP packets header description. Definition of the class that define the network layer.
Provides the UWUDP packets header description and the definition of the class UWUDP.