DESERT 4.0.0
uwpolling_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 Uwpolling_HDR_NODE_H
41#define Uwpolling_HDR_NODE_H
42
43#include "mmac.h"
44#include "uwpolling_cmn_hdr.h"
45
46#include <chrono>
47#include <fstream>
48#include <iostream>
49#include <map>
50#include <queue>
51#include <set>
52#include <string>
53
54#define UWPOLLING_NODE_DROP_REASON_BUFFER_FULL \
55 "DBF"
56#define UWPOLLING_NODE_DROP_REASON_ERROR "DERR"
57#define UWPOLLING_NODE_DROP_REASON_UNKNOWN_TYPE \
58 "DUT"
59#define UWPOLLING_NODE_DROP_REASON_WRONG_RECEIVER \
60 "DWR"
61#define UWPOLLING_NODE_DROP_REASON_WRONG_STATE \
62 "DWS"
63#define UWPOLLING_NODE_DROP_REASON_PACKET_NOT_FOR_ME \
64 "DPNFM"
65#define UWPOLLING_NODE_DROP_REASON_IMINLIST_NOT_POLLED \
66 "DPLNP"
68#define UWPOLLING_NODE_DROP_REASON_NOT_POLLED \
69 "DNP"
74class Uwpolling_NODE : public MMac
75{
76public:
84 virtual ~Uwpolling_NODE();
95 virtual int command(int argc, const char *const *argv);
103 virtual int crLayCommand(ClMessage *m);
104
105protected:
115
123
141
149
153 class Uwpolling_NODE_Timer : public TimerHandler
154 {
155 public:
161 : TimerHandler()
162 , start_time(0.0)
163 , left_duration(0.0)
164 , counter(0)
165 , module(m)
167 {
168 assert(m != NULL);
169 }
170
175 {
176 }
177
181 virtual void
183 {
185 left_duration -= (NOW - start_time);
186 if (left_duration <= 0.0) {
187 left_duration = module->mac2phy_delay_;
188 }
189 force_cancel();
191 }
192
197 virtual void
199 {
201 start_time = NOW;
202 assert(left_duration > 0);
203 sched(left_duration);
205 }
206
210 virtual void
212 {
214 force_cancel();
215 }
216
221 virtual void
222 schedule(double val)
223 {
224 start_time = NOW;
225 left_duration = val;
227 resched(val);
228 }
229
234 bool
236 {
237 return (timer_status == UWPOLLING_IDLE);
238 }
239
244 bool
246 {
248 }
249
254 bool
256 {
258 }
259
264 bool
266 {
267 return (timer_status == UWPOLLING_FROZEN);
268 }
269
274 bool
276 {
277 return (timer_status == UWPOLLING_FROZEN ||
279 }
280
284 void
286 {
287 counter = 0;
288 }
289
293 void
295 {
296 ++counter;
297 }
298
303 int
305 {
306 return counter;
307 }
308
313 double
315 {
316 return left_duration;
317 }
318
319 protected:
320 double start_time;
324 *module;
326 };
327
336 {
337 public:
346
351 {
352 }
353
354 protected:
359 virtual void expire(Event *e);
360 };
361
367 {
368 public:
377
382 {
383 }
384
385 protected:
390 virtual void expire(Event *e);
391 };
392
401 {
402 public:
411
416 {
417 }
418
419 protected:
424 virtual void expire(Event *e);
425 };
431 virtual void recvFromUpperLayers(Packet *p);
437 virtual void Mac2PhyStartTx(Packet *p);
443 virtual void Phy2MacEndTx(const Packet *p);
449 virtual void
450 Phy2MacStartRx(const Packet *p)
451 {
452 }
458 virtual void Phy2MacEndRx(Packet *p);
464 virtual void initPkt(UWPOLLING_PKT_TYPE pkt_type);
472 virtual void initInfo();
473
478 virtual void
480 {
481 last_reason = reason;
482 }
483
488 virtual void
490 {
492 curr_state = state;
493 }
494
498 virtual void
500 {
501 n_probe_sent++;
502 }
503
507 virtual void
509 {
511 }
512
516 inline void
521
525 inline void
530
534 inline void
536 {
538 }
539
540 inline void
542 {
543 std::cout << getEpoch() << "::" << NOW << "::Uwpolling_NODE(" << addr
544 << ")::DATA_QUEUE_SIZE--> " << Q_data.size() << std::endl;
545 }
546
551 inline int
553 {
554 return n_probe_sent;
555 }
556
561 inline int
563 {
564 return n_times_polled;
565 }
566
571 inline int
573 {
574 return n_trigger_received;
575 }
576
581 inline int
583 {
584 return n_trigger_dropped;
585 }
586
591 inline int
593 {
594 return n_poll_dropped;
595 }
600 virtual void waitForUser();
604 virtual void stateIdle();
612 virtual void stateTxData();
620 virtual void stateRxTrigger();
628 virtual void stateTxProbe();
636 virtual void stateRxPoll();
641 virtual void BackOffTimerExpired();
647 virtual void RxPollTimerExpired();
653 virtual double getBackOffTime();
657 virtual void TxData();
661 virtual void TxPRobe();
666 virtual void stateWaitPoll();
667
672 inline unsigned long int
674 {
675 unsigned long int timestamp =
676 (unsigned long int) (std::chrono::duration_cast<
677 std::chrono::milliseconds>(
678 std::chrono::system_clock::now().time_since_epoch())
679 .count());
680 return timestamp;
681 }
682
683 /*************************
684 * input values from TCL *
685 *************************/
686 double T_poll;
694 uint node_id;
698 int n_run; /*< ID of the experiments (used during sea trial) */
702 std::queue<Packet *> Q_data;
704 static bool initialized;
707 bool polled;
719 double T_in;
721 double T_fin;
723 double BOffTime;
744 static map<Uwpolling_NODE::UWPOLLING_NODE_STATUS, string>
746 static map<Uwpolling_NODE::UWPOLLING_NODE_REASON, string>
748 static map<Uwpolling_NODE::UWPOLLING_PKT_TYPE, string>
756 std::ofstream fout;
757 std::ofstream out_file_stats;
758
763};
764#endif
Definition uwpolling_NODE.h:336
BackOffTimer(Uwpolling_NODE *m)
Definition uwpolling_NODE.h:342
virtual void expire(Event *e)
Definition uwpolling_NODE.cpp:76
virtual ~BackOffTimer()
Definition uwpolling_NODE.h:350
Definition uwpolling_NODE.h:367
virtual void expire(Event *e)
Definition uwpolling_NODE.cpp:95
Rx_Poll_Timer(Uwpolling_NODE *m)
Definition uwpolling_NODE.h:373
virtual ~Rx_Poll_Timer()
Definition uwpolling_NODE.h:381
Definition uwpolling_NODE.h:401
virtual void expire(Event *e)
Definition uwpolling_NODE.cpp:105
Tx_Data_Timer(Uwpolling_NODE *m)
Definition uwpolling_NODE.h:407
virtual ~Tx_Data_Timer()
Definition uwpolling_NODE.h:415
Definition uwpolling_NODE.h:154
bool isRunning()
Definition uwpolling_NODE.h:245
Uwpolling_NODE *UWPOLLING_TIMER_STATUS timer_status
Definition uwpolling_NODE.h:325
virtual void freeze()
Definition uwpolling_NODE.h:182
int getCounter()
Definition uwpolling_NODE.h:304
Uwpolling_NODE_Timer(Uwpolling_NODE *m)
Definition uwpolling_NODE.h:160
virtual void stop()
Definition uwpolling_NODE.h:211
double start_time
Definition uwpolling_NODE.h:320
virtual void schedule(double val)
Definition uwpolling_NODE.h:222
virtual void unFreeze()
Definition uwpolling_NODE.h:198
bool isExpired()
Definition uwpolling_NODE.h:255
int counter
Definition uwpolling_NODE.h:322
bool isFrozen()
Definition uwpolling_NODE.h:265
bool isActive()
Definition uwpolling_NODE.h:275
void resetCounter()
Definition uwpolling_NODE.h:285
double left_duration
Definition uwpolling_NODE.h:321
double getDuration()
Definition uwpolling_NODE.h:314
bool isIdle()
Definition uwpolling_NODE.h:235
virtual ~Uwpolling_NODE_Timer()
Definition uwpolling_NODE.h:174
void incrCounter()
Definition uwpolling_NODE.h:294
Definition uwpolling_NODE.h:75
virtual void stateTxData()
Definition uwpolling_NODE.cpp:438
virtual void incrProbeSent()
Definition uwpolling_NODE.h:499
double T_fin
Definition uwpolling_NODE.h:721
Tx_Data_Timer tx_data_timer
Definition uwpolling_NODE.h:753
int max_data_pkt_tx
Definition uwpolling_NODE.h:692
virtual void Phy2MacEndRx(Packet *p)
Definition uwpolling_NODE.cpp:647
Packet * curr_poll_pkt
Definition uwpolling_NODE.h:736
UWPOLLING_NODE_REASON last_reason
Definition uwpolling_NODE.h:740
int getTimesPolled()
Definition uwpolling_NODE.h:562
uint N_polled_node
Definition uwpolling_NODE.h:731
bool LastPacket
Definition uwpolling_NODE.h:713
uint node_id
Definition uwpolling_NODE.h:694
int n_times_polled
Definition uwpolling_NODE.h:728
virtual void stateRxTrigger()
Definition uwpolling_NODE.cpp:597
virtual void stateRxPoll()
Definition uwpolling_NODE.cpp:367
double BOffTime
Definition uwpolling_NODE.h:723
bool polled
Definition uwpolling_NODE.h:707
static map< Uwpolling_NODE::UWPOLLING_NODE_REASON, string > reason_info
Definition uwpolling_NODE.h:747
double T_poll_guard
Definition uwpolling_NODE.h:687
BackOffTimer backoff_timer
Definition uwpolling_NODE.h:751
UWPOLLING_NODE_STATUS curr_state
Definition uwpolling_NODE.h:741
virtual void Phy2MacStartRx(const Packet *p)
Definition uwpolling_NODE.h:450
virtual void stateTxProbe()
Definition uwpolling_NODE.cpp:308
virtual void initInfo()
Definition uwpolling_NODE.cpp:252
bool Triggered
Definition uwpolling_NODE.h:711
std::ofstream fout
Definition uwpolling_NODE.h:756
int max_payload
Definition uwpolling_NODE.h:689
int getProbeSent()
Definition uwpolling_NODE.h:552
void incrTriggerReceived()
Definition uwpolling_NODE.h:517
int buffer_data_pkts
Definition uwpolling_NODE.h:690
unsigned long int getEpoch()
Definition uwpolling_NODE.h:673
void getDataQueueLog()
Definition uwpolling_NODE.h:541
virtual void incrTimesPolled()
Definition uwpolling_NODE.h:508
virtual void refreshReason(UWPOLLING_NODE_REASON reason)
Definition uwpolling_NODE.h:479
Packet * curr_probe_pkt
Definition uwpolling_NODE.h:735
static map< Uwpolling_NODE::UWPOLLING_NODE_STATUS, string > status_info
Definition uwpolling_NODE.h:745
int getPollDropped()
Definition uwpolling_NODE.h:592
Rx_Poll_Timer rx_poll_timer
Definition uwpolling_NODE.h:752
virtual void Mac2PhyStartTx(Packet *p)
Definition uwpolling_NODE.cpp:471
double T_poll
Definition uwpolling_NODE.h:686
double backoff_tuner
Definition uwpolling_NODE.h:688
virtual void refreshState(UWPOLLING_NODE_STATUS state)
Definition uwpolling_NODE.h:489
Uwpolling_NODE()
Definition uwpolling_NODE.cpp:129
virtual void waitForUser()
Definition uwpolling_NODE.cpp:720
uint PROBE_uid
Definition uwpolling_NODE.h:732
int getTriggerReceived()
Definition uwpolling_NODE.h:572
std::queue< Packet * > Q_data
Definition uwpolling_NODE.h:702
UWPOLLING_TIMER_STATUS
Definition uwpolling_NODE.h:143
@ UWPOLLING_RUNNING
Definition uwpolling_NODE.h:145
@ UWPOLLING_EXPIRED
Definition uwpolling_NODE.h:147
@ UWPOLLING_FROZEN
Definition uwpolling_NODE.h:146
@ UWPOLLING_IDLE
Definition uwpolling_NODE.h:144
int n_trigger_received
Definition uwpolling_NODE.h:730
virtual void recvFromUpperLayers(Packet *p)
Definition uwpolling_NODE.cpp:409
virtual void RxPollTimerExpired()
Definition uwpolling_NODE.cpp:115
int packet_index
Definition uwpolling_NODE.h:726
static bool initialized
Definition uwpolling_NODE.h:704
UWPOLLING_NODE_STATUS
Definition uwpolling_NODE.h:107
@ UWPOLLING_NODE_STATUS_IDLE
Definition uwpolling_NODE.h:108
@ UWPOLLING_NODE_STATUS_RX_POLL
Definition uwpolling_NODE.h:111
@ UWPOLLING_NODE_STATUS_WAIT_POLL
Definition uwpolling_NODE.h:113
@ UWPOLLING_NODE_STATUS_RX_TRIGGER
Definition uwpolling_NODE.h:109
@ UWPOLLING_NODE_STATUS_TX_DATA
Definition uwpolling_NODE.h:112
@ UWPOLLING_NODE_STATUS_TX_PROBE
Definition uwpolling_NODE.h:110
int n_trigger_dropped
Definition uwpolling_NODE.h:759
virtual void BackOffTimerExpired()
Definition uwpolling_NODE.cpp:88
virtual void TxPRobe()
Definition uwpolling_NODE.cpp:343
int AUV_mac_addr
Definition uwpolling_NODE.h:724
Packet * curr_data_pkt
Definition uwpolling_NODE.h:734
virtual void initPkt(UWPOLLING_PKT_TYPE pkt_type)
Definition uwpolling_NODE.cpp:538
virtual void TxData()
Definition uwpolling_NODE.cpp:477
virtual int crLayCommand(ClMessage *m)
Definition uwpolling_NODE.cpp:243
double T_in
Definition uwpolling_NODE.h:719
UWPOLLING_NODE_STATUS prev_state
Definition uwpolling_NODE.h:742
int getTriggerDropped()
Definition uwpolling_NODE.h:582
int sea_trial
Definition uwpolling_NODE.h:695
virtual void Phy2MacEndTx(const Packet *p)
Definition uwpolling_NODE.cpp:484
double MaxTimeStamp
Definition uwpolling_NODE.h:717
UWPOLLING_NODE_REASON
Definition uwpolling_NODE.h:125
@ UWPOLLING_NODE_REASON_TX_DATA
Definition uwpolling_NODE.h:126
@ UWPOLLING_NODE_REASON_NOT_IN_LIST
Definition uwpolling_NODE.h:138
@ UWPOLLING_NODE_REASON_WRONG_TYPE
Definition uwpolling_NODE.h:135
@ UWPOLLING_NODE_REASON_LIST_NOT_POLLED
Definition uwpolling_NODE.h:139
@ UWPOLLING_NODE_REASON_BACKOFF_TIMER_EXPIRED
Definition uwpolling_NODE.h:131
@ UWPOLLING_NODE_REASON_RX_TRIGGER
Definition uwpolling_NODE.h:127
@ UWPOLLING_NODE_REASON_NOT_SET
Definition uwpolling_NODE.h:133
@ UWPOLLING_NODE_REASON_RX_POLL
Definition uwpolling_NODE.h:130
@ UWPOLLING_NODE_REASON_RX_POLL_TIMER_EXPIRED
Definition uwpolling_NODE.h:132
@ UWPOLLING_NODE_REASON_PKT_ERROR
Definition uwpolling_NODE.h:128
@ UWPOLLING_NODE_REASON_WRONG_RECEIVER
Definition uwpolling_NODE.h:136
@ UWPOLLING_NODE_REASON_TX_PROBE
Definition uwpolling_NODE.h:129
@ UWPOLLING_NODE_REASON_WRONG_STATE
Definition uwpolling_NODE.h:137
@ UWPOLLING_NODE_REASON_EMPTY_DATA_QUEUE
Definition uwpolling_NODE.h:134
virtual void stateWaitPoll()
Definition uwpolling_NODE.cpp:351
virtual int command(int argc, const char *const *argv)
Definition uwpolling_NODE.cpp:202
int n_poll_dropped
Definition uwpolling_NODE.h:760
int useAdaptiveTpoll
Definition uwpolling_NODE.h:762
void incrPollDropped()
Definition uwpolling_NODE.h:535
int N_data_pkt_2_TX
Definition uwpolling_NODE.h:725
int print_stats
Definition uwpolling_NODE.h:697
virtual void stateIdle()
Definition uwpolling_NODE.cpp:583
Packet * curr_trigger_pkt
Definition uwpolling_NODE.h:737
void incrTriggerDropped()
Definition uwpolling_NODE.h:526
bool RxPollEnabled
Definition uwpolling_NODE.h:709
virtual double getBackOffTime()
Definition uwpolling_NODE.cpp:633
uint n_probe_sent
Definition uwpolling_NODE.h:727
static map< Uwpolling_NODE::UWPOLLING_PKT_TYPE, string > pkt_type_info
Definition uwpolling_NODE.h:749
int n_run
Definition uwpolling_NODE.h:698
double Intra_data_Guard_Time
Definition uwpolling_NODE.h:699
UWPOLLING_PKT_TYPE
Definition uwpolling_NODE.h:117
@ UWPOLLING_PROBE_PKT
Definition uwpolling_NODE.h:121
@ UWPOLLING_TRIGGER_PKT
Definition uwpolling_NODE.h:120
@ UWPOLLING_POLL_PKT
Definition uwpolling_NODE.h:119
@ UWPOLLING_DATA_PKT
Definition uwpolling_NODE.h:118
std::ofstream out_file_stats
Definition uwpolling_NODE.h:757
virtual ~Uwpolling_NODE()
Definition uwpolling_NODE.cpp:197
std::pair< int, int > counter
Definition uwinterference.h:53
Common structures and variables in the protocol.