DESERT 4.0.0
uwpolling_SINK.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_SINK_H
41#define Uwpolling_HDR_SINK_H
42
43#include "mmac.h"
44#include "uwpolling_cmn_hdr.h"
45
46#include <chrono>
47#include <fstream>
48#include <iostream>
49#include <list>
50#include <map>
51#include <queue>
52#include <set>
53#include <string>
54
55#define UWPOLLING_SINK_DROP_REASON_BUFFER_FULL \
56 "DBF"
57#define UWPOLLING_SINK_DROP_REASON_ERROR "DERR"
58#define UWPOLLING_SINK_DROP_REASON_UNKNOWN_TYPE \
59 "DUT"
60#define UWPOLLING_SINK_DROP_REASON_WRONG_RECEIVER \
61 "DWR"
62#define UWPOLLING_SINK_DROP_REASON_WRONG_STATE \
63 "DWS"
64#define UWPOLLING_SINK_DROP_REASON_PACKET_NOT_FOR_ME \
65 "DPNFM"
66#define UWPOLLING_SINK_DROP_REASON_IMINLIST_NOT_POLLED \
67 "DPLNP"
69#define UWPOLLING_SINK_DROP_REASON_NOT_POLLED \
70 "DNP"
75class Uwpolling_SINK : public MMac
76{
77public:
85 virtual ~Uwpolling_SINK();
96 virtual int command(int argc, const char *const *argv);
104 virtual int crLayCommand(ClMessage *m);
105
106protected:
116
125
141
149
153 class Uwpolling_SINK_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
398 virtual void Mac2PhyStartTx(Packet *p);
399
405 virtual void Phy2MacEndTx(const Packet *p);
406
412 virtual void
413 Phy2MacStartRx(const Packet *p)
414 {
415 }
416
422 virtual void Phy2MacEndRx(Packet *p);
428 virtual void initPkt(UWPOLLING_PKT_TYPE pkt_type);
436 virtual void initInfo();
437
442 virtual void
444 {
445 last_reason = reason;
446 }
447
452 virtual void
454 {
456 curr_state = state;
457 }
458
462 virtual void
464 {
465 n_probe_sent++;
466 }
467
471 virtual void
473 {
474 n_ack_sent++;
475 }
476
480 inline void
485
489 inline void
494
499 inline int
501 {
502 return n_probe_sent;
503 }
504
509 inline int
511 {
512 return n_ack_sent;
513 }
514
519 inline int
521 {
522 return n_trigger_received;
523 }
524
529 inline int
531 {
532 return n_trigger_dropped;
533 }
534
535 inline uint
537 {
538 return duplicate_pkts;
539 }
540
541 inline void
543 {
545 }
550 virtual void waitForUser();
554 virtual void stateIdle();
555
563 virtual void stateRxTrigger();
564
573 virtual void stateTxProbe();
574
579 virtual void BackOffTimerExpired();
580
585 virtual void RxDataTimerExpired();
586
592 virtual double getBackOffTime();
593
597 virtual void txAck();
598
602 virtual void TxProbe();
603
608 virtual void stateWaitData();
609
613 virtual void stateRxData();
614
619 virtual void addMissPkt2List(uint16_t n_pkts);
620
624 virtual void stateTxAck();
625
630 inline unsigned long int
632 {
633 unsigned long int timestamp =
634 (unsigned long int) (std::chrono::duration_cast<
635 std::chrono::milliseconds>(
636 std::chrono::system_clock::now().time_since_epoch())
637 .count());
638 return timestamp;
639 }
640
641 /*************************
642 * input values from TCL *
643 *************************/
644 double T_data;
648 uint sink_id;
650 static bool initialized;
660 double T_in;
662 double T_fin;
664 double BOffTime;
674
677 uint16_t expected_id;
678 uint16_t last_rx;
679 bool send_ACK;
681 std::list<uint16_t> missing_id_list;
684 uint16_t prev_expect_last_id; /*Expected last id of the previous round.
685 Needed to find which are the retx packets. */
696 Packet *curr_ack_pkt;
703 static map<Uwpolling_SINK::UWPOLLING_SINK_STATUS, string>
705 static map<Uwpolling_SINK::UWPOLLING_SINK_REASON, string>
707 static map<Uwpolling_SINK::UWPOLLING_PKT_TYPE, string>
713 std::ofstream fout;
714 std::ofstream out_file_stats;
719 int n_run; /*< ID of the experiments (used during sea trial) */
720
726 double T_guard;
729};
730#endif
Definition uwpolling_SINK.h:336
virtual ~BackOffTimer()
Definition uwpolling_SINK.h:350
BackOffTimer(Uwpolling_SINK *m)
Definition uwpolling_SINK.h:342
virtual void expire(Event *e)
Definition uwpolling_SINK.cpp:193
Definition uwpolling_SINK.h:367
virtual ~Rx_Data_Timer()
Definition uwpolling_SINK.h:381
virtual void expire(Event *e)
Definition uwpolling_SINK.cpp:204
Rx_Data_Timer(Uwpolling_SINK *m)
Definition uwpolling_SINK.h:373
Definition uwpolling_SINK.h:154
virtual ~Uwpolling_SINK_Timer()
Definition uwpolling_SINK.h:174
Uwpolling_SINK_Timer(Uwpolling_SINK *m)
Definition uwpolling_SINK.h:160
bool isFrozen()
Definition uwpolling_SINK.h:265
double start_time
Definition uwpolling_SINK.h:320
bool isActive()
Definition uwpolling_SINK.h:275
virtual void unFreeze()
Definition uwpolling_SINK.h:198
bool isRunning()
Definition uwpolling_SINK.h:245
double getDuration()
Definition uwpolling_SINK.h:314
int getCounter()
Definition uwpolling_SINK.h:304
void incrCounter()
Definition uwpolling_SINK.h:294
int counter
Definition uwpolling_SINK.h:322
bool isExpired()
Definition uwpolling_SINK.h:255
virtual void freeze()
Definition uwpolling_SINK.h:182
virtual void schedule(double val)
Definition uwpolling_SINK.h:222
void resetCounter()
Definition uwpolling_SINK.h:285
double left_duration
Definition uwpolling_SINK.h:321
Uwpolling_SINK *UWPOLLING_TIMER_STATUS timer_status
Definition uwpolling_SINK.h:325
bool isIdle()
Definition uwpolling_SINK.h:235
virtual void stop()
Definition uwpolling_SINK.h:211
Definition uwpolling_SINK.h:76
int max_payload
Definition uwpolling_SINK.h:727
double BOffTime
Definition uwpolling_SINK.h:664
static map< Uwpolling_SINK::UWPOLLING_PKT_TYPE, string > pkt_type_info
Definition uwpolling_SINK.h:708
Packet * curr_data_pkt
Definition uwpolling_SINK.h:693
virtual void refreshReason(UWPOLLING_SINK_REASON reason)
Definition uwpolling_SINK.h:443
uint n_curr_rx_pkts
Definition uwpolling_SINK.h:675
virtual void stateWaitData()
Definition uwpolling_SINK.cpp:467
virtual void BackOffTimerExpired()
Definition uwpolling_SINK.cpp:343
UWPOLLING_PKT_TYPE
Definition uwpolling_SINK.h:118
@ UWPOLLING_DATA_PKT
Definition uwpolling_SINK.h:119
@ UWPOLLING_ACK_PKT
Definition uwpolling_SINK.h:123
@ UWPOLLING_TRIGGER_PKT
Definition uwpolling_SINK.h:121
@ UWPOLLING_POLL_PKT
Definition uwpolling_SINK.h:120
@ UWPOLLING_PROBE_PKT
Definition uwpolling_SINK.h:122
virtual void stateRxData()
Definition uwpolling_SINK.cpp:480
bool triggerEnabled
Definition uwpolling_SINK.h:658
void incrDuplicatedPkt()
Definition uwpolling_SINK.h:542
int n_run
Definition uwpolling_SINK.h:719
UWPOLLING_SINK_STATUS prev_state
Definition uwpolling_SINK.h:701
unsigned long int getEpoch()
Definition uwpolling_SINK.h:631
virtual void refreshState(UWPOLLING_SINK_STATUS state)
Definition uwpolling_SINK.h:453
void incrTriggerReceived()
Definition uwpolling_SINK.h:481
void incrTriggerDropped()
Definition uwpolling_SINK.h:490
virtual int crLayCommand(ClMessage *m)
Definition uwpolling_SINK.cpp:184
Packet * curr_trigger_pkt
Definition uwpolling_SINK.h:695
uint16_t expected_last_id
Definition uwpolling_SINK.h:682
uint sink_id
Definition uwpolling_SINK.h:648
virtual void incrAckSent()
Definition uwpolling_SINK.h:472
static bool initialized
Definition uwpolling_SINK.h:650
virtual double getBackOffTime()
Definition uwpolling_SINK.cpp:329
bool first_rx_pkt
Definition uwpolling_SINK.h:688
int print_stats
Definition uwpolling_SINK.h:717
int AUV_mac_addr
Definition uwpolling_SINK.h:666
int ack_enabled
Definition uwpolling_SINK.h:722
double T_guard
Definition uwpolling_SINK.h:726
virtual void initInfo()
Definition uwpolling_SINK.cpp:643
double T_data_gurad
Definition uwpolling_SINK.h:645
std::ofstream fout
Definition uwpolling_SINK.h:713
virtual void stateIdle()
Definition uwpolling_SINK.cpp:271
virtual void txAck()
Definition uwpolling_SINK.cpp:634
UWPOLLING_SINK_STATUS
Definition uwpolling_SINK.h:108
@ UWPOLLING_SINK_STATUS_WAIT_DATA
Definition uwpolling_SINK.h:112
@ UWPOLLING_SINK_STATUS_RX_DATA
Definition uwpolling_SINK.h:113
@ UWPOLLING_SINK_STATUS_TX_ACK
Definition uwpolling_SINK.h:114
@ UWPOLLING_SINK_STATUS_TX_PROBE
Definition uwpolling_SINK.h:111
@ UWPOLLING_SINK_STATUS_RX_TRIGGER
Definition uwpolling_SINK.h:110
@ UWPOLLING_SINK_STATUS_IDLE
Definition uwpolling_SINK.h:109
virtual void incrProbeSent()
Definition uwpolling_SINK.h:463
Packet * curr_ack_pkt
Definition uwpolling_SINK.h:696
virtual void Phy2MacEndTx(const Packet *p)
Definition uwpolling_SINK.cpp:454
virtual int command(int argc, const char *const *argv)
Definition uwpolling_SINK.cpp:150
Rx_Data_Timer rx_data_timer
Definition uwpolling_SINK.h:711
virtual void stateTxAck()
Definition uwpolling_SINK.cpp:621
static map< Uwpolling_SINK::UWPOLLING_SINK_STATUS, string > status_info
Definition uwpolling_SINK.h:704
int n_ack_sent
Definition uwpolling_SINK.h:673
virtual void stateRxTrigger()
Definition uwpolling_SINK.cpp:290
std::list< uint16_t > missing_id_list
Definition uwpolling_SINK.h:681
uint max_n_ack
Definition uwpolling_SINK.h:724
double T_in
Definition uwpolling_SINK.h:660
UWPOLLING_SINK_REASON
Definition uwpolling_SINK.h:127
@ UWPOLLING_SINK_REASON_RX_TRIGGER
Definition uwpolling_SINK.h:129
@ UWPOLLING_SINK_REASON_BACKOFF_TIMER_EXPIRED
Definition uwpolling_SINK.h:133
@ UWPOLLING_SINK_REASON_TX_PROBE
Definition uwpolling_SINK.h:131
@ UWPOLLING_SINK_REASON_WRONG_TYPE
Definition uwpolling_SINK.h:137
@ UWPOLLING_SINK_REASON_PKT_ERROR
Definition uwpolling_SINK.h:130
@ UWPOLLING_SINK_REASON_NOT_SET
Definition uwpolling_SINK.h:135
@ UWPOLLING_SINK_REASON_TX_ACK
Definition uwpolling_SINK.h:132
@ UWPOLLING_SINK_REASON_WRONG_STATE
Definition uwpolling_SINK.h:139
@ UWPOLLING_SINK_REASON_WRONG_RECEIVER
Definition uwpolling_SINK.h:138
@ UWPOLLING_SINK_REASON_RX_DATA_TIMER_EXPIRED
Definition uwpolling_SINK.h:134
@ UWPOLLING_SINK_REASON_MAX_DATA_RECEIVED
Definition uwpolling_SINK.h:136
@ UWPOLLING_SINK_REASON_RX_DATA
Definition uwpolling_SINK.h:128
int getProbeSent()
Definition uwpolling_SINK.h:500
Packet * curr_probe_pkt
Definition uwpolling_SINK.h:694
int getTriggerReceived()
Definition uwpolling_SINK.h:520
uint duplicate_pkts
Definition uwpolling_SINK.h:686
std::ofstream out_file_stats
Definition uwpolling_SINK.h:714
virtual void waitForUser()
Definition uwpolling_SINK.cpp:696
bool RxDataEnabled
Definition uwpolling_SINK.h:653
uint PROBE_uid
Definition uwpolling_SINK.h:691
UWPOLLING_SINK_REASON last_reason
Definition uwpolling_SINK.h:699
UWPOLLING_TIMER_STATUS
Definition uwpolling_SINK.h:143
@ UWPOLLING_IDLE
Definition uwpolling_SINK.h:144
@ UWPOLLING_RUNNING
Definition uwpolling_SINK.h:145
@ UWPOLLING_EXPIRED
Definition uwpolling_SINK.h:147
@ UWPOLLING_FROZEN
Definition uwpolling_SINK.h:146
int useAdaptiveTdata
Definition uwpolling_SINK.h:721
uint getDuplicatedPkt()
Definition uwpolling_SINK.h:536
virtual void addMissPkt2List(uint16_t n_pkts)
Definition uwpolling_SINK.cpp:607
UWPOLLING_SINK_STATUS curr_state
Definition uwpolling_SINK.h:700
uint16_t prev_expect_last_id
Definition uwpolling_SINK.h:684
int n_trigger_received
Definition uwpolling_SINK.h:670
virtual void RxDataTimerExpired()
Definition uwpolling_SINK.cpp:585
double backoff_tuner
Definition uwpolling_SINK.h:646
uint16_t last_rx
Definition uwpolling_SINK.h:678
uint16_t expected_id
Definition uwpolling_SINK.h:677
static map< Uwpolling_SINK::UWPOLLING_SINK_REASON, string > reason_info
Definition uwpolling_SINK.h:706
virtual void TxProbe()
Definition uwpolling_SINK.cpp:440
int modem_data_bit_rate
Definition uwpolling_SINK.h:728
virtual void stateTxProbe()
Definition uwpolling_SINK.cpp:358
int getAckSent()
Definition uwpolling_SINK.h:510
double T_data
Definition uwpolling_SINK.h:644
virtual ~Uwpolling_SINK()
Definition uwpolling_SINK.cpp:145
BackOffTimer backoff_timer
Definition uwpolling_SINK.h:710
int n_trigger_dropped
Definition uwpolling_SINK.h:671
Uwpolling_SINK()
Definition uwpolling_SINK.cpp:80
virtual void Phy2MacStartRx(const Packet *p)
Definition uwpolling_SINK.h:413
int sea_trial
Definition uwpolling_SINK.h:715
virtual void initPkt(UWPOLLING_PKT_TYPE pkt_type)
Definition uwpolling_SINK.cpp:379
int n_probe_sent
Definition uwpolling_SINK.h:668
double T_fin
Definition uwpolling_SINK.h:662
virtual void Phy2MacEndRx(Packet *p)
Definition uwpolling_SINK.cpp:215
virtual void Mac2PhyStartTx(Packet *p)
Definition uwpolling_SINK.cpp:448
int getTriggerDropped()
Definition uwpolling_SINK.h:530
bool send_ACK
Definition uwpolling_SINK.h:679
bool Triggered
Definition uwpolling_SINK.h:655
std::pair< int, int > counter
Definition uwinterference.h:53
Common structures and variables in the protocol.