DESERT 4.0.0
uw-mac-TLohi.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 MMAC_UW_TLOHI_H
40#define MMAC_UW_TLOHI_H
41
42// #include<module.h>
43#include <fstream>
44#include <map>
45#include <mmac.h>
46#include <queue>
47#include <set>
48#include <string>
49#include <utility>
50#include <vector>
51
52#include <mphy.h>
53
54#define HDR_TLOHI(P) (hdr_tlohi::access(P))
55
56#define TLOHI_DROP_REASON_WRONG_STATE "WST"
57#define TLOHI_DROP_REASON_WRONG_RECEIVER "WRCV"
58#define TLOHI_DROP_REASON_UNKNOWN_TYPE "UPT"
59#define TLOHI_DROP_REASON_BUFFER_FULL "DBF"
60
61extern packet_t PT_TLOHI;
62
63static const int prop_speed =
64 1500;
86
114
120
126
137
144
148typedef struct hdr_tlohi {
149
150 double ts;
151 int sn;
153 packet_t orig_type;
157 static int offset_;
162 inline static int &
164 {
165 return offset_;
166 }
171 inline static struct hdr_tlohi *
172 access(const Packet *p)
173 {
174 return (struct hdr_tlohi *) p->access(offset_);
175 }
176
178
182class MMacTLOHI;
183
187class Timer : public TimerHandler
188{
189public:
194 : TimerHandler()
195 {
196 module = m;
197 }
198
199protected:
204 virtual void expire(Event *e);
205 MMacTLOHI *module;
206};
207
213class DataTimer : public TimerHandler
214{
215public:
220 : TimerHandler()
221 {
222 module = m;
223 }
224
225protected:
230 virtual void expire(Event *e);
232 MMacTLOHI *module;
233};
234
238class MMacTLOHI : public MMac
239{
243 friend class Timer;
247 friend class DataTimer;
248
249public:
253 MMacTLOHI();
257 virtual ~MMacTLOHI();
268 virtual int command(int argc, const char *const *argv);
276 virtual int crLayCommand(ClMessage *m);
277
278protected:
284 virtual void recvFromUpperLayers(Packet *p);
285
291 virtual void Phy2MacEndTx(const Packet *p);
297 virtual void Phy2MacStartRx(const Packet *p);
303 virtual void Phy2MacEndRx(Packet *p);
309 virtual double computeTxTime(TLOHI_PKT_TYPE type);
315 virtual void initPkt(Packet *p, TLOHI_PKT_TYPE pkt_type);
319 virtual void getBackoffTime();
325 virtual double
327 {
328 return CR_duration;
329 }
334 virtual void checkDataPhy();
341 virtual int countContenders(double time);
345 virtual void txTone();
349 virtual void txData();
353 virtual void txAck();
358 virtual void rxTone(Packet *p);
363 virtual void rxAck(Packet *p);
368 virtual void rxElse(Packet *p);
372 virtual void stateIdle();
376 virtual void stateBackoff();
380 virtual void stateStartContention();
385 virtual void stateWaitEndContention();
389 virtual void stateCountContenders();
393 virtual void stateTxData();
398 virtual void stateSleep();
403 virtual void stateWaitAck();
409 virtual void stateWaitXAck();
413 virtual void stateDataReceived(Packet *data_pkt);
418 virtual void stateTxAck();
422 virtual void stateRecontendWindow();
426 virtual void stateWaitCR();
434 virtual void printStateInfo(double delay = 0);
439 virtual void initInfo();
446 virtual void initData();
450 virtual void initMphyIds();
454 virtual void
456 {
458 curr_state = state;
459 }
463 virtual void
465 {
466 last_reason = reason;
467 }
471 virtual void exitBackoff();
475 virtual void
476 setDestAddr(int mac_addr)
477 {
478 curr_dest_addr = mac_addr;
479 }
483 virtual void
484 setSessionDistance(double distance)
485 {
486 session_distance = distance;
487 }
491 virtual void checkPhyInit();
495 virtual void
497 {
499 }
505 virtual void resetSession();
509 virtual void
510 queuePop(bool flag)
511 {
512 Packet::free(Q.front());
513 Q.pop();
514 waitEndTime(flag);
515 }
519 virtual void waitForUser();
520
521 /*****************
522 * stats methods *
523 ****************/
527 virtual void
529 {
530 tone_pkts_tx++;
531 }
535 virtual void
537 {
538 tone_pkts_rx++;
539 }
543 virtual void
545 {
547 }
551 virtual void
553 {
554 tone_pkts_tx = 0;
555 tone_pkts_rx = 0;
556 return MMac::resetStats();
557 }
563 virtual int
565 {
566 return (up_data_pkts_rx - Q.size());
567 }
572 virtual int
574 {
575 return tone_pkts_tx;
576 }
581 virtual int
583 {
584 return tone_pkts_rx;
585 }
586
587 virtual int
589 {
590 return up_data_pkts_rx;
591 }
592
593 // stats //
597
598 /***************
599 * input values *
600 ****************/
613 double ACK_timeout;
618 queue<Packet *> Q;
620 bool TxActive;
629 static bool initialized;
641 double CR_duration;
665 static int u_pkt_id;
667 int txsn;
677 static map<TLOHI_STATUS, string>
680 static map<TLOHI_REASON_STATUS, string>
683 static map<TLOHI_PKT_TYPE, string> pkt_type_info;
688 ofstream fout;
690};
691
692#endif /* MMAC_UW_TLOHI_H */
Definition uw-mac-TLohi.h:214
virtual void expire(Event *e)
Definition uw-mac-TLohi.cpp:205
DataTimer(MMacTLOHI *m)
Definition uw-mac-TLohi.h:219
Definition uw-mac-TLohi.h:239
virtual double getCRduration()
Definition uw-mac-TLohi.h:326
virtual void initMphyIds()
Definition uw-mac-TLohi.cpp:504
virtual int command(int argc, const char *const *argv)
Definition uw-mac-TLohi.cpp:285
double tone_data_delay
Definition uw-mac-TLohi.h:615
virtual void stateWaitXAck()
Definition uw-mac-TLohi.cpp:1286
int curr_dest_addr
Definition uw-mac-TLohi.h:643
ofstream fout
Definition uw-mac-TLohi.h:688
virtual void exitBackoff()
Definition uw-mac-TLohi.cpp:600
static map< TLOHI_STATUS, string > status_info
Definition uw-mac-TLohi.h:678
int buffer_pkts
Definition uw-mac-TLohi.h:616
virtual int getTonePktsRx()
Definition uw-mac-TLohi.h:582
virtual void stateDataReceived(Packet *data_pkt)
Definition uw-mac-TLohi.cpp:1339
virtual void resetStats()
Definition uw-mac-TLohi.h:552
queue< Packet * > Q
Definition uw-mac-TLohi.h:618
int u_data_id
Definition uw-mac-TLohi.h:666
virtual void stateSleep()
Definition uw-mac-TLohi.cpp:1249
virtual void Phy2MacEndRx(Packet *p)
Definition uw-mac-TLohi.cpp:840
int last_data_id_rx
Definition uw-mac-TLohi.h:645
virtual void stateWaitEndContention()
Definition uw-mac-TLohi.cpp:1204
virtual void setSessionDistance(double distance)
Definition uw-mac-TLohi.h:484
double backoff_start_time
Definition uw-mac-TLohi.h:660
virtual void recvFromUpperLayers(Packet *p)
Definition uw-mac-TLohi.cpp:632
bool mphy_ids_initialized
Definition uw-mac-TLohi.h:631
virtual int getRemainingPkts()
Definition uw-mac-TLohi.h:564
double wait_costant
Definition uw-mac-TLohi.h:606
Timer timer
Definition uw-mac-TLohi.h:671
virtual void incrTonePktsTx()
Definition uw-mac-TLohi.h:528
virtual void incrCurrTxRounds()
Definition uw-mac-TLohi.h:496
virtual void stateTxAck()
Definition uw-mac-TLohi.cpp:1300
virtual void rxAck(Packet *p)
Definition uw-mac-TLohi.cpp:1068
virtual int getUpLayersDataPktsRx()
Definition uw-mac-TLohi.h:588
TLOHI_MODE op_mode
Definition uw-mac-TLohi.h:637
virtual void refreshReason(TLOHI_REASON_STATUS reason)
Definition uw-mac-TLohi.h:464
virtual void incrTonePktsRx()
Definition uw-mac-TLohi.h:536
virtual void waitForUser()
Definition uw-mac-TLohi.cpp:1389
static map< TLOHI_PKT_TYPE, string > pkt_type_info
Definition uw-mac-TLohi.h:683
static map< TLOHI_REASON_STATUS, string > reason_info
Definition uw-mac-TLohi.h:681
virtual int countContenders(double time)
Definition uw-mac-TLohi.cpp:710
virtual void rxTone(Packet *p)
Definition uw-mac-TLohi.cpp:983
virtual int getTonePktsTx()
Definition uw-mac-TLohi.h:573
bool TxActive
Definition uw-mac-TLohi.h:620
int tone_pkts_rx
Definition uw-mac-TLohi.h:595
virtual void txTone()
Definition uw-mac-TLohi.cpp:1078
virtual void stateIdle()
Definition uw-mac-TLohi.cpp:1129
virtual void initData()
Definition uw-mac-TLohi.cpp:416
double backoff_tuner
Definition uw-mac-TLohi.h:604
int ACK_size
Definition uw-mac-TLohi.h:609
int txsn
Definition uw-mac-TLohi.h:667
bool print_transitions
Definition uw-mac-TLohi.h:626
static bool initialized
Definition uw-mac-TLohi.h:629
bool has_buffer_queue
Definition uw-mac-TLohi.h:633
virtual void queuePop(bool flag)
Definition uw-mac-TLohi.h:510
int curr_contenders
Definition uw-mac-TLohi.h:647
virtual void Phy2MacEndTx(const Packet *p)
Definition uw-mac-TLohi.cpp:737
int tone_pkts_tx
Definition uw-mac-TLohi.h:594
TLOHI_ACK_MODE ack_mode
Definition uw-mac-TLohi.h:636
double DATA_listen_timeout
Definition uw-mac-TLohi.h:611
virtual double computeTxTime(TLOHI_PKT_TYPE type)
Definition uw-mac-TLohi.cpp:565
virtual void stateStartContention()
Definition uw-mac-TLohi.cpp:1167
virtual void printStateInfo(double delay=0)
Definition uw-mac-TLohi.cpp:1364
double session_distance
Definition uw-mac-TLohi.h:657
static int u_pkt_id
Definition uw-mac-TLohi.h:665
double CR_duration
Definition uw-mac-TLohi.h:641
virtual void initPkt(Packet *p, TLOHI_PKT_TYPE pkt_type)
Definition uw-mac-TLohi.cpp:665
virtual void checkPhyInit()
Definition uw-mac-TLohi.cpp:405
virtual int crLayCommand(ClMessage *m)
Definition uw-mac-TLohi.cpp:391
virtual void txData()
Definition uw-mac-TLohi.cpp:1090
virtual void stateTxData()
Definition uw-mac-TLohi.cpp:1259
virtual void checkDataPhy()
Definition uw-mac-TLohi.cpp:1121
TLOHI_REASON_STATUS last_reason
Definition uw-mac-TLohi.h:652
double max_prop_delay
Definition uw-mac-TLohi.h:601
virtual void stateWaitCR()
Definition uw-mac-TLohi.cpp:1238
int max_tx_rounds
Definition uw-mac-TLohi.h:602
bool backoff_pending
Definition uw-mac-TLohi.h:622
TLOHI_STATUS prev_state
Definition uw-mac-TLohi.h:655
virtual void stateBackoff()
Definition uw-mac-TLohi.cpp:1187
virtual void incrCurrTxTries()
Definition uw-mac-TLohi.h:544
virtual void stateWaitAck()
Definition uw-mac-TLohi.cpp:1273
TLOHI_STATUS curr_state
Definition uw-mac-TLohi.h:654
int data_phy_id
Definition uw-mac-TLohi.h:640
virtual void refreshState(TLOHI_STATUS state)
Definition uw-mac-TLohi.h:455
int curr_tx_rounds
Definition uw-mac-TLohi.h:649
string tcl_modulation
Definition uw-mac-TLohi.h:669
Packet * curr_data_pkt
Definition uw-mac-TLohi.h:646
int max_payload
Definition uw-mac-TLohi.h:607
int tone_phy_id
Definition uw-mac-TLohi.h:639
MMacTLOHI()
Definition uw-mac-TLohi.cpp:224
virtual void initInfo()
Definition uw-mac-TLohi.cpp:449
double sleep_timeout
Definition uw-mac-TLohi.h:610
double recontend_time
Definition uw-mac-TLohi.h:614
int HDR_size
Definition uw-mac-TLohi.h:608
virtual void rxElse(Packet *p)
Definition uw-mac-TLohi.cpp:1073
virtual void txAck()
Definition uw-mac-TLohi.cpp:1108
DataTimer data_phy_timer
Definition uw-mac-TLohi.h:672
virtual void stateRecontendWindow()
Definition uw-mac-TLohi.cpp:1315
double backoff_duration
Definition uw-mac-TLohi.h:661
int curr_tx_tries
Definition uw-mac-TLohi.h:650
virtual void stateCountContenders()
Definition uw-mac-TLohi.cpp:1217
bool tone_transmitted
Definition uw-mac-TLohi.h:624
virtual void resetSession()
Definition uw-mac-TLohi.cpp:556
double ACK_timeout
Definition uw-mac-TLohi.h:613
virtual void setDestAddr(int mac_addr)
Definition uw-mac-TLohi.h:476
double max_tx_tries
Definition uw-mac-TLohi.h:603
int last_data_id_tx
Definition uw-mac-TLohi.h:644
bool session_active
Definition uw-mac-TLohi.h:621
virtual void Phy2MacStartRx(const Packet *p)
Definition uw-mac-TLohi.cpp:818
virtual void getBackoffTime()
Definition uw-mac-TLohi.cpp:610
double backoff_remaining
Definition uw-mac-TLohi.h:662
virtual ~MMacTLOHI()
Definition uw-mac-TLohi.cpp:279
Definition uw-mac-TLohi.h:188
virtual void expire(Event *e)
Definition uw-mac-TLohi.cpp:97
Timer(MMacTLOHI *m)
Definition uw-mac-TLohi.h:193
Definition uw-mac-TLohi.h:148
int data_sn
Definition uw-mac-TLohi.h:155
double ts
Definition uw-mac-TLohi.h:150
static int & offset()
Definition uw-mac-TLohi.h:163
static struct hdr_tlohi * access(const Packet *p)
Definition uw-mac-TLohi.h:172
TLOHI_PKT_TYPE pkt_type
Definition uw-mac-TLohi.h:152
static int offset_
Definition uw-mac-TLohi.h:157
packet_t orig_type
Definition uw-mac-TLohi.h:153
int sn
Definition uw-mac-TLohi.h:151
TIMER_STATUS
Definition uw-mac-TLohi.h:143
@ RUNNING
Definition uw-mac-TLohi.h:143
@ FREEZED
Definition uw-mac-TLohi.h:143
@ STOPPED
Definition uw-mac-TLohi.h:143
TLOHI_ACK_MODE
Definition uw-mac-TLohi.h:125
@ ACK_MODE
Definition uw-mac-TLohi.h:125
@ NO_ACK_MODE
Definition uw-mac-TLohi.h:125
TLOHI_PKT_TYPE
Definition uw-mac-TLohi.h:119
@ TONE_PKT
Definition uw-mac-TLohi.h:119
@ DATAMAX_PKT
Definition uw-mac-TLohi.h:119
@ ACK_PKT
Definition uw-mac-TLohi.h:119
@ DATA_PKT
Definition uw-mac-TLohi.h:119
TLOHI_STATUS
Definition uw-mac-TLohi.h:69
@ STATE_COUNT_CONTENDERS
Definition uw-mac-TLohi.h:81
@ STATE_WAIT_END_CONTENTION
Definition uw-mac-TLohi.h:73
@ STATE_WAIT_XACK
Definition uw-mac-TLohi.h:83
@ STATE_TX_DATA
Definition uw-mac-TLohi.h:74
@ STATE_WAIT_END_CR
Definition uw-mac-TLohi.h:80
@ STATE_DATA_RECEIVED
Definition uw-mac-TLohi.h:78
@ STATE_RECONTEND_WINDOW
Definition uw-mac-TLohi.h:82
@ STATE_IDLE
Definition uw-mac-TLohi.h:70
@ STATE_SLEEP
Definition uw-mac-TLohi.h:75
@ STATE_START_CONTENTION
Definition uw-mac-TLohi.h:72
@ STATE_BACKOFF
Definition uw-mac-TLohi.h:71
@ STATE_NOT_SET
Definition uw-mac-TLohi.h:84
@ STATE_ACK_RECEIVED
Definition uw-mac-TLohi.h:79
@ STATE_TX_ACK
Definition uw-mac-TLohi.h:76
@ STATE_WAIT_ACK
Definition uw-mac-TLohi.h:77
TLOHI_MODE
Definition uw-mac-TLohi.h:132
@ AGGRESSIVE_UNSYNC_MODE
Definition uw-mac-TLohi.h:134
@ SYNC_MODE
Definition uw-mac-TLohi.h:135
@ CONSERVATIVE_UNSYNC_MODE
Definition uw-mac-TLohi.h:133
packet_t PT_TLOHI
Definition initlib.cpp:47
TLOHI_REASON_STATUS
Definition uw-mac-TLohi.h:91
@ REASON_DATA_EMPTY
Definition uw-mac-TLohi.h:109
@ REASON_BACKOFF_TIMEOUT
Definition uw-mac-TLohi.h:104
@ REASON_ACK_TIMEOUT
Definition uw-mac-TLohi.h:105
@ REASON_XDATA_RX
Definition uw-mac-TLohi.h:99
@ REASON_NO_CONTENDERS
Definition uw-mac-TLohi.h:96
@ REASON_CONTENDERS
Definition uw-mac-TLohi.h:97
@ REASON_XACK_TIMEOUT
Definition uw-mac-TLohi.h:110
@ REASON_DATA_PENDING
Definition uw-mac-TLohi.h:93
@ REASON_MAX_TX_TRIES
Definition uw-mac-TLohi.h:112
@ REASON_ACK_TX
Definition uw-mac-TLohi.h:102
@ REASON_RECONTEND_END
Definition uw-mac-TLohi.h:107
@ REASON_SLEEP_TIMEOUT
Definition uw-mac-TLohi.h:106
@ REASON_XACK_RX
Definition uw-mac-TLohi.h:100
@ REASON_TONE_RX
Definition uw-mac-TLohi.h:94
@ REASON_NOT_SET
Definition uw-mac-TLohi.h:111
@ REASON_DATA_RX
Definition uw-mac-TLohi.h:98
@ REASON_TONE_TX
Definition uw-mac-TLohi.h:92
@ REASON_DATA_TX
Definition uw-mac-TLohi.h:101
@ REASON_CR_END
Definition uw-mac-TLohi.h:108
@ REASON_ACK_RX
Definition uw-mac-TLohi.h:103
@ REASON_WAIT_CR_END
Definition uw-mac-TLohi.h:95