DESERT 4.0.0
uwvbr-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 UWVBR_MODULE_H
45#define UWVBR_MODULE_H
46
47#include <uwip-module.h>
48#include <uwudp-module.h>
49
50#include <climits>
51#include <iostream>
52#include <module.h>
53#include <sstream>
54#include <string>
55
56#define UWVBR_DROP_REASON_UNKNOWN_TYPE \
57 "UKT"
58#define UWVBR_DROP_REASON_OUT_OF_SEQUENCE \
59 "OOS"
60#define UWVBR_DROP_REASON_DUPLICATED_PACKET \
61 "DPK"
63#define HDR_UWVBR(P) (hdr_uwvbr::access(P))
64
65extern packet_t PT_UWVBR;
66
70typedef struct hdr_uwvbr {
71 u_int16_t sn_;
72 float rftt_;
75 static int offset_;
80 inline static int &
82 {
83 return offset_;
84 }
85
86 inline static struct hdr_uwvbr *
87 access(const Packet *p)
88 {
89 return (struct hdr_uwvbr *) p->access(offset_);
90 }
91
95 inline u_int16_t &
97 {
98 return sn_;
99 }
100
104 inline bool &
106 {
107 return rftt_valid_;
108 }
109
113 inline float &
115 {
116 return (rftt_);
117 }
119
120class UwVbrModule;
121
126class UwVbrSendTimer : public TimerHandler
127{
128public:
130 : TimerHandler()
131 {
132 module = m;
133 }
134
135protected:
136 virtual void expire(Event *e);
137 UwVbrModule *module;
138};
139
144class UwVbrPeriodSwitcher : public TimerHandler
145{
146public:
148 : TimerHandler()
149 {
150 module = m;
151 }
152
153protected:
154 virtual void expire(Event *e);
155 UwVbrModule *module;
156};
157
162class UwVbrModule : public Module
163{
164 friend class UwVbrSendTimer;
166
167public:
171 UwVbrModule();
172
176 virtual ~UwVbrModule();
177
183 virtual void recv(Packet *);
184
191 virtual void recv(Packet *p, Handler *h);
192
203 virtual int command(int argc, const char *const *argv);
204
205 virtual int crLayCommand(ClMessage *m);
206
211 virtual double GetRTT() const;
212
217 virtual double GetFTT() const;
218
223 virtual double GetPER() const;
224
229 virtual double GetTHR() const;
230
235 virtual double GetRTTstd() const;
236
241 virtual double GetFTTstd() const;
242
246 virtual void resetStats();
247
248protected:
249 static int uidcnt_;
250 u_int16_t dstPort_;
251 nsaddr_t dstAddr_;
253 bool *sn_check;
257 int debug_;
261 int txsn;
262 int hrsn;
273 double rftt;
274 double srtt;
275 double sftt;
276 double lrtime;
277 double sthr;
281 double period1_;
283 double period2_;
295 /* Cumulative statistics */
296 double sumrtt;
297 double sumrtt2;
300 double sumftt;
301 double sumftt2;
304 double sumbytes;
305 double sumdt;
307 uint32_t esn;
315 virtual void initPkt(Packet *p);
316
322 virtual void sendPkt();
323
329 virtual void transmit();
330
334 virtual void start();
335
339 virtual void stop();
340
346 virtual void updateRTT(const double &);
347
353 virtual void updateFTT(const double &);
354
361 virtual void updateThroughput(const int &, const double &);
362
368 virtual void incrPktLost(const int &);
369
373 virtual void incrPktRecv();
374
378 virtual void incrPktOoseq();
379
383 virtual void incrPktInvalid();
384
392 virtual double getTimeBeforeNextPkt();
393
397 virtual void switchPeriod();
398
404 static inline const int
406 {
407 return sizeof(hdr_uwvbr);
408 }
409};
410
411#endif // UWVBR_MODULE_H
Definition uwvbr-module.h:163
int debug_
Definition uwvbr-module.h:257
nsaddr_t dstAddr_
Definition uwvbr-module.h:251
double sumftt2
Definition uwvbr-module.h:301
double timer_switch_2_
Definition uwvbr-module.h:287
virtual double getTimeBeforeNextPkt()
Definition uwvbr-module.cpp:520
double sumbytes
Definition uwvbr-module.h:304
double rftt
Definition uwvbr-module.h:273
int pkts_invalid
Definition uwvbr-module.h:268
double sumdt
Definition uwvbr-module.h:305
int rttsamples
Definition uwvbr-module.h:298
virtual double GetPER() const
Definition uwvbr-module.cpp:425
virtual double GetRTTstd() const
Definition uwvbr-module.cpp:397
int fttsamples
Definition uwvbr-module.h:302
virtual void start()
Definition uwvbr-module.cpp:247
virtual double GetRTT() const
Definition uwvbr-module.cpp:385
int PoissonTraffic_
Definition uwvbr-module.h:255
virtual void initPkt(Packet *p)
Definition uwvbr-module.cpp:221
virtual double GetFTTstd() const
Definition uwvbr-module.cpp:409
int pkts_last_reset
Definition uwvbr-module.h:269
double srtt
Definition uwvbr-module.h:274
virtual int crLayCommand(ClMessage *m)
Definition uwvbr-module.cpp:212
bool * sn_check
Definition uwvbr-module.h:253
double sumrtt2
Definition uwvbr-module.h:297
virtual double GetTHR() const
Definition uwvbr-module.cpp:442
int drop_out_of_order_
Definition uwvbr-module.h:258
UwVbrPeriodSwitcher period_switcher_
Definition uwvbr-module.h:291
double period2_
Definition uwvbr-module.h:283
u_int16_t dstPort_
Definition uwvbr-module.h:250
uint32_t esn
Definition uwvbr-module.h:307
static int uidcnt_
Definition uwvbr-module.h:249
static const int getVbrHeaderSize()
Definition uwvbr-module.h:405
int pktSize_
Definition uwvbr-module.h:293
virtual void updateThroughput(const int &, const double &)
Definition uwvbr-module.cpp:464
double sumftt
Definition uwvbr-module.h:300
int pkts_ooseq
Definition uwvbr-module.h:265
virtual void stop()
Definition uwvbr-module.cpp:290
UwVbrSendTimer sendTmr_
Definition uwvbr-module.h:289
double timer_switch_1_
Definition uwvbr-module.h:285
virtual void incrPktLost(const int &)
Definition uwvbr-module.cpp:475
virtual void updateRTT(const double &)
Definition uwvbr-module.cpp:448
double sumrtt
Definition uwvbr-module.h:296
UwVbrModule()
Definition uwvbr-module.cpp:96
virtual void incrPktInvalid()
Definition uwvbr-module.cpp:493
virtual void incrPktOoseq()
Definition uwvbr-module.cpp:487
int pkts_recv
Definition uwvbr-module.h:263
int period_identifier_
Definition uwvbr-module.h:279
int txsn
Definition uwvbr-module.h:261
virtual void updateFTT(const double &)
Definition uwvbr-module.cpp:456
double period1_
Definition uwvbr-module.h:281
virtual void sendPkt()
Definition uwvbr-module.cpp:254
virtual void incrPktRecv()
Definition uwvbr-module.cpp:481
virtual double GetFTT() const
Definition uwvbr-module.cpp:391
double sftt
Definition uwvbr-module.h:275
double sthr
Definition uwvbr-module.h:277
int pkts_lost
Definition uwvbr-module.h:266
int hrsn
Definition uwvbr-module.h:262
virtual int command(int argc, const char *const *argv)
Definition uwvbr-module.cpp:153
virtual void recv(Packet *)
Definition uwvbr-module.cpp:302
virtual void resetStats()
Definition uwvbr-module.cpp:499
virtual void transmit()
Definition uwvbr-module.cpp:270
virtual ~UwVbrModule()
Definition uwvbr-module.cpp:146
double lrtime
Definition uwvbr-module.h:276
virtual void switchPeriod()
Definition uwvbr-module.cpp:278
Definition uwvbr-module.h:145
UwVbrPeriodSwitcher(UwVbrModule *m)
Definition uwvbr-module.h:147
virtual void expire(Event *e)
Definition uwvbr-module.cpp:89
Definition uwvbr-module.h:127
virtual void expire(Event *e)
Definition uwvbr-module.cpp:83
UwVbrSendTimer(UwVbrModule *m)
Definition uwvbr-module.h:129
Definition uwvbr-module.h:70
static struct hdr_uwvbr * access(const Packet *p)
Definition uwvbr-module.h:87
float & rftt()
Definition uwvbr-module.h:114
bool & rftt_valid()
Definition uwvbr-module.h:105
float rftt_
Definition uwvbr-module.h:72
u_int16_t & sn()
Definition uwvbr-module.h:96
static int offset_
Definition uwvbr-module.h:75
u_int16_t sn_
Definition uwvbr-module.h:71
bool rftt_valid_
Definition uwvbr-module.h:73
static int & offset()
Definition uwvbr-module.h:81
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.
packet_t PT_UWVBR
Definition initlib.cpp:45