DESERT 4.0.0
uwicrp-module-node.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 UWICRP_MODULE_NODE_H
41#define UWICRP_MODULE_NODE_H
42
43#include "uwicrp-common.h"
44#include "uwicrp-hdr-ack.h"
45#include "uwicrp-hdr-data.h"
46#include "uwicrp-hdr-status.h"
47#include <uwip-clmsg.h>
48#include <uwip-module.h>
49
50#include "packet.h"
51#include <climits>
52#include <ctime>
53#include <iostream>
54#include <module.h>
55#include <rng.h>
56#include <sstream>
57#include <string>
58#include <tclcl.h>
59#include <vector>
60
61class UwIcrpNode;
62
68class AckWaiting : public TimerHandler
69{
70public:
72 : TimerHandler()
73 {
74 module = m;
75 }
76
77protected:
78 virtual void expire(Event *e);
79 UwIcrpNode *module;
80};
81
85class UwIcrpNode : public Module
86{
87 friend class AckWaiting;
88
89public:
93 UwIcrpNode();
94
99
100protected:
108 virtual int recvSyncClMsg(ClMessage *);
109
118 virtual int recvAsyncClMsg(ClMessage *);
119
130 virtual int command(int, const char *const *);
131
137 virtual void recv(Packet *);
138
147 virtual void initialize();
148
154 virtual void clearRouteTable(const int &);
155
159 virtual void clearAllRouteTable();
160
166 virtual void initPkt(Packet *);
167
173 virtual void addRouteEntry(Packet *);
174
183 virtual int findInRouteTable(nsaddr_t);
184
195 virtual bool isIpInList(Packet *, nsaddr_t);
196
207 virtual bool addIpInList(Packet *, nsaddr_t);
208
212 virtual void printHopTable();
213
221 virtual string printIP(const uint8_t);
222
230 nsaddr_t str2addr(const char *);
231
238 virtual void sendBackAck(const Packet *p);
239
245 virtual void initPktAck(Packet *p);
246
250 virtual void ackLost();
251
257 static inline const int
259 {
260 return sizeof(hdr_uwicrp_ack);
261 }
262
268 static inline const int
270 {
271 return sizeof(hdr_uwicrp_data);
272 }
273
279 static inline const int
281 {
282 return sizeof(hdr_uwicrp_status);
283 }
284
285 uint8_t ipAddr_;
286 uint8_t ipSink_;
288 route_table[HOP_TABLE_LENGTH];
295private:
296 static long numberofstatuspkt_;
298 static long numberofdatapkt_;
300 static long numberofackpkt_;
302};
303
304#endif // UWICRP_MODULE_NODE_H
Definition uwicrp-module-node.h:69
AckWaiting(UwIcrpNode *m)
Definition uwicrp-module-node.h:71
virtual void expire(Event *e)
Definition uwicrp-module-node.cpp:69
Definition uwicrp-module-node.h:86
virtual void clearAllRouteTable()
Definition uwicrp-module-node.cpp:137
virtual void addRouteEntry(Packet *)
Definition uwicrp-module-node.cpp:414
virtual void sendBackAck(const Packet *p)
Definition uwicrp-module-node.cpp:540
nsaddr_t str2addr(const char *)
Definition uwicrp-module-node.cpp:518
uint8_t ipSink_
Definition uwicrp-module-node.h:286
virtual string printIP(const uint8_t)
Definition uwicrp-module-node.cpp:510
virtual void ackLost()
Definition uwicrp-module-node.cpp:580
double max_validity_time_
Definition uwicrp-module-node.h:289
virtual void initPktAck(Packet *p)
Definition uwicrp-module-node.cpp:558
static const int getStatusPktHeaderSize()
Definition uwicrp-module-node.h:280
virtual int command(int, const char *const *)
Definition uwicrp-module-node.cpp:149
static long numberofstatuspkt_
Definition uwicrp-module-node.h:296
virtual bool addIpInList(Packet *, nsaddr_t)
Definition uwicrp-module-node.cpp:481
virtual void initialize()
Definition uwicrp-module-node.cpp:116
uint8_t ipAddr_
Definition uwicrp-module-node.h:285
static long numberofackpkt_
Definition uwicrp-module-node.h:300
static const int getAckPktHeaderSize()
Definition uwicrp-module-node.h:258
routing_table_entry route_table[HOP_TABLE_LENGTH]
Definition uwicrp-module-node.h:288
virtual int recvAsyncClMsg(ClMessage *)
Definition uwicrp-module-node.cpp:106
AckWaiting ackwaitingTmr_
Definition uwicrp-module-node.h:293
virtual void initPkt(Packet *)
Definition uwicrp-module-node.cpp:383
static long numberofdatapkt_
Definition uwicrp-module-node.h:298
virtual bool isIpInList(Packet *, nsaddr_t)
Definition uwicrp-module-node.cpp:467
virtual void printHopTable()
Definition uwicrp-module-node.cpp:496
virtual int findInRouteTable(nsaddr_t)
Definition uwicrp-module-node.cpp:449
static const int getDataPktHeaderSize()
Definition uwicrp-module-node.h:269
UwIcrpNode()
Definition uwicrp-module-node.cpp:74
~UwIcrpNode()
Definition uwicrp-module-node.cpp:95
virtual int recvSyncClMsg(ClMessage *)
Definition uwicrp-module-node.cpp:100
virtual void recv(Packet *)
Definition uwicrp-module-node.cpp:207
int printDebug_
Definition uwicrp-module-node.h:290
virtual void clearRouteTable(const int &)
Definition uwicrp-module-node.cpp:125
double timer_ack_waiting_
Definition uwicrp-module-node.h:292
Definition uwicrp-hdr-ack.h:51
Definition uwicrp-hdr-data.h:53
Definition uwicrp-hdr-status.h:53
Definition uwicrp-common.h:53
Common structures and definition used by UWICRP.
Provides the Ack Messages header description.
Provides the Data Messages header description.
Provides the Status Messages header description.
Cross layer messages definition for the UWIP Module.
Provides the UWIP packets header description. Definition of the class that define the network layer.