DESERT 4.0.0
uw-smart-ofdm.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
43#ifndef UWSMARTOFDM_H_
44#define UWSMARTOFDM_H_
45
46#include "uwofdmmac_hdr.h"
47#include "uwofdmphy.h"
48#include "uwofdmphy_hdr.h"
49#include <array>
50#include <atomic>
51#include <clmessage.h>
52#include <fstream>
53#include <iostream>
54#include <map>
55#include <mmac.h>
56#include <mphy.h>
57#include <mutex>
58#include <queue>
59#include <set>
60#include <string>
61
62#include "msg-display.h"
63
64#define UWSMARTOFDM_DROP_REASON_WRONG_STATE "WST"
65#define UWSMARTOFDM_DROP_REASON_WRONG_RECEIVER "WRCV"
66#define UWSMARTOFDM_DROP_REASON_UNKNOWN_TYPE "UPT"
67#define UWSMARTOFDM_DROP_REASON_BUFFER_FULL "DBF"
68#define UWSMARTOFDM_DROP_REASON_ERROR "ERR"
69
70extern packet_t PT_MMAC_ACK;
71extern packet_t PT_MMAC_CTS;
72extern packet_t PT_MMAC_DATA;
73extern packet_t PT_MMAC_RTS;
74
75// Types of MAC frames that can be used
76// enum MacFrameType {
77// MF_BEACON = 0x0008, // beaconing
78// MF_CONTROL = 0x0010, // used as mask for control frame
79// MF_SLOTS = 0x001a, // announce slots open for contention
80// MF_RTS = 0x001b, // request to send
81// MF_CTS = 0x001c, // clear to send, grant
82// MF_ACK = 0x001d, // acknowledgement
83// MF_CF_END = 0x001e, // contention free period end
84// MF_POLL = 0x001f, // polling
85// MF_DATA = 0x0020, // also used as mask for data frame
86// MF_DATA_ACK = 0x0021 // ack for data frames
87// };
88
89typedef int pktSeqNum;
90enum criticalLevel { LOW = 0, HIGH = 1 };
91
97class UWSmartOFDM : public MMac
98{
99
100public:
104 UWSmartOFDM();
105
109 virtual ~UWSmartOFDM();
110
119 virtual int command(int argc, const char *const *argv);
120
121 // Initialize subCarriers parameters inside a node, default all carriers are
122 // used
123 void init_macofdm_node(int subCarNum, double carSize, int ctrl_subCar,
124 std::string modulation);
125
126protected:
158
194
208
219
231
236 class UWSmartOFDMTimer : public TimerHandler
237 {
238
239 public:
244 : TimerHandler()
245 , start_time(0.0)
246 , left_duration(0.0)
247 , counter(0)
248 , module(m)
250 {
251 assert(m != NULL);
252 }
253
258 {
259 }
260
261 virtual double
263 {
264 return start_time;
265 }
266
274 virtual void
276 {
278 left_duration -= (NOW - start_time);
279 if (left_duration <= 0.0)
280 left_duration = module->mac2phy_delay_;
281 force_cancel();
283 }
288 virtual void
290 {
292 start_time = NOW;
293 assert(left_duration > 0);
294 sched(left_duration);
296 }
297
301 virtual void
303 {
305 force_cancel();
306 }
307
312 virtual void
313 schedule(double val)
314 {
315 start_time = NOW;
316 left_duration = val;
318 resched(val);
319 }
320
325 bool
327 {
328 return (timer_status == UWSMARTOFDM_IDLE);
329 }
330
335 bool
337 {
339 }
340
345 bool
347 {
349 }
350
355 bool
357 {
359 }
360
365 bool
371
375 void
377 {
378 counter = 0;
379 }
380
385 void
387 {
388 ++counter;
389 }
390
395 int
397 {
398 return counter;
399 }
400
405 double
407 {
408 return left_duration;
409 }
410
411 protected:
412 double start_time;
418 UWSmartOFDM *module;
422 };
423
428 {
429
430 public:
436 {
437 }
438
442 virtual ~AckTimer()
443 {
444 }
445
446 protected:
451 virtual void expire(Event *e);
452 };
453
458 {
459
460 public:
466 {
467 }
468
473 {
474 }
475
476 protected:
481 virtual void expire(Event *e);
482 };
483
488 {
489
490 public:
496 {
497 }
498
502 virtual ~CTSTimer()
503 {
504 }
505
506 protected:
511 virtual void expire(Event *e);
512 };
517 {
518
519 public:
525 {
526 }
527
531 virtual ~RTSTimer()
532 {
533 }
534
535 protected:
540 virtual void expire(Event *e);
541 };
542
547 {
548
549 public:
557
562 {
563 }
564
565 protected:
570 virtual void expire(Event *e);
571 };
572
578 {
579
580 public:
588
593 {
594 }
595
596 protected:
601 virtual void expire(Event *e);
602 };
603
604 /* Base class of DATATimer. It is derived class of UWSmartOFDMTimer.
605 * waits for DATA after CTS
606 */
608 {
609
610 public:
616 {
617 }
618
622 virtual ~DATATimer()
623 {
624 }
625
626 protected:
631 virtual void expire(Event *e);
632 };
633
639 virtual void recvFromUpperLayers(Packet *p);
640
645 virtual void Mac2PhyStartTx(Packet *p);
646
651 virtual void Phy2MacEndTx(const Packet *p);
652
657 virtual void Phy2MacStartRx(const Packet *p);
658
663 virtual void Phy2MacEndRx(Packet *p);
664
671 virtual double computeTxTime(UWSMARTOFDM_PKT_TYPE type);
672
683 virtual void initPkt(
684 Packet *p, UWSMARTOFDM_PKT_TYPE pkt_type, int dest_addr = 0);
685
691 virtual double getBackoffTime();
692
696 virtual void txData();
697
702 virtual void txAck(int dest_addr);
703
708 virtual void txRTS();
709
716 virtual void txCTS(int dest_addr, int *rcv_car, int bytesToSend);
717
722 virtual void stateIdle();
723
728 virtual void stateSendRTS();
729
733 virtual void stateSendCTS(Packet *p);
734
738 virtual void stateWaitCTS();
739
743 virtual void stateBackoffCTS();
744
748 virtual void stateRxIdle();
749
754 virtual void stateTxData();
755
760 virtual void stateTxAck(int dest_addr);
761
766 virtual void stateWaitAck();
767
774 virtual void stateRxWaitAck();
775
780 virtual void stateBackoff(double bt = 0);
781
787 virtual void stateRxBackoff();
788
793 virtual void stateCheckAckExpired();
794
799 virtual void stateCheckBackoffExpired();
800
805 virtual void stateCheckCTSBackoffExpired();
806
812 virtual void stateRxData(Packet *p);
813
819 virtual void stateRxAck(Packet *p);
820
821 /* The node comes to this state if it receives an <i>RTS</i> packet */
822 virtual void stateRxRTS(Packet *p);
823
824 /* The node comes to this state if it receives an <i>CTS</i> packet */
825 virtual void stateRxCTS(Packet *p);
826
827 /* Node comes here after sending a CTS. Waits for data before doing other
828 * stuff */
829 virtual void stateWaitData(double t);
830
834 virtual void exitBackoff();
835
839 virtual void exitCTSBackoff();
840
845 virtual void printStateInfo(double delay = 0);
846
850 virtual void initInfo();
851
858 virtual void
865
870 virtual void
872 {
873 last_reason = reason;
874 }
875
880 virtual void
882 {
884 }
885
889 virtual void
891 {
892 curr_tx_rounds = 0;
893 }
894
900 virtual void updateRTT(double rtt);
901
906 virtual double
908 {
909 return (rttsamples > 0) ? sumrtt / rttsamples : 0;
910 }
911
915 virtual double
917 {
918 return RTSsent;
919 }
920
924 virtual double
926 {
927 return CTSsent;
928 }
929
933 virtual void updateAckTimeout(double rtt);
934
939 virtual void
941 {
942 last_data_id_rx = id;
943 }
944 virtual void waitForUser();
945
951 inline int
952 getPktSeqNum(Packet *p)
953 {
954 int seq_num;
955 hdr_cmn *ch = hdr_cmn::access(p);
956 seq_num = ch->uid();
957 return seq_num;
958 }
959
965 inline void
966 putPktInQueue(Packet *p)
967 {
968 mapPacket.insert(pair<pktSeqNum, Packet *>(getPktSeqNum(p), p));
969 }
970
975 inline void
977 {
978 map<pktSeqNum, Packet *>::iterator it_p;
979 it_p = mapPacket.find(seq_num);
980 if (it_p != mapPacket.end()) {
981 Packet::free((*it_p).second);
982 mapPacket.erase((*it_p).first);
983
984 } else
985 std::cout << "ATTENTION PACKET NOT FOUND IN PKTQUEUE" << std::endl;
986 }
987
992 inline void
993 putAckTimerInMap(int seq_num)
994 {
995 mapAckTimer.insert(pair<pktSeqNum, AckTimer>(seq_num, ack_timer));
996 }
997
1002 inline void
1004 {
1005 map<pktSeqNum, AckTimer>::iterator it_a;
1006 it_a = mapAckTimer.find(seq_num);
1007 mapAckTimer.erase((*it_a).first);
1008 }
1009
1015 virtual int
1017 {
1018 return (up_data_pkts_rx - mapPacket.size());
1019 }
1020
1024 virtual void
1026 {
1027 up_data_pkts_rx++;
1028 }
1029
1030 inline int
1032 {
1033 return up_data_pkts_rx;
1034 }
1035
1036 // returns the number of high priority packets sent
1037 inline int
1039 {
1040 return high_prio_pkt_sent;
1041 }
1042
1043 // returns the number of high priority packets received
1044 inline int
1046 {
1047 return high_prio_pkt_recv;
1048 }
1049
1050 // returns the current free carriers that can be given to a node
1056 void carToBeUsed(criticalLevel c, int &top, int &bottom, int &avoid_top,
1057 int &avoid_bottom);
1058
1066 int pickFreeCarriers(int *freeC);
1067
1076 int matchCarriers(int *myFree, int *otherFree, int *matching);
1077
1083 void updateOccupancy(int *busyCar, int ntslots);
1084
1089 void clearOccTable();
1090
1094 void resetAssignment();
1095
1099 void printOccTable();
1100
1101 // Sends a msg to Mac to tell if tx is happening
1102 void Mac2PhySetTxBusy(int, int get = 0);
1103
1104 // True if the conditions for a batch sending are verified, false otherwise
1105 bool batchSending();
1106
1107 // add to the list of carriers that shouldn't be used
1108 inline void
1110 {
1111 nouse_carriers.push_back(c);
1112 }
1113
1114 // Remove Invalid Carrier c from nouse_carriers - if it's back to valid
1115 void removeInvalidCarrier(int c);
1116
1117 // update InterfTable with new unrecognized packet
1118 // also cleans the old samples
1119 void updateInterfTable(Packet *p);
1120
1133 double bitrateCar; // Bitrate per carrier
1135 double alpha_;
1141
1143 std::vector<string> mac_carMod; // Vector with carriers modulations
1144 std::vector<int> mac_carVec; // Vector with carriers used/not used
1145 std::vector<char> mac_prioVec; // Vector with node's priorities H/L
1146 int mac_ncarriers; // number of subcarriers
1148 int ctrl_car; // number of control subcarriers
1149 int data_car; // number of carriers used for data
1150 bool coordinator; // if this node is a coordinator
1153 int nodeNum; // number of nodes in the network
1154 std::atomic<int> current_rcvs; // Number of current Receptions
1156
1157 int oTableIndex; // index in the occupancy table of the current point
1158 int max_aval_car; // number of free carriers that tx can tell rx
1159
1160 static bool initialized;
1172 double srtt;
1173 double sumrtt;
1174 double sumrtt2;
1176 int RTSsent = 0;
1177 int CTSsent = 0;
1178
1185
1187
1190 int txsn;
1192 static const double prop_speed;
1221 static map<UWSMARTOFDM_STATUS, string> status_info;
1224 static map<UWSMARTOFDM_REASON_STATUS, string>
1227 static map<UWSMARTOFDM_PKT_TYPE, string>
1230 static map<criticalLevel, string>
1234 map<pktSeqNum, Packet *>
1236 map<pktSeqNum, AckTimer> mapAckTimer;
1239 ofstream fout;
1241
1242 std::vector<std::vector<int>>
1243 occupancy_table; // table with future usage of subcarriers
1244 std::mutex otabmtx; // mutex for occupancy table
1245 int timeslots; // how many timeslots will be kept
1246 double timeslot_length; // length in seconds of each timeslot
1247 int max_car_reserved; // max num of carriers reserved for each exchange
1248 int req_tslots; // how many tslots reserved for an interaction
1249
1250 int current_timeslot; // index in the occupancy table of the current
1251 // timeslot
1252
1253 int max_rts_tries; // max num of times that rts will be sent for a specific
1254 // packet
1255 int curr_rts_tries; // current num of rts sent for a specific packet
1256 int max_burst_size; // number of packets that will be sent consecutively
1258 bool batch_sending; // true if sending a batch, false otherwise
1259
1260 bool RTSvalid; // true if allowed to send an RTS
1261
1262 double nextFreeTime; // When in time the bw will become free
1263 bool ackToSend; // Packets have been received, need to send ack
1264 Packet *pkt_to_ack;
1266 // variables to save heard RTS
1267 Packet *nextRTS;
1270 std::vector<int> nouse_carriers;
1271 std::vector<std::vector<double>>
1272 interf_table; // table with future usage of subcarriers
1273};
1274
1275#endif /* UWUWSMARTOFDM_H_ */
Definition msg-display.h:44
Definition uw-smart-ofdm.h:428
virtual ~AckTimer()
Definition uw-smart-ofdm.h:442
AckTimer(UWSmartOFDM *m)
Definition uw-smart-ofdm.h:434
virtual void expire(Event *e)
Definition uw-smart-ofdm.cpp:70
Definition uw-smart-ofdm.h:547
AssignmentTimer(UWSmartOFDM *m)
Definition uw-smart-ofdm.h:553
virtual void expire(Event *e)
Definition uw-smart-ofdm.cpp:176
virtual ~AssignmentTimer()
Definition uw-smart-ofdm.h:561
Definition uw-smart-ofdm.h:578
virtual ~AssignmentValidTimer()
Definition uw-smart-ofdm.h:592
AssignmentValidTimer(UWSmartOFDM *m)
Definition uw-smart-ofdm.h:584
virtual void expire(Event *e)
Definition uw-smart-ofdm.cpp:190
Definition uw-smart-ofdm.h:458
BackOffTimer(UWSmartOFDM *m)
Definition uw-smart-ofdm.h:464
virtual void expire(Event *e)
Definition uw-smart-ofdm.cpp:92
virtual ~BackOffTimer()
Definition uw-smart-ofdm.h:472
Definition uw-smart-ofdm.h:488
CTSTimer(UWSmartOFDM *m)
Definition uw-smart-ofdm.h:494
virtual ~CTSTimer()
Definition uw-smart-ofdm.h:502
virtual void expire(Event *e)
Definition uw-smart-ofdm.cpp:121
Definition uw-smart-ofdm.h:608
virtual void expire(Event *e)
Definition uw-smart-ofdm.cpp:200
DATATimer(UWSmartOFDM *m)
Definition uw-smart-ofdm.h:614
virtual ~DATATimer()
Definition uw-smart-ofdm.h:622
Definition uw-smart-ofdm.h:517
virtual ~RTSTimer()
Definition uw-smart-ofdm.h:531
virtual void expire(Event *e)
Definition uw-smart-ofdm.cpp:155
RTSTimer(UWSmartOFDM *m)
Definition uw-smart-ofdm.h:523
Definition uw-smart-ofdm.h:237
double left_duration
Definition uw-smart-ofdm.h:414
virtual void stop()
Definition uw-smart-ofdm.h:302
UWSmartOFDM *UWSMARTOFDM_TIMER_STATUS timer_status
Definition uw-smart-ofdm.h:421
void resetCounter()
Definition uw-smart-ofdm.h:376
double getDuration()
Definition uw-smart-ofdm.h:406
void incrCounter()
Definition uw-smart-ofdm.h:386
virtual double startTime()
Definition uw-smart-ofdm.h:262
int getCounter()
Definition uw-smart-ofdm.h:396
bool isActive()
Definition uw-smart-ofdm.h:366
virtual ~UWSmartOFDMTimer()
Definition uw-smart-ofdm.h:257
double start_time
Definition uw-smart-ofdm.h:412
int counter
Definition uw-smart-ofdm.h:416
bool isFrozen()
Definition uw-smart-ofdm.h:356
bool isExpired()
Definition uw-smart-ofdm.h:346
bool isRunning()
Definition uw-smart-ofdm.h:336
bool isIdle()
Definition uw-smart-ofdm.h:326
virtual void schedule(double val)
Definition uw-smart-ofdm.h:313
virtual void freeze()
Definition uw-smart-ofdm.h:275
UWSmartOFDMTimer(UWSmartOFDM *m)
Definition uw-smart-ofdm.h:243
virtual void unFreeze()
Definition uw-smart-ofdm.h:289
This is the base class of UWSmartOFDM protocol, which is a derived class of MMac.
Definition uw-smart-ofdm.h:98
virtual double getCTSsent()
Definition uw-smart-ofdm.h:925
virtual void stateWaitCTS()
Definition uw-smart-ofdm.cpp:1456
bool car_assigned
Definition uw-smart-ofdm.h:1152
void eraseItemFromPktQueue(int seq_num)
Definition uw-smart-ofdm.h:976
virtual void stateTxData()
Definition uw-smart-ofdm.cpp:1524
virtual ~UWSmartOFDM()
Definition uw-smart-ofdm.cpp:299
double wait_constant
Definition uw-smart-ofdm.h:1123
bool ackToSend
Definition uw-smart-ofdm.h:1263
int recv_data_id
Definition uw-smart-ofdm.h:1181
int nodeNum
Definition uw-smart-ofdm.h:1153
virtual void stateRxBackoff()
Definition uw-smart-ofdm.cpp:1514
bool print_transitions
Definition uw-smart-ofdm.h:1167
virtual void Phy2MacEndTx(const Packet *p)
Definition uw-smart-ofdm.cpp:747
void putAckTimerInMap(int seq_num)
Definition uw-smart-ofdm.h:993
virtual double computeTxTime(UWSMARTOFDM_PKT_TYPE type)
Definition uw-smart-ofdm.cpp:560
bool batchSending()
Definition uw-smart-ofdm.cpp:1993
virtual void recvFromUpperLayers(Packet *p)
Definition uw-smart-ofdm.cpp:589
virtual void stateRxRTS(Packet *p)
Definition uw-smart-ofdm.cpp:1358
int getHighPrioPktsSent()
Definition uw-smart-ofdm.h:1038
std::vector< int > mac_carVec
Definition uw-smart-ofdm.h:1144
virtual void incrCurrTxRounds()
Definition uw-smart-ofdm.h:881
void init_macofdm_node(int subCarNum, double carSize, int ctrl_subCar, std::string modulation)
Definition uw-smart-ofdm.cpp:452
int txsn
Definition uw-smart-ofdm.h:1190
virtual void txAck(int dest_addr)
Definition uw-smart-ofdm.cpp:1066
bool has_buffer_queue
Definition uw-smart-ofdm.h:1168
AssignmentValidTimer assignment_valid_timer
Definition uw-smart-ofdm.h:1204
virtual void stateBackoffCTS()
Definition uw-smart-ofdm.cpp:1466
bool coordinator
Definition uw-smart-ofdm.h:1150
int max_payload
Definition uw-smart-ofdm.h:1126
void clearOccTable()
Definition uw-smart-ofdm.cpp:1942
CTSTimer CTS_timer
Definition uw-smart-ofdm.h:1196
Packet * pkt_to_ack
Definition uw-smart-ofdm.h:1264
int HDR_size
Definition uw-smart-ofdm.h:1127
int uwsmartofdm_debug
Definition uw-smart-ofdm.h:1139
int data_car
Definition uw-smart-ofdm.h:1149
void printOccTable()
Definition uw-smart-ofdm.cpp:1964
static map< criticalLevel, string > clevel_info
Definition uw-smart-ofdm.h:1231
void addInvalidCarriers(int c)
Definition uw-smart-ofdm.h:1109
void carToBeUsed(criticalLevel c, int &top, int &bottom, int &avoid_top, int &avoid_bottom)
Definition uw-smart-ofdm.cpp:1812
virtual double getBackoffTime()
Definition uw-smart-ofdm.cpp:536
Packet * curr_data_pkt
Definition uw-smart-ofdm.h:1188
double mac_carrierSize
Definition uw-smart-ofdm.h:1147
int RTS_size
Definition uw-smart-ofdm.h:1129
int waitPkt
Definition uw-smart-ofdm.h:1265
void updateOccupancy(int *busyCar, int ntslots)
Definition uw-smart-ofdm.cpp:1926
UWSmartOFDM()
Definition uw-smart-ofdm.cpp:221
int current_macDA
Definition uw-smart-ofdm.h:1155
std::vector< std::vector< int > > occupancy_table
Definition uw-smart-ofdm.h:1243
virtual void resetCurrTxRounds()
Definition uw-smart-ofdm.h:890
void putPktInQueue(Packet *p)
Definition uw-smart-ofdm.h:966
virtual void updateRTT(double rtt)
Definition uw-smart-ofdm.cpp:499
AssignmentTimer assignment_timer
Definition uw-smart-ofdm.h:1201
static map< UWSMARTOFDM_REASON_STATUS, string > reason_info
Definition uw-smart-ofdm.h:1225
virtual void stateRxData(Packet *p)
Definition uw-smart-ofdm.cpp:1645
virtual void incrUpperDataRx()
Definition uw-smart-ofdm.h:1025
virtual void txCTS(int dest_addr, int *rcv_car, int bytesToSend)
Definition uw-smart-ofdm.cpp:1120
std::vector< std::vector< double > > interf_table
Definition uw-smart-ofdm.h:1272
AckTimer ack_timer
Definition uw-smart-ofdm.h:1194
DATATimer DATA_timer
Definition uw-smart-ofdm.h:1198
int last_data_id_rx
Definition uw-smart-ofdm.h:1180
UWSMARTOFDM_ACK_MODES
Definition uw-smart-ofdm.h:215
@ UWSMARTOFDM_NO_ACK_MODE
Definition uw-smart-ofdm.h:217
@ UWSMARTOFDM_ACK_MODE
Definition uw-smart-ofdm.h:216
void removeInvalidCarrier(int c)
Definition uw-smart-ofdm.cpp:1763
virtual void stateRxAck(Packet *p)
Definition uw-smart-ofdm.cpp:1692
int high_prio_pkt_sent
Definition uw-smart-ofdm.h:1183
criticalLevel cLevel
Definition uw-smart-ofdm.h:1151
void updateInterfTable(Packet *p)
Definition uw-smart-ofdm.cpp:1773
virtual void stateWaitData(double t)
Definition uw-smart-ofdm.cpp:1720
int mac_ncarriers
Definition uw-smart-ofdm.h:1146
UWSMARTOFDM_STATUS
Definition uw-smart-ofdm.h:132
@ UWSMARTOFDM_STATE_ACK_RX
Definition uw-smart-ofdm.h:139
@ UWSMARTOFDM_STATE_RX_CTS
Definition uw-smart-ofdm.h:153
@ UWSMARTOFDM_STATE_BACKOFF
Definition uw-smart-ofdm.h:134
@ UWSMARTOFDM_STATE_NOT_SET
Definition uw-smart-ofdm.h:140
@ UWSMARTOFDM_STATE_TX_CTS
Definition uw-smart-ofdm.h:152
@ UWSMARTOFDM_STATE_IDLE
Definition uw-smart-ofdm.h:133
@ UWSMARTOFDM_STATE_TX_ACK
Definition uw-smart-ofdm.h:136
@ UWSMARTOFDM_STATE_RX_IDLE
Definition uw-smart-ofdm.h:142
@ UWSMARTOFDM_STATE_DATA_RX
Definition uw-smart-ofdm.h:138
@ UWSMARTOFDM_STATE_CHK_CTS_BACKOFF_TIMEOUT
Definition uw-smart-ofdm.h:151
@ UWSMARTOFDM_STATE_CHK_BACKOFF_TIMEOUT
Definition uw-smart-ofdm.h:144
@ UWSMARTOFDM_STATE_CHK_ACK_TIMEOUT
Definition uw-smart-ofdm.h:141
@ UWSMARTOFDM_STATE_WAIT_ACK
Definition uw-smart-ofdm.h:137
@ UWSMARTOFDM_STATE_RX_BACKOFF
Definition uw-smart-ofdm.h:145
@ UWSMARTOFDM_STATE_CTRL_BACKOFF
Definition uw-smart-ofdm.h:150
@ UWSMARTOFDM_STATE_TX_DATA
Definition uw-smart-ofdm.h:135
@ UWSMARTOFDM_STATE_TX_ACTIVE
Definition uw-smart-ofdm.h:155
@ UWSMARTOFDM_STATE_WRONG_PKT_RX
Definition uw-smart-ofdm.h:146
@ UWSMARTOFDM_STATE_WAIT_CTS
Definition uw-smart-ofdm.h:149
@ UWSMARTOFDM_STATE_RX_RTS
Definition uw-smart-ofdm.h:148
@ UWSMARTOFDM_STATE_TX_RTS
Definition uw-smart-ofdm.h:147
@ UWSMARTOFDM_STATE_RX_WAIT_ACK
Definition uw-smart-ofdm.h:143
@ UWSMARTOFDM_STATE_RX_ACTIVE
Definition uw-smart-ofdm.h:154
@ UWSMARTOFDM_STATE_WAIT_DATA
Definition uw-smart-ofdm.h:156
ofstream fout
Definition uw-smart-ofdm.h:1239
int getPktSeqNum(Packet *p)
Definition uw-smart-ofdm.h:952
virtual double getRTSsent()
Definition uw-smart-ofdm.h:916
int rttsamples
Definition uw-smart-ofdm.h:1175
virtual void updateAckTimeout(double rtt)
Definition uw-smart-ofdm.cpp:509
int curr_pkt_batch
Definition uw-smart-ofdm.h:1257
int ctrl_car
Definition uw-smart-ofdm.h:1148
double max_backoff_counter
Definition uw-smart-ofdm.h:1136
static map< UWSMARTOFDM_STATUS, string > status_info
Definition uw-smart-ofdm.h:1221
virtual void stateBackoff(double bt=0)
Definition uw-smart-ofdm.cpp:1495
int CTSsent
Definition uw-smart-ofdm.h:1177
int req_tslots
Definition uw-smart-ofdm.h:1248
virtual void Phy2MacEndRx(Packet *p)
Definition uw-smart-ofdm.cpp:836
double start_tx_time
Definition uw-smart-ofdm.h:1171
UWSMARTOFDM_STATUS curr_state
Definition uw-smart-ofdm.h:1210
virtual void Phy2MacStartRx(const Packet *p)
Definition uw-smart-ofdm.cpp:826
virtual void stateSendCTS(Packet *p)
Definition uw-smart-ofdm.cpp:1436
virtual void initInfo()
Definition uw-smart-ofdm.cpp:367
virtual void stateCheckCTSBackoffExpired()
Definition uw-smart-ofdm.cpp:1236
double sumrtt2
Definition uw-smart-ofdm.h:1174
UWSMARTOFDM_STATUS prev_state
Definition uw-smart-ofdm.h:1213
virtual int getRemainingPkts()
Definition uw-smart-ofdm.h:1016
std::vector< string > mac_carMod
Definition uw-smart-ofdm.h:1143
int matchCarriers(int *myFree, int *otherFree, int *matching)
Definition uw-smart-ofdm.cpp:1903
int oTableIndex
Definition uw-smart-ofdm.h:1157
virtual int command(int argc, const char *const *argv)
Definition uw-smart-ofdm.cpp:306
static bool initialized
Definition uw-smart-ofdm.h:1160
int curr_rts_tries
Definition uw-smart-ofdm.h:1255
virtual void stateIdle()
Definition uw-smart-ofdm.cpp:1263
BackOffTimer backoff_timer
Definition uw-smart-ofdm.h:1195
double nextAssignment
Definition uw-smart-ofdm.h:1186
double srtt
Definition uw-smart-ofdm.h:1172
virtual void Mac2PhyStartTx(Packet *p)
Definition uw-smart-ofdm.cpp:724
void eraseItemFrommapAckTimer(int seq_num)
Definition uw-smart-ofdm.h:1003
virtual void refreshReason(UWSMARTOFDM_REASON_STATUS reason)
Definition uw-smart-ofdm.h:871
static const double prop_speed
Definition uw-smart-ofdm.h:1192
double timeslot_length
Definition uw-smart-ofdm.h:1246
map< pktSeqNum, Packet * > mapPacket
Definition uw-smart-ofdm.h:1235
int RTSsent
Definition uw-smart-ofdm.h:1176
void resetAssignment()
Definition uw-smart-ofdm.cpp:1955
double bitrateCar
Definition uw-smart-ofdm.h:1133
std::mutex otabmtx
Definition uw-smart-ofdm.h:1244
std::atomic< int > current_rcvs
Definition uw-smart-ofdm.h:1154
double alpha_
Definition uw-smart-ofdm.h:1135
int getHighPrioPktsRecv()
Definition uw-smart-ofdm.h:1045
double ACK_timeout
Definition uw-smart-ofdm.h:1132
double sumrtt
Definition uw-smart-ofdm.h:1173
int ACK_size
Definition uw-smart-ofdm.h:1128
virtual void updateLastDataIdRx(int id)
Definition uw-smart-ofdm.h:940
int high_prio_pkt_recv
Definition uw-smart-ofdm.h:1184
int max_car_reserved
Definition uw-smart-ofdm.h:1247
int buffer_pkts
Definition uw-smart-ofdm.h:1134
int last_sent_data_id
Definition uw-smart-ofdm.h:1165
virtual void txData()
Definition uw-smart-ofdm.cpp:1050
double nextFreeTime
Definition uw-smart-ofdm.h:1262
virtual void initPkt(Packet *p, UWSMARTOFDM_PKT_TYPE pkt_type, int dest_addr=0)
Definition uw-smart-ofdm.cpp:646
virtual void stateTxAck(int dest_addr)
Definition uw-smart-ofdm.cpp:1628
UWSMARTOFDM_TIMER_STATUS
Definition uw-smart-ofdm.h:225
@ UWSMARTOFDM_RUNNING
Definition uw-smart-ofdm.h:227
@ UWSMARTOFDM_IDLE
Definition uw-smart-ofdm.h:226
@ UWSMARTOFDM_FROZEN
Definition uw-smart-ofdm.h:228
@ UWSMARTOFDM_EXPIRED
Definition uw-smart-ofdm.h:229
double nextRTSts
Definition uw-smart-ofdm.h:1268
UWSMARTOFDM_STATUS prev_prev_state
Definition uw-smart-ofdm.h:1215
int CTS_size
Definition uw-smart-ofdm.h:1130
virtual void stateRxCTS(Packet *p)
Definition uw-smart-ofdm.cpp:1378
int DATA_size
Definition uw-smart-ofdm.h:1131
std::vector< char > mac_prioVec
Definition uw-smart-ofdm.h:1145
virtual void stateCheckAckExpired()
Definition uw-smart-ofdm.cpp:1183
UWSMARTOFDM_REASON_STATUS
Definition uw-smart-ofdm.h:163
@ UWSMARTOFDM_REASON_DATA_EMPTY
Definition uw-smart-ofdm.h:172
@ UWSMARTOFDM_REASON_ACK_RX
Definition uw-smart-ofdm.h:170
@ UWSMARTOFDM_REASON_ACK_TX
Definition uw-smart-ofdm.h:169
@ UWSMARTOFDM_REASON_START_RX
Definition uw-smart-ofdm.h:175
@ UWSMARTOFDM_REASON_RTS_RX
Definition uw-smart-ofdm.h:185
@ UWSMARTOFDM_REASON_ACK_TIMEOUT
Definition uw-smart-ofdm.h:171
@ UWSMARTOFDM_REASON_PKT_NOT_FOR_ME
Definition uw-smart-ofdm.h:176
@ UWSMARTOFDM_REASON_CTS_BACKOFF_TIMEOUT
Definition uw-smart-ofdm.h:186
@ UWSMARTOFDM_REASON_WAIT_DATA
Definition uw-smart-ofdm.h:190
@ UWSMARTOFDM_REASON_BACKOFF_TIMEOUT
Definition uw-smart-ofdm.h:179
@ UWSMARTOFDM_REASON_DATA_PENDING
Definition uw-smart-ofdm.h:164
@ UWSMARTOFDM_REASON_PHY_LAYER_SENDING
Definition uw-smart-ofdm.h:188
@ UWSMARTOFDM_REASON_MAX_RTS_TRIES
Definition uw-smart-ofdm.h:189
@ UWSMARTOFDM_REASON_DATAT_EXPIRED
Definition uw-smart-ofdm.h:191
@ UWSMARTOFDM_REASON_CTS_TX
Definition uw-smart-ofdm.h:182
@ UWSMARTOFDM_REASON_MAX_TX_TRIES
Definition uw-smart-ofdm.h:174
@ UWSMARTOFDM_REASON_BACKOFF_PENDING
Definition uw-smart-ofdm.h:180
@ UWSMARTOFDM_REASON_DATA_RX
Definition uw-smart-ofdm.h:167
@ UWSMARTOFDM_REASON_WAIT_CTS_PENDING
Definition uw-smart-ofdm.h:181
@ UWSMARTOFDM_REASON_PHY_LAYER_RECEIVING
Definition uw-smart-ofdm.h:187
@ UWSMARTOFDM_REASON_NOT_SET
Definition uw-smart-ofdm.h:173
@ UWSMARTOFDM_REASON_RTS_TX
Definition uw-smart-ofdm.h:183
@ UWSMARTOFDM_REASON_CTS_RX
Definition uw-smart-ofdm.h:184
@ UWSMARTOFDM_REASON_DATA_TX
Definition uw-smart-ofdm.h:168
@ UWSMARTOFDM_REASON_WAIT_ACK_PENDING
Definition uw-smart-ofdm.h:177
@ UWSMARTOFDM_REASON_PKT_ERROR
Definition uw-smart-ofdm.h:178
@ UWSMARTOFDM_REASON_PREVIOUS_RTS
Definition uw-smart-ofdm.h:192
@ UWSMARTOFDM_REASON_DATA_NOCAR
Definition uw-smart-ofdm.h:165
@ UWSMARTOFDM_REASON_DATA_CARASSIGNED
Definition uw-smart-ofdm.h:166
bool fullBand
Definition uw-smart-ofdm.h:1269
virtual void refreshState(UWSMARTOFDM_STATUS state)
Definition uw-smart-ofdm.h:859
map< pktSeqNum, AckTimer > mapAckTimer
Definition uw-smart-ofdm.h:1236
virtual void stateWaitAck()
Definition uw-smart-ofdm.cpp:1601
std::vector< int > nouse_carriers
Definition uw-smart-ofdm.h:1270
virtual void exitBackoff()
Definition uw-smart-ofdm.cpp:524
int curr_tx_rounds
Definition uw-smart-ofdm.h:1179
virtual double getRTT()
Definition uw-smart-ofdm.h:907
virtual void waitForUser()
Definition uw-smart-ofdm.cpp:1755
virtual void stateCheckBackoffExpired()
Definition uw-smart-ofdm.cpp:1210
bool RTSvalid
Definition uw-smart-ofdm.h:1260
bool batch_sending
Definition uw-smart-ofdm.h:1258
double backoff_tuner
Definition uw-smart-ofdm.h:1125
MsgDisplayer msgDisp
Definition uw-smart-ofdm.h:1240
virtual void printStateInfo(double delay=0)
Definition uw-smart-ofdm.cpp:1730
int pickFreeCarriers(int *freeC)
Definition uw-smart-ofdm.cpp:1882
virtual void stateSendRTS()
Definition uw-smart-ofdm.cpp:1315
virtual void stateRxIdle()
Definition uw-smart-ofdm.cpp:1486
int max_aval_car
Definition uw-smart-ofdm.h:1158
static map< UWSMARTOFDM_PKT_TYPE, string > pkt_type_info
Definition uw-smart-ofdm.h:1228
UWSMARTOFDM_ACK_MODES ack_mode
Definition uw-smart-ofdm.h:1219
void Mac2PhySetTxBusy(int, int get=0)
Definition uw-smart-ofdm.cpp:1981
int current_timeslot
Definition uw-smart-ofdm.h:1250
RTSTimer RTS_timer
Definition uw-smart-ofdm.h:1197
virtual void exitCTSBackoff()
Definition uw-smart-ofdm.cpp:530
Packet * nextRTS
Definition uw-smart-ofdm.h:1267
int timeslots
Definition uw-smart-ofdm.h:1245
int max_rts_tries
Definition uw-smart-ofdm.h:1253
UWSMARTOFDM_PKT_TYPE
Definition uw-smart-ofdm.h:200
@ UWSMARTOFDM_CTS_PKT
Definition uw-smart-ofdm.h:205
@ UWSMARTOFDM_DATA_PKT
Definition uw-smart-ofdm.h:202
@ UWSMARTOFDM_ACK_PKT
Definition uw-smart-ofdm.h:201
@ UWSMARTOFDM_RTS_PKT
Definition uw-smart-ofdm.h:204
@ UWSMARTOFDM_DATAMAX_PKT
Definition uw-smart-ofdm.h:203
virtual void stateRxWaitAck()
Definition uw-smart-ofdm.cpp:1619
UWSMARTOFDM_REASON_STATUS last_reason
Definition uw-smart-ofdm.h:1208
int getUpLayersDataPktsRx()
Definition uw-smart-ofdm.h:1031
int max_burst_size
Definition uw-smart-ofdm.h:1256
int max_tx_tries
Definition uw-smart-ofdm.h:1122
virtual void txRTS()
Definition uw-smart-ofdm.cpp:1076
Class that provide the implementation of an object to display messages.
int pktSeqNum
Definition uw-smart-ofdm.h:89
packet_t PT_MMAC_DATA
Definition initlib.cpp:45
packet_t PT_MMAC_CTS
Definition initlib.cpp:42
criticalLevel
Definition uw-smart-ofdm.h:90
@ HIGH
Definition uw-smart-ofdm.h:90
@ LOW
Definition uw-smart-ofdm.h:90
packet_t PT_MMAC_RTS
Definition initlib.cpp:43
packet_t PT_MMAC_ACK
Definition initlib.cpp:44
std::pair< int, int > counter
Definition uwinterference.h:53
Common necessary fields for smart-ofdm.
Definition of UwOFDMPhy class. Your can find the brief description of this physical layer in the pape...
Common structures and variables in the protocol.