DESERT 4.0.0
uwmulti-traffic-range-crt.h
Go to the documentation of this file.
1//
2// Copyright (c) 2014 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
38#ifndef UWMULTI_TRAFFIC_CONTROL_H
39#define UWMULTI_TRAFFIC_CONTROL_H
40
42#include <set>
43#include <uwip-module.h>
44
45extern packet_t PT_MULTI_TR_PROBE;
46extern packet_t PT_MULTI_TR_PROBE_ACK;
47#define HDR_UWMTR(P) (hdr_uwm_tr::access(P))
48// DEFINE BEHAVIORS
50
51// DEFINE STATES
53
55 std::set<int> module_ids;
56 int status;
58};
59typedef std::map<int, check_status> StatusMap;
61typedef std::map<int, uint> CounterMap;
63typedef struct hdr_uwm_tr {
64 int tr_id_;
65 static int offset_;
70 inline static int &
72 {
73 return offset_;
74 }
75
76 inline static hdr_uwm_tr *
77 access(const Packet *p)
78 {
79 return (hdr_uwm_tr *) p->access(offset_);
80 }
81
85 int &
87 {
88 return tr_id_;
89 }
90
92
97{
98
99public:
104
109 {
110 }
111
122 virtual int command(int, const char *const *);
123
129 virtual void recv(Packet *p, int idSrc);
130
137 virtual void
138 sendDown(Packet *p, double delay = 0)
139 {
140 if (p != NULL) {
141 Module::sendDown(p, delay);
142 }
143 }
144
152 virtual void
153 sendDown(int moduleId, Packet *p, double delay = 0)
154 {
155 if (p != NULL) {
156 Module::sendDown(moduleId, p, delay);
157 }
158 }
159
160protected:
176 virtual void manageBuffer(int traffic);
177
186 virtual int getBestLowerLayer(int traffic, Packet *p = NULL);
187
193 virtual void checkRange(
194 int traffic, int module_id, uint8_t destAdd = UWIP_BROADCAST);
195
202 virtual void manageCheckedLayer(
203 int module_id, uint8_t destAdd, bool in_range, int idSrc = 0);
204
210 virtual void initStatus(int traffic);
211
217 virtual void timerExpired(int traffic);
218
224 void incrSignalingCounter(int traffic, CounterMap &map_cnt);
225
233 uint getSignalingCounter(int traffic, const CounterMap &map_cnt) const;
234
235private:
239 class UwCheckRangeTimer : public TimerHandler
240 {
241 public:
243 : TimerHandler()
244 , traffic(traff)
245 , num_expires(0)
246 , max_increment(10)
247 {
248 module = m;
249 }
251 {
252 }
255 int const max_increment;
257 protected:
262 virtual void expire(Event *e);
263 UwMultiTrafficRangeCtr *module;
265 };
266 // Variables
267 std::map<int, UwCheckRangeTimer *>
269};
270
271#endif /* UWMULTI_TRAFFIC_CONTROL_H */
Definition uwmulti-traffic-control.h:105
Definition uwmulti-traffic-range-crt.h:240
int traffic
Definition uwmulti-traffic-range-crt.h:253
int num_expires
Definition uwmulti-traffic-range-crt.h:254
int const max_increment
Definition uwmulti-traffic-range-crt.h:255
~UwCheckRangeTimer()
Definition uwmulti-traffic-range-crt.h:250
virtual void expire(Event *e)
Definition uwmulti-traffic-range-crt.cc:44
UwCheckRangeTimer(UwMultiTrafficRangeCtr *m, int traff)
Definition uwmulti-traffic-range-crt.h:242
Definition uwmulti-traffic-range-crt.h:97
virtual void manageCheckedLayer(int module_id, uint8_t destAdd, bool in_range, int idSrc=0)
Definition uwmulti-traffic-range-crt.cc:186
std::map< int, UwCheckRangeTimer * > timers
Definition uwmulti-traffic-range-crt.h:268
virtual void manageBuffer(int traffic)
Definition uwmulti-traffic-range-crt.cc:293
CounterMap rx_probe_ack_cnt
Definition uwmulti-traffic-range-crt.h:168
StatusMap status
Definition uwmulti-traffic-range-crt.h:161
virtual void recv(Packet *p, int idSrc)
Definition uwmulti-traffic-range-crt.cc:122
CounterMap tx_probe_cnt
Definition uwmulti-traffic-range-crt.h:164
void incrSignalingCounter(int traffic, CounterMap &map_cnt)
Definition uwmulti-traffic-range-crt.cc:468
virtual int command(int, const char *const *)
Definition uwmulti-traffic-range-crt.cc:88
virtual void initStatus(int traffic)
Definition uwmulti-traffic-range-crt.cc:458
CounterMap tx_probe_ack_cnt
Definition uwmulti-traffic-range-crt.h:166
int signaling_pktSize
Definition uwmulti-traffic-range-crt.h:163
double check_to_period
Definition uwmulti-traffic-range-crt.h:162
uint getSignalingCounter(int traffic, const CounterMap &map_cnt) const
Definition uwmulti-traffic-range-crt.cc:479
UwMultiTrafficRangeCtr()
Definition uwmulti-traffic-range-crt.cc:76
virtual void checkRange(int traffic, int module_id, uint8_t destAdd=UWIP_BROADCAST)
Definition uwmulti-traffic-range-crt.cc:378
virtual void sendDown(Packet *p, double delay=0)
Definition uwmulti-traffic-range-crt.h:138
virtual void timerExpired(int traffic)
Definition uwmulti-traffic-range-crt.cc:425
CounterMap rx_probe_cnt
Definition uwmulti-traffic-range-crt.h:165
virtual int getBestLowerLayer(int traffic, Packet *p=NULL)
Definition uwmulti-traffic-range-crt.cc:314
virtual void sendDown(int moduleId, Packet *p, double delay=0)
Definition uwmulti-traffic-range-crt.h:153
virtual ~UwMultiTrafficRangeCtr()
Definition uwmulti-traffic-range-crt.h:108
Definition uwmulti-traffic-range-crt.h:54
std::set< int > module_ids
Definition uwmulti-traffic-range-crt.h:55
int robust_id
Definition uwmulti-traffic-range-crt.h:57
int status
Definition uwmulti-traffic-range-crt.h:56
Definition uwmulti-traffic-range-crt.h:63
int tr_id_
Definition uwmulti-traffic-range-crt.h:64
static int offset_
Definition uwmulti-traffic-range-crt.h:65
int & traffic()
Definition uwmulti-traffic-range-crt.h:86
static int & offset()
Definition uwmulti-traffic-range-crt.h:71
static hdr_uwm_tr * access(const Packet *p)
Definition uwmulti-traffic-range-crt.h:77
Provides the UWIP packets header description. Definition of the class that define the network layer.
TRAFFIC_STATES
Definition uwmulti-traffic-range-crt.h:52
@ RANGE_CNF_WAIT
Definition uwmulti-traffic-range-crt.h:52
@ IDLE
Definition uwmulti-traffic-range-crt.h:52
packet_t PT_MULTI_TR_PROBE
Definition initlib.cc:49
CONTROL_RANGE_BEHAVIORS
Definition uwmulti-traffic-range-crt.h:49
@ ROBUST
Definition uwmulti-traffic-range-crt.h:49
@ CHECK_RANGE
Definition uwmulti-traffic-range-crt.h:49
std::map< int, uint > CounterMap
Definition uwmulti-traffic-range-crt.h:61
packet_t PT_MULTI_TR_PROBE_ACK
Definition initlib.cc:50
std::map< int, check_status > StatusMap
Definition uwmulti-traffic-range-crt.h:59