DESERT 4.0.0
uw-csma-ca.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 CSMA_CA_H
40#define CSMA_CA_H
41
42#include <fstream>
43#include <iostream>
44#include <mmac.h>
45#include <queue>
46#include <sstream>
47#include <time.h>
48#include <unistd.h>
49
50#include "uw-csma-ca-hdrs.h"
51
52#define DROP_REASON_SNR "SNR"
53#define DROP_REASON_NOTFORME "NFM"
54#define DROP_REASON_NOTRIGHTSTATE "NRS"
55#define DROP_REASON_GENERICERROR "ERR"
56
63
65
67
79
81
83
85
87
89
90string log_level_string[] = {"ERROR", "WARNING", "INFO", "DEBUG"};
94class CsmaCa : public MMac
95{
96public:
97 class CsmaCaTimer : public TimerHandler
98 {
99 public:
101 : TimerHandler()
102 {
103 module = m;
104 timer_type = tt;
105 }
106
107 protected:
108 virtual void expire(Event *e);
109 CsmaCa *module;
111 };
112
113 CsmaCa();
114 virtual ~CsmaCa();
125 virtual int command(int argc, const char *const *argv);
126
127protected:
133 virtual void recvFromUpperLayers(Packet *p);
139 virtual void Mac2PhyStartTx(Packet *p);
145 virtual void Phy2MacEndTx(const Packet *p);
151 virtual void Phy2MacStartRx(const Packet *p);
157 virtual void Phy2MacEndRx(Packet *p);
164 virtual void dropPacket(Packet *p, csma_ca_pkt_type_t type, char *reason);
169 inline csma_ca_states_t
171 {
172 return state;
173 }
178 inline void
180 {
182 state = s;
183 }
190 {
191 return log_level;
192 }
197 inline int
199 {
200 return data_q.size();
201 }
206 inline time_t
208 {
209 return time(NULL);
210 }
215 inline string
217 {
218 return logfile;
219 }
223 virtual void state_Wait_CTS();
227 virtual void state_Wait_Data();
231 virtual void state_Idle();
236 virtual void state_Backoff(int tx_time);
241 virtual int stateRxData(Packet *p);
248 virtual int stateRxRTS(hdr_ca_RTS *rts, int mac_src, int mac_dst);
255 virtual int stateRxCTS(hdr_ca_CTS *cts, int mac_src, int mac_dst);
262 virtual int stateRxACK(Packet *ack);
266 virtual void stateTxCTS();
270 virtual int stateTxData();
274 virtual void state_Wait_ACK();
279 virtual void stateTxAck(int mac_dst);
284 virtual void initializeLog();
285
291private:
292/* Log Macros */
293#define LOGERR(log) printonLog(CSMA_CA_ERROR, log);
294#define LOGDBG(log) printonLog(CSMA_CA_DEBUG, log);
295#define LOGWRN(log) printonLog(CSMA_CA_WARN, log);
296#define LOGINFO(log) printonLog(CSMA_CA_INFO, log);
302 void printonLog(csma_ca_log_level_t level, string log);
303
304 /* Private Methods */
308 void extractDataPacket();
312 int txData();
317 int txRTS(int mac_dest);
322 int txCTS(int mac_dest);
326 int txAck();
330 void data_timer_fired();
334 void backoff_timer_fired();
338 void cts_timer_fired();
342 void ack_timer_fired();
347 inline int
349 {
350 return (int) ((data_size * 8) / bitrate);
351 }
352
353 /* Header build Methods */
359 void buildRTShdr(hdr_ca_RTS **rts, uint8_t tx_time);
365 void buildCTShdr(hdr_ca_CTS **cts, uint8_t tx_time);
372 Packet *buildPacket(int mac_dest, csma_ca_pkt_type_t type, uint8_t tx_time);
373
374 /* config from tcl */
384 /* status variables */
388 std::queue<Packet *> data_q;
393 /* log */
394 std::ofstream outLog;
396 string logfile;
398 /* statistics*/
405};
406
407#endif /* CSMA_CA_H */
Definition uw-csma-ca.h:98
CsmaCa *csma_ca_timers_t timer_type
Definition uw-csma-ca.h:110
virtual void expire(Event *e)
Definition uw-csma-ca.cpp:166
CsmaCaTimer(CsmaCa *m, csma_ca_timers_t tt)
Definition uw-csma-ca.h:100
Definition uw-csma-ca.h:95
string logfile
Definition uw-csma-ca.h:396
int cts_wait_val
Definition uw-csma-ca.h:380
int max_queue_size
Definition uw-csma-ca.h:375
void extractDataPacket()
Definition uw-csma-ca.cpp:524
int cts_pkt_dropped
Definition uw-csma-ca.h:402
Packet * buildPacket(int mac_dest, csma_ca_pkt_type_t type, uint8_t tx_time)
Definition uw-csma-ca.cpp:628
virtual void state_Wait_ACK()
Definition uw-csma-ca.cpp:480
time_t getEpoch()
Definition uw-csma-ca.h:207
virtual int stateTxData()
Definition uw-csma-ca.cpp:456
CsmaCa()
Definition uw-csma-ca.cpp:130
csma_ca_states_t state
Definition uw-csma-ca.h:390
int n_rts_rx
Definition uw-csma-ca.h:399
int n_cts_rx
Definition uw-csma-ca.h:400
virtual int stateRxACK(Packet *ack)
Definition uw-csma-ca.cpp:321
int data_pkt_dropped
Definition uw-csma-ca.h:401
virtual void initializeLog()
Definition uw-csma-ca.cpp:228
int data_wait_val
Definition uw-csma-ca.h:381
void ack_timer_fired()
Definition uw-csma-ca.cpp:185
int txData()
Definition uw-csma-ca.cpp:587
void data_timer_fired()
Definition uw-csma-ca.cpp:217
virtual void Phy2MacStartRx(const Packet *p)
Definition uw-csma-ca.cpp:473
CsmaCaTimer ack_timer
Definition uw-csma-ca.h:289
std::queue< Packet * > data_q
Definition uw-csma-ca.h:388
virtual void state_Backoff(int tx_time)
Definition uw-csma-ca.cpp:463
string getLogFile()
Definition uw-csma-ca.h:216
int actual_mac_data_src
Definition uw-csma-ca.h:385
virtual int stateRxCTS(hdr_ca_CTS *cts, int mac_src, int mac_dst)
Definition uw-csma-ca.cpp:437
virtual void state_Idle()
Definition uw-csma-ca.cpp:427
void buildRTShdr(hdr_ca_RTS **rts, uint8_t tx_time)
Definition uw-csma-ca.cpp:616
void backoff_timer_fired()
Definition uw-csma-ca.cpp:194
void buildCTShdr(hdr_ca_CTS **cts, uint8_t tx_time)
Definition uw-csma-ca.cpp:622
void printonLog(csma_ca_log_level_t level, string log)
Definition uw-csma-ca.cpp:669
virtual void dropPacket(Packet *p, csma_ca_pkt_type_t type, char *reason)
Definition uw-csma-ca.cpp:538
virtual void state_Wait_CTS()
Definition uw-csma-ca.cpp:600
virtual int stateRxData(Packet *p)
Definition uw-csma-ca.cpp:352
int getQueueSize()
Definition uw-csma-ca.h:198
virtual void stateTxCTS()
Definition uw-csma-ca.cpp:416
int data_size
Definition uw-csma-ca.h:376
CsmaCaTimer backoff_timer
Definition uw-csma-ca.h:286
int txRTS(int mac_dest)
Definition uw-csma-ca.cpp:560
Packet * actual_data_packet
Definition uw-csma-ca.h:387
int ack_pkt_dropped
Definition uw-csma-ca.h:404
int backoff_max
Definition uw-csma-ca.h:379
virtual ~CsmaCa()
Definition uw-csma-ca.cpp:161
virtual int stateRxRTS(hdr_ca_RTS *rts, int mac_src, int mac_dst)
Definition uw-csma-ca.cpp:380
int actual_expected_tx_time
Definition uw-csma-ca.h:386
csma_ca_log_level_t getLogLevel()
Definition uw-csma-ca.h:189
virtual void stateTxAck(int mac_dst)
Definition uw-csma-ca.cpp:344
int computeTxTime()
Definition uw-csma-ca.h:348
int ack_wait_val
Definition uw-csma-ca.h:382
CsmaCaTimer data_timer
Definition uw-csma-ca.h:288
virtual void Mac2PhyStartTx(Packet *p)
Definition uw-csma-ca.cpp:241
csma_ca_log_level_t log_level
Definition uw-csma-ca.h:395
virtual int command(int argc, const char *const *argv)
Definition uw-csma-ca.cpp:74
virtual void state_Wait_Data()
Definition uw-csma-ca.cpp:608
int bitrate
Definition uw-csma-ca.h:377
int txCTS(int mac_dest)
Definition uw-csma-ca.cpp:573
virtual void Phy2MacEndRx(Packet *p)
Definition uw-csma-ca.cpp:247
virtual void Phy2MacEndTx(const Packet *p)
Definition uw-csma-ca.cpp:488
std::ofstream outLog
Definition uw-csma-ca.h:394
int backoff_delta
Definition uw-csma-ca.h:378
void cts_timer_fired()
Definition uw-csma-ca.cpp:205
csma_ca_states_t previous_state
Definition uw-csma-ca.h:391
CsmaCaTimer cts_timer
Definition uw-csma-ca.h:287
virtual void recvFromUpperLayers(Packet *p)
Definition uw-csma-ca.cpp:510
void updateState(csma_ca_states_t s)
Definition uw-csma-ca.h:179
int txAck()
ack_modes_t ack_mode
Definition uw-csma-ca.h:389
csma_ca_states_t getState()
Definition uw-csma-ca.h:170
int rts_pkt_dropped
Definition uw-csma-ca.h:403
Definition uw-csma-ca-hdrs.h:80
Definition uw-csma-ca-hdrs.h:52
Provides the headers of ctrl packets of uw-csma-ca module.
CSMA_CA_PKT_TYPE
Definition uw-csma-ca.h:80
@ CSMA_CA_RTS
Definition uw-csma-ca.h:80
@ CSMA_CA_DATA
Definition uw-csma-ca.h:80
@ CSMA_CA_CTS
Definition uw-csma-ca.h:80
@ CSMA_CA_ACK
Definition uw-csma-ca.h:80
CSMA_CA_TIMERS
Definition uw-csma-ca.h:57
@ CSMA_CA_DATA_TIMER
Definition uw-csma-ca.h:58
@ CSMA_CA_CTS_TIMER
Definition uw-csma-ca.h:60
@ CSMA_CA_ACK_TIMER
Definition uw-csma-ca.h:61
@ CSMA_CA_BACKOFF_TIMER
Definition uw-csma-ca.h:59
CSMA_CA_ACK_MODES
Definition uw-csma-ca.h:64
@ CSMA_CA_NO_ACK_MODE
Definition uw-csma-ca.h:64
@ CSMA_CA_ACK_MODE
Definition uw-csma-ca.h:64
enum CSMA_CA_PKT_TYPE csma_ca_pkt_type_t
Definition uw-csma-ca.h:82
enum log_level csma_ca_log_level_t
Definition uw-csma-ca.h:88
CSMA_CA_STATES
Definition uw-csma-ca.h:68
@ CSMA_CA_BACKOFF
Definition uw-csma-ca.h:70
@ CSMA_CA_WAIT_ACK
Definition uw-csma-ca.h:76
@ CSMA_CA_TX_RTS
Definition uw-csma-ca.h:71
@ CSMA_CA_TX_ACK
Definition uw-csma-ca.h:77
@ CSMA_CA_TX_DATA
Definition uw-csma-ca.h:73
@ CSMA_CA_IDLE
Definition uw-csma-ca.h:69
@ CSMA_CA_TX_CTS
Definition uw-csma-ca.h:72
@ CSMA_CA_WAIT_DATA
Definition uw-csma-ca.h:75
@ CSMA_CA_WAIT_CTS
Definition uw-csma-ca.h:74
enum CSMA_CA_TIMERS csma_ca_timers_t
log_level
Definition uw-csma-ca.h:86
@ CSMA_CA_ERROR
Definition uw-csma-ca.h:86
@ CSMA_CA_DEBUG
Definition uw-csma-ca.h:86
@ CSMA_CA_WARN
Definition uw-csma-ca.h:86
@ CSMA_CA_INFO
Definition uw-csma-ca.h:86
enum CSMA_CA_STATES csma_ca_states_t
Definition uw-csma-ca.h:84
enum CSMA_CA_ACK_MODES ack_modes_t
Definition uw-csma-ca.h:66
string log_level_string[]
Definition uw-csma-ca.h:90