DESERT 4.0.0
uwflooding-sec.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
40#ifndef UWFLOODINGSEC_H
41#define UWFLOODINGSEC_H
42
43#define TTL_EQUALS_TO_ZERO \
44 "TEZ"
46#include "uwflooding-hdr.h"
47
48#include <uwcbr-module.h>
49#include <uwip-clmsg.h>
50#include <uwip-module.h>
51
52#include "mphy.h"
53#include "packet.h"
54#include <module.h>
55#include <tclcl.h>
56
57#include <cmath>
58#include <ctime>
59#include <fstream>
60#include <iostream>
61#include <limits>
62#include <list>
63#include <map>
64#include <rng.h>
65#include <sstream>
66#include <string>
67#include <vector>
68
69#include "uwbase_reputation.h"
70
72class UwFloodingSec;
73
78class NeighborReputationHandler : public TimerHandler
79{
80public:
89 uint8_t neigh_addr, UwFloodingSec *m, double alpha_val, int dbg);
90
95
102 bool addUnconfirmedPkt(int uid, double expire_time);
103
110 bool checkUnconfirmedPkt(int uid);
111
117 void updateChannelMetrics(double val_snr, double last_noise_val);
118
123 void updateInstantNoise(double inst_noise_val);
124
125protected:
133 bool getNextPacket(int &uid, double &exp_time) const;
134
138 void removeOldPackets();
139
144 virtual void expire(Event *e);
145
146 UwFloodingSec *module;
148 std::map<int, double> unconfirmed_pkts;
153 double avg_snr;
154 double alpha;
157 double last_noise;
158 double inst_noise;
159 int debug;
160};
161
165class UwFloodingSec : public Module
166{
168
169public:
174
178 virtual ~UwFloodingSec();
179
180protected:
181 /*****************************
182 | Internal Functions |
183 *****************************/
194 virtual int command(int, const char *const *);
195
201 virtual void recv(Packet *);
202
210 virtual int recvSyncClMsg(ClMessage *);
211
220 virtual int recvAsyncClMsg(ClMessage *);
221
229 static nsaddr_t str2addr(const char *);
230
236 virtual void writePathInTrace(const Packet *, const string &);
237
245 static string printIP(const nsaddr_t &);
246
252 void addToNeighbor(uint8_t neighbor_addr);
253
258 void printNeighbor();
259
266 bool checkUnconfirmedPkt(uint8_t neighbor_addr, int uid);
267
273 void sendDown(Packet *p, double delay = 0);
274
281 virtual void sendStatsClMsg(int neighbor_addr);
282
288 void retrieveInstantNoise(int neighbor_addr);
289
290private:
291 // Variables
292
293 uint8_t ipAddr_;
294 int ttl_;
306 ostringstream osstream_;
308 typedef std::map<uint16_t, double> map_packets;
311 typedef std::map<uint8_t, map_packets>
317 std::map<uint16_t, uint8_t>
322 typedef std::map<uint8_t, uint> neighbor_map;
326 typedef std::map<uint8_t, NeighborReputationHandler>
331 double fwd_to;
336 UwReputationInterface *reputation;
338 double alpha_snr;
353
361 uint8_t getTTL(Packet *p) const;
362};
363
364#endif // UWFLOODING_H
Definition uwflooding-sec.h:79
double inst_noise
Definition uwflooding-sec.h:158
double avg_snr
Definition uwflooding-sec.h:153
bool addUnconfirmedPkt(int uid, double expire_time)
Definition uwflooding-sec.cpp:102
void updateInstantNoise(double inst_noise_val)
Definition uwflooding-sec.cpp:286
int debug
Definition uwflooding-sec.h:159
std::map< int, double > unconfirmed_pkts
Definition uwflooding-sec.h:148
bool is_running
Definition uwflooding-sec.h:150
double alpha
Definition uwflooding-sec.h:154
int waiting_uid
Definition uwflooding-sec.h:152
virtual void expire(Event *e)
Definition uwflooding-sec.cpp:177
virtual ~NeighborReputationHandler()
Definition uwflooding-sec.cpp:97
void removeOldPackets()
Definition uwflooding-sec.cpp:242
double last_noise
Definition uwflooding-sec.h:157
UwFloodingSec *uint8_t neighbor_addr
Definition uwflooding-sec.h:147
bool is_first_pkt
Definition uwflooding-sec.h:155
void updateChannelMetrics(double val_snr, double last_noise_val)
Definition uwflooding-sec.cpp:267
bool getNextPacket(int &uid, double &exp_time) const
Definition uwflooding-sec.cpp:218
bool checkUnconfirmedPkt(int uid)
Definition uwflooding-sec.cpp:135
Definition uwflooding-sec.h:166
double alpha_snr
Definition uwflooding-sec.h:338
std::map< uint8_t, map_packets > map_forwarded_packets
Definition uwflooding-sec.h:312
void retrieveInstantNoise(int neighbor_addr)
Definition uwflooding-sec.cpp:383
std::map< uint16_t, double > map_packets
Definition uwflooding-sec.h:308
virtual int recvSyncClMsg(ClMessage *)
Definition uwflooding-sec.cpp:326
double fwd_to
Definition uwflooding-sec.h:331
bool valid_phy_id
Definition uwflooding-sec.h:341
virtual int recvAsyncClMsg(ClMessage *)
Definition uwflooding-sec.cpp:407
std::map< uint16_t, uint8_t > ttl_traffic_map
Definition uwflooding-sec.h:318
uint8_t prev_hop_temp
Definition uwflooding-sec.h:333
virtual int command(int, const char *const *)
Definition uwflooding-sec.cpp:413
neighbor_map neighbor
Definition uwflooding-sec.h:324
int stats_phy_id
Definition uwflooding-sec.h:343
int optimize_
Definition uwflooding-sec.h:296
std::map< uint8_t, uint > neighbor_map
Definition uwflooding-sec.h:322
ostringstream osstream_
Definition uwflooding-sec.h:306
virtual ~UwFloodingSec()
Definition uwflooding-sec.cpp:321
void addToNeighbor(uint8_t neighbor_addr)
Definition uwflooding-sec.cpp:775
neighbor_timer_map neighbor_tmr
Definition uwflooding-sec.h:329
virtual void sendStatsClMsg(int neighbor_addr)
Definition uwflooding-sec.cpp:344
int ttl_
Definition uwflooding-sec.h:294
virtual void recv(Packet *)
Definition uwflooding-sec.cpp:489
bool checkUnconfirmedPkt(uint8_t neighbor_addr, int uid)
Definition uwflooding-sec.cpp:830
uint8_t ipAddr_
Definition uwflooding-sec.h:293
UwFloodingSec(const UwFloodingSec &)
ofstream trace_file_path_
Definition uwflooding-sec.h:304
UwReputationInterface * reputation
Definition uwflooding-sec.h:336
bool use_reputation
Definition uwflooding-sec.h:320
static nsaddr_t str2addr(const char *)
void printNeighbor()
Definition uwflooding-sec.cpp:792
bool trace_path_
Definition uwflooding-sec.h:299
std::map< uint8_t, NeighborReputationHandler > neighbor_timer_map
Definition uwflooding-sec.h:327
char * trace_file_path_name_
Definition uwflooding-sec.h:301
map_forwarded_packets my_forwarded_packets_
Definition uwflooding-sec.h:315
long packets_forwarded_
Definition uwflooding-sec.h:298
virtual void writePathInTrace(const Packet *, const string &)
Definition uwflooding-sec.cpp:728
UwFloodingSec()
Definition uwflooding-sec.cpp:296
double maximum_cache_time_
Definition uwflooding-sec.h:295
uint8_t getTTL(Packet *p) const
Definition uwflooding-sec.cpp:717
void sendDown(Packet *p, double delay=0)
Definition uwflooding-sec.cpp:812
static string printIP(const nsaddr_t &)
Definition uwflooding-sec.cpp:761
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.