DESERT 4.0.0
uw-csma-aloha-trigger-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
39#ifndef UW_CS_ALOHA_TRIG_NODE_H
40#define UW_CS_ALOHA_TRIG_NODE_H
41
42#include <climits>
43#include <cmath>
44#include <fstream>
45#include <iomanip>
46#include <iostream>
47#include <mac.h>
48#include <map>
49#include <mmac.h>
50#include <mphy.h>
51#include <queue>
52#include <rng.h>
53#include <set>
54#include <string>
55
56#define UW_CS_ALOHA_TRIG_NODE_DROP_REASON_BUFFER_FULL \
57 "DBF"
58#define UW_CS_ALOHA_TRIG_NODE_DROP_REASON_ERROR "ERR"
60extern packet_t PT_MMAC_TRIGGER;
61
65class UwCsmaAloha_Trigger_NODE : public MMac
66{
67public:
86 virtual int command(int argc, const char *const *argv);
94 virtual int crLayCommand(ClMessage *m);
95
96protected:
97 static const double prop_speed;
113
130
138
142 class Csma_Aloha_Triggered_Timer : public TimerHandler
143 {
144 public:
150 : TimerHandler()
151 , start_time(0.0)
152 , left_duration(0.0)
153 , counter(0)
154 , module(m)
156 {
157 assert(m != NULL);
158 }
159
164 {
165 }
166
170 virtual void
172 {
174 left_duration -= (NOW - start_time);
175 if (left_duration <= 0.0)
176 left_duration = module->mac2phy_delay_;
177 force_cancel();
179 }
180
185 virtual void
187 {
189 start_time = NOW;
190 assert(left_duration > 0);
191 sched(left_duration);
193 }
194
198 virtual void
200 {
202 force_cancel();
203 }
204
209 virtual void
210 schedule(double val)
211 {
212 start_time = NOW;
213 left_duration = val;
215 resched(val);
216 }
217
222 bool
224 {
226 }
227
232 bool
237
242 bool
247
252 bool
254 {
256 }
257
262 bool
268
272 void
274 {
275 counter = 0;
276 }
277
282 void
284 {
285 ++counter;
286 }
287
292 int
294 {
295 return counter;
296 }
297
303 double
305 {
306 return left_duration;
307 }
308
309 protected:
310 double start_time;
320 };
321
326 {
327 public:
337
341 virtual ~ListenTimer()
342 {
343 }
344
345 protected:
350 virtual void expire(Event *e);
351 };
352
358 {
359 public:
368
373 {
374 }
375
376 protected:
381 virtual void expire(Event *e);
382 };
383
389 virtual void recvFromUpperLayers(Packet *p);
395 virtual void Mac2PhyStartTx(Packet *p);
401 virtual void Phy2MacEndTx(const Packet *p);
407 virtual void Phy2MacStartRx(const Packet *p);
413 virtual void Phy2MacEndRx(Packet *p);
419 virtual void initPkt(Packet *p);
424 virtual void txData();
425
429 virtual void stateIdle();
433 virtual void stateRxIdle();
437 virtual void stateTxData();
441 virtual void stateListen();
446 virtual void stateRxListen();
451 virtual void stateRxTrigger(Packet *p);
452
456 virtual void stateCheckListenExpired();
460 virtual void stateCheckTxTimerExpired();
465 virtual void stateRxData(Packet *p);
469 virtual void stateRxPacketNotForMe(Packet *p);
477 virtual void initInfo();
478
482 virtual void
489
493 virtual void
498
503 virtual void
505 {
506 last_data_id_rx = id;
507 }
508
512 virtual void
513 queuePop(bool flag = true)
514 {
515 Packet::free(Q.front());
516 Q.pop();
517 waitEndTime(flag);
518 data_sn_queue.pop();
519 }
524 virtual void waitForUser();
525
526 // stats functions
527
534 virtual int
536 {
537 return (up_data_pkts_rx - Q.size());
538 }
539
543 virtual void
545 {
546 up_data_pkts_rx++;
547 }
548
550
552
559 double listen_time;
563
564 std::queue<Packet *> Q;
565 std::queue<int>
568 static bool initialized;
570 static int u_pkt_id;
583 static map<UW_CS_ALOHA_TRIG_NODE_STATUS, string>
585 static map<UW_CS_ALOHA_TRIG_NODE_REASON_STATUS, string>
598 ofstream fout;
600};
601
602#endif
Definition uw-csma-aloha-trigger-node.h:143
Csma_Aloha_Triggered_Timer(UwCsmaAloha_Trigger_NODE *m)
Definition uw-csma-aloha-trigger-node.h:149
double start_time
Definition uw-csma-aloha-trigger-node.h:310
int counter
Definition uw-csma-aloha-trigger-node.h:314
virtual void schedule(double val)
Definition uw-csma-aloha-trigger-node.h:210
bool isActive()
Definition uw-csma-aloha-trigger-node.h:263
virtual ~Csma_Aloha_Triggered_Timer()
Definition uw-csma-aloha-trigger-node.h:163
UwCsmaAloha_Trigger_NODE *UW_CS_ALOHA_TRIG_NODE_TIMER_STATUS timer_status
Definition uw-csma-aloha-trigger-node.h:319
void incrCounter()
Definition uw-csma-aloha-trigger-node.h:283
void resetCounter()
Definition uw-csma-aloha-trigger-node.h:273
bool isExpired()
Definition uw-csma-aloha-trigger-node.h:243
bool isIdle()
Definition uw-csma-aloha-trigger-node.h:223
virtual void unFreeze()
Definition uw-csma-aloha-trigger-node.h:186
int getCounter()
Definition uw-csma-aloha-trigger-node.h:293
virtual void freeze()
Definition uw-csma-aloha-trigger-node.h:171
double left_duration
Definition uw-csma-aloha-trigger-node.h:312
bool isFrozen()
Definition uw-csma-aloha-trigger-node.h:253
bool isRunning()
Definition uw-csma-aloha-trigger-node.h:233
double getDuration()
Definition uw-csma-aloha-trigger-node.h:304
virtual void stop()
Definition uw-csma-aloha-trigger-node.h:199
Definition uw-csma-aloha-trigger-node.h:326
ListenTimer(UwCsmaAloha_Trigger_NODE *m)
Definition uw-csma-aloha-trigger-node.h:333
virtual void expire(Event *e)
Definition uw-csma-aloha-trigger-node.cpp:58
virtual ~ListenTimer()
Definition uw-csma-aloha-trigger-node.h:341
Definition uw-csma-aloha-trigger-node.h:358
virtual void expire(Event *e)
Definition uw-csma-aloha-trigger-node.cpp:82
virtual ~TransmissionTimer()
Definition uw-csma-aloha-trigger-node.h:372
TransmissionTimer(UwCsmaAloha_Trigger_NODE *m)
Definition uw-csma-aloha-trigger-node.h:364
Definition uw-csma-aloha-trigger-node.h:66
UW_CS_ALOHA_TRIG_NODE_TIMER_STATUS
Definition uw-csma-aloha-trigger-node.h:132
@ UW_CS_ALOHA_TRIG_NODE_RUNNING
Definition uw-csma-aloha-trigger-node.h:134
@ UW_CS_ALOHA_TRIG_NODE_IDLE
Definition uw-csma-aloha-trigger-node.h:133
@ UW_CS_ALOHA_TRIG_NODE_FROZEN
Definition uw-csma-aloha-trigger-node.h:135
@ UW_CS_ALOHA_TRIG_NODE_EXPIRED
Definition uw-csma-aloha-trigger-node.h:136
static bool initialized
Definition uw-csma-aloha-trigger-node.h:568
virtual void updateLastDataIdRx(int id)
Definition uw-csma-aloha-trigger-node.h:504
virtual int crLayCommand(ClMessage *m)
Definition uw-csma-aloha-trigger-node.cpp:160
double wait_costant
Definition uw-csma-aloha-trigger-node.h:554
static const double prop_speed
Definition uw-csma-aloha-trigger-node.h:97
UW_CS_ALOHA_TRIG_NODE_STATUS prev_state
Definition uw-csma-aloha-trigger-node.h:592
virtual void stateRxData(Packet *p)
Definition uw-csma-aloha-trigger-node.cpp:536
virtual void refreshState(UW_CS_ALOHA_TRIG_NODE_STATUS state)
Definition uw-csma-aloha-trigger-node.h:483
UW_CS_ALOHA_TRIG_NODE_REASON_STATUS last_reason
Definition uw-csma-aloha-trigger-node.h:596
double listen_time
Definition uw-csma-aloha-trigger-node.h:559
virtual void waitForUser()
Definition uw-csma-aloha-trigger-node.cpp:573
bool has_buffer_queue
Definition uw-csma-aloha-trigger-node.h:578
virtual void Phy2MacStartRx(const Packet *p)
Definition uw-csma-aloha-trigger-node.cpp:286
UW_CS_ALOHA_TRIG_NODE_STATUS prev_prev_state
Definition uw-csma-aloha-trigger-node.h:594
UwCsmaAloha_Trigger_NODE()
Definition uw-csma-aloha-trigger-node.cpp:107
virtual void stateRxIdle()
Definition uw-csma-aloha-trigger-node.cpp:482
int buffer_pkts
Definition uw-csma-aloha-trigger-node.h:558
std::queue< int > data_sn_queue
Definition uw-csma-aloha-trigger-node.h:566
static map< UW_CS_ALOHA_TRIG_NODE_STATUS, string > status_info
Definition uw-csma-aloha-trigger-node.h:584
int tx_timer_duration
Definition uw-csma-aloha-trigger-node.h:560
virtual void stateRxListen()
Definition uw-csma-aloha-trigger-node.cpp:506
virtual void Mac2PhyStartTx(Packet *p)
Definition uw-csma-aloha-trigger-node.cpp:246
virtual void stateTxData()
Definition uw-csma-aloha-trigger-node.cpp:512
int u_data_id
Definition uw-csma-aloha-trigger-node.h:571
virtual void Phy2MacEndRx(Packet *p)
Definition uw-csma-aloha-trigger-node.cpp:314
virtual void Phy2MacEndTx(const Packet *p)
Definition uw-csma-aloha-trigger-node.cpp:256
int HDR_size
Definition uw-csma-aloha-trigger-node.h:557
ofstream fout
Definition uw-csma-aloha-trigger-node.h:598
virtual int getRemainingPkts()
Definition uw-csma-aloha-trigger-node.h:535
virtual ~UwCsmaAloha_Trigger_NODE()
Definition uw-csma-aloha-trigger-node.cpp:137
virtual void txData()
Definition uw-csma-aloha-trigger-node.cpp:387
virtual void stateIdle()
Definition uw-csma-aloha-trigger-node.cpp:462
static map< UW_CS_ALOHA_TRIG_NODE_REASON_STATUS, string > reason_info
Definition uw-csma-aloha-trigger-node.h:586
TransmissionTimer tx_timer
Definition uw-csma-aloha-trigger-node.h:551
int max_payload
Definition uw-csma-aloha-trigger-node.h:556
static int u_pkt_id
Definition uw-csma-aloha-trigger-node.h:570
std::queue< Packet * > Q
Definition uw-csma-aloha-trigger-node.h:564
UW_CS_ALOHA_TRIG_NODE_REASON_STATUS
Definition uw-csma-aloha-trigger-node.h:115
@ UW_CS_ALOHA_TRIG_NODE_REASON_DATA_RX
Definition uw-csma-aloha-trigger-node.h:117
@ UW_CS_ALOHA_TRIG_NODE_REASON_LISTEN_AFTER_TRIGGER
Definition uw-csma-aloha-trigger-node.h:127
@ UW_CS_ALOHA_TRIG_NODE_REASON_DATA_TX
Definition uw-csma-aloha-trigger-node.h:118
@ UW_CS_ALOHA_TRIG_NODE_REASON_PKT_ERROR
Definition uw-csma-aloha-trigger-node.h:126
@ UW_CS_ALOHA_TRIG_NODE_REASON_LISTEN_TIMEOUT
Definition uw-csma-aloha-trigger-node.h:122
@ UW_CS_ALOHA_TRIG_NODE_REASON_NOT_SET
Definition uw-csma-aloha-trigger-node.h:120
@ UW_CS_ALOHA_TRIG_NODE_REASON_LISTEN_PENDING
Definition uw-csma-aloha-trigger-node.h:123
@ UW_CS_ALOHA_TRIG_NODE_REASON_LISTEN
Definition uw-csma-aloha-trigger-node.h:121
@ UW_CS_ALOHA_TRIG_NODE_REASON_PKT_NOT_FOR_ME
Definition uw-csma-aloha-trigger-node.h:125
@ UW_CS_ALOHA_TRIG_NODE_REASON_DATA_EMPTY
Definition uw-csma-aloha-trigger-node.h:119
@ UW_CS_ALOHA_TRIG_NODE_REASON_START_RX
Definition uw-csma-aloha-trigger-node.h:124
@ UW_CS_ALOHA_TRIG_NODE_REASON_TRIGGER_RX
Definition uw-csma-aloha-trigger-node.h:128
@ UW_CS_ALOHA_TRIG_NODE_REASON_DATA_PENDING
Definition uw-csma-aloha-trigger-node.h:116
int last_sent_data_id
Definition uw-csma-aloha-trigger-node.h:572
Packet * curr_data_pkt
Definition uw-csma-aloha-trigger-node.h:574
virtual void stateRxTrigger(Packet *p)
Definition uw-csma-aloha-trigger-node.cpp:365
ListenTimer listen_timer
Definition uw-csma-aloha-trigger-node.h:549
virtual void recvFromUpperLayers(Packet *p)
Definition uw-csma-aloha-trigger-node.cpp:211
UW_CS_ALOHA_TRIG_NODE_STATUS curr_state
Definition uw-csma-aloha-trigger-node.h:590
virtual void incrUpperDataRx()
Definition uw-csma-aloha-trigger-node.h:544
virtual void initInfo()
Definition uw-csma-aloha-trigger-node.cpp:170
virtual void stateCheckListenExpired()
Definition uw-csma-aloha-trigger-node.cpp:430
bool can_transmit
Definition uw-csma-aloha-trigger-node.h:580
virtual void stateCheckTxTimerExpired()
Definition uw-csma-aloha-trigger-node.cpp:457
virtual void stateListen()
Definition uw-csma-aloha-trigger-node.cpp:488
virtual void initPkt(Packet *p)
Definition uw-csma-aloha-trigger-node.cpp:235
UW_CS_ALOHA_TRIG_NODE_STATUS
Definition uw-csma-aloha-trigger-node.h:101
@ UW_CS_ALOHA_TRIG_NODE_STATE_RX_IDLE
Definition uw-csma-aloha-trigger-node.h:108
@ UW_CS_ALOHA_TRIG_NODE_STATE_RX_TRIGGER
Definition uw-csma-aloha-trigger-node.h:111
@ UW_CS_ALOHA_TRIG_NODE_STATE_IDLE
Definition uw-csma-aloha-trigger-node.h:102
@ UW_CS_ALOHA_TRIG_NODE_STATE_CHK_LISTEN_TIMEOUT
Definition uw-csma-aloha-trigger-node.h:107
@ UW_CS_ALOHA_TRIG_NODE_STATE_TX_DATA
Definition uw-csma-aloha-trigger-node.h:103
@ UW_CS_ALOHA_TRIG_NODE_STATE_NOT_SET
Definition uw-csma-aloha-trigger-node.h:105
@ UW_CS_ALOHA_TRIG_NODE_STATE_DATA_RX
Definition uw-csma-aloha-trigger-node.h:104
@ UW_CS_ALOHA_TRIG_NODE_STATE_RX_LISTEN
Definition uw-csma-aloha-trigger-node.h:109
@ UW_CS_ALOHA_TRIG_NODE_STATE_WRONG_PKT_RX
Definition uw-csma-aloha-trigger-node.h:110
@ UW_CS_ALOHA_TRIG_NODE_STATE_LISTEN
Definition uw-csma-aloha-trigger-node.h:106
virtual void stateRxPacketNotForMe(Packet *p)
Definition uw-csma-aloha-trigger-node.cpp:397
virtual int command(int argc, const char *const *argv)
Definition uw-csma-aloha-trigger-node.cpp:144
virtual void queuePop(bool flag=true)
Definition uw-csma-aloha-trigger-node.h:513
int last_data_id_rx
Definition uw-csma-aloha-trigger-node.h:576
virtual void refreshReason(UW_CS_ALOHA_TRIG_NODE_REASON_STATUS reason)
Definition uw-csma-aloha-trigger-node.h:494
packet_t PT_MMAC_TRIGGER
Definition initlib.cpp:36
std::pair< int, int > counter
Definition uwinterference.h:53