DESERT 4.0.0
uw-mac-DACAP-alter.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_DACAP_H
40#define MMAC_UW_DACAP_H
41
42#include <fstream>
43#include <iostream>
44#include <map>
45#include <mmac.h>
46#include <mphy.h>
47#include <queue>
48#include <string>
49
50#define HDR_DACAP(P) (hdr_dacap::access(P))
51
52#define DACAP_DROP_REASON_WRONG_STATE \
53 "WST"
55#define DACAP_DROP_REASON_WRONG_RECEIVER \
56 "WRCV"
57#define DACAP_DROP_REASON_UNKNOWN_TYPE \
58 "UPT"
59#define DACAP_DROP_REASON_BUFFER_FULL \
60 "DBF"
62extern packet_t PT_DACAP;
63
67typedef struct hdr_dacap {
68
69 double ts;
70 int sn;
72 packet_t orig_type;
73 int data_sn;
77 static int offset_;
81 inline static int &
83 {
84 return offset_;
85 }
90 inline static struct hdr_dacap *
91 access(const Packet *p)
92 {
93 return (struct hdr_dacap *) p->access(offset_);
94 }
95
97
98class MMacDACAP;
99
103class DACAPTimer : public TimerHandler
104{
105
106public:
112 : TimerHandler()
113 {
114 module = m;
115 }
116
117protected:
122 virtual void expire(Event *e);
123 MMacDACAP *module;
125};
129class DACAPBTimer : public TimerHandler
130{
131public:
137 : TimerHandler()
138 {
139 module = m;
140 }
141
142protected:
147 virtual void expire(Event *e);
148 MMacDACAP *module;
150};
151
155class MMacDACAP : public MMac
156{
157 friend class DACAPTimer;
158 friend class DACAPBTimer;
160public:
164 MMacDACAP();
168 virtual ~MMacDACAP();
179 virtual int command(int argc, const char *const *argv);
187 virtual int crLayCommand(ClMessage *m);
188
189protected:
190 /***********************************
191 | Internal variable and functions |
192 ***********************************/
198 virtual void recvFromUpperLayers(Packet *p);
199
205 virtual void Phy2MacEndTx(const Packet *p);
211 virtual void Phy2MacStartRx(const Packet *p);
217 virtual void Phy2MacEndRx(Packet *p);
228 virtual double computeWaitTime(int mode, double distance);
237 virtual double computeTxTime(int type);
245 virtual void initPkt(Packet *p, int pkt_type);
250 virtual double getBackoffTime();
255 virtual double getRecontendTime();
259 virtual void txAck();
264 virtual void txData();
269 virtual void txRts();
273 virtual void txCts();
277 virtual void txWrn();
284 virtual void rxStateIdle(Packet *p);
291 virtual void rxStateBackoff(Packet *p);
298 virtual void rxStateWaitCTS(Packet *p);
305 virtual void rxStateWaitACK(Packet *p);
312 virtual void rxStateWaitData(Packet *p);
319 virtual void rxStateWaitXCts(Packet *p);
326 virtual void rxStateWaitXData(Packet *p);
333 virtual void rxStateWaitXAck(Packet *p);
341 virtual void rxStateWaitXWarning(Packet *p);
349 virtual void rxStateWaitWarning(Packet *p);
357 virtual void rxStateSendWarning(Packet *p);
365 virtual void rxStateRecontendWindow(Packet *p);
369 virtual void stateIdle();
374 virtual void stateSendRTS();
380 virtual void stateBackoff();
386 virtual void stateWaitCTS();
393 virtual void stateDeferData();
398 virtual void stateSendData();
402 virtual void stateWaitACK();
406 virtual void stateCTSReceived();
412 virtual void stateWaitData();
417 virtual void stateDataReceived(Packet *data_pkt);
425 virtual void stateWaitXCts();
433 virtual void stateWaitXData();
442 virtual void stateWaitXAck();
448 virtual void stateWaitXWarning();
454 virtual void stateSendAck();
459 virtual void stateSendCTS();
466 virtual void stateWaitWarning();
474 virtual void stateSendWarning();
480 virtual void stateRecontendWindow();
486 virtual void printStateInfo(double delay = 0);
493 virtual void initInfo();
498 virtual void
499 refreshState(int state)
500 {
502 curr_state = state;
503 }
509 virtual void setBackoffNodes(double node, double node_b);
513 virtual void exitBackoff();
519 virtual void exitSleep();
523 virtual void freezeBackoff();
527 virtual int
529 {
530 return Q.size();
531 }
535 virtual void
536 queuePop(bool flag = true)
537 {
538 Packet::free(Q.front());
539 Q.pop();
540 waitEndTime(flag);
541 }
546 virtual void waitForUser();
547
548 /*******************
549 * stats functions *
550 ******************/
551
552 inline int
554 {
555 return up_data_pkts_rx;
556 }
557
561 virtual void
563 {
564 wrn_pkts_tx++;
565 }
569 virtual void
571 {
572 wrn_pkts_rx++;
573 }
577 virtual void
579 {
580 rts_pkts_tx++;
581 }
585 virtual void
587 {
588 rts_pkts_rx++;
589 }
593 virtual void
595 {
596 cts_pkts_tx++;
597 }
601 virtual void
603 {
604 cts_pkts_rx++;
605 }
609 virtual void
618 virtual void
620 {
621 wrn_pkts_tx = 0;
622 wrn_pkts_rx = 0;
623 defer_times_no = 0;
624 return MMac::resetStats();
625 }
630 virtual int
632 {
633 return (up_data_pkts_rx - Q.size());
634 }
638 virtual int
640 {
641 return wrn_pkts_tx;
642 }
646 virtual int
648 {
649 return wrn_pkts_rx;
650 }
654 virtual int
656 {
657 return rts_pkts_tx;
658 }
662 virtual int
664 {
665 return rts_pkts_rx;
666 }
670 virtual int
672 {
673 return cts_pkts_tx;
674 }
678 virtual int
680 {
681 return cts_pkts_rx;
682 }
686 virtual int
688 {
689 return defer_times_no;
690 }
694 virtual void
696 {
698 }
705 virtual void
706 deferEndTime(double duration)
707 {
708 sum_defer_time += duration;
709 }
713 virtual void
715 {
716 double duration = NOW - backoff_first_start;
717 backoffSumDuration(duration);
718 }
722 virtual double
724 {
725 if (defer_times_no > 0)
727 else
728 return (0.0);
729 }
730
741 double srtt;
742 double sumrtt;
743 double sumrtt2;
746 std::queue<Packet *> Q;
748 bool TxActive;
749 bool RxActive;
771 double t_min;
772 double T_W_min;
773 double delta_D;
776 double delta_data;
791 double alpha_;
823 static int u_pkt_id;
829 int txsn;
832 static map<int, string> info;
835 ofstream fout;
837};
838
839#endif /* MMAC_UW_DACAP_H */
Definition uw-mac-DACAP-alter.h:130
DACAPBTimer(MMacDACAP *m)
Definition uw-mac-DACAP-alter.h:136
virtual void expire(Event *e)
Definition uw-mac-DACAP-alter.cpp:140
MMacDACAP *int wait_reason
Definition uw-mac-DACAP-alter.h:149
Definition uw-mac-DACAP-alter.h:104
virtual void expire(Event *e)
Definition uw-mac-DACAP-alter.cpp:161
DACAPTimer(MMacDACAP *m)
Definition uw-mac-DACAP-alter.h:111
MMacDACAP *int wait_reason
Definition uw-mac-DACAP-alter.h:124
Definition uw-mac-DACAP-alter.h:156
double wait_costant
Definition uw-mac-DACAP-alter.h:787
ofstream fout
Definition uw-mac-DACAP-alter.h:835
DACAPBTimer backoff_timer
Definition uw-mac-DACAP-alter.h:827
int op_mode
Definition uw-mac-DACAP-alter.h:781
virtual int getWrnPktsRx()
Definition uw-mac-DACAP-alter.h:647
virtual void stateWaitXCts()
Definition uw-mac-DACAP-alter.cpp:2055
virtual void waitForUser()
Definition uw-mac-DACAP-alter.cpp:2319
virtual double getMeanDeferTime()
Definition uw-mac-DACAP-alter.h:723
bool warning_sent
Definition uw-mac-DACAP-alter.h:756
MMacDACAP()
Definition uw-mac-DACAP-alter.cpp:359
virtual int getTotalDeferTimes()
Definition uw-mac-DACAP-alter.h:687
int ACK_size
Definition uw-mac-DACAP-alter.h:801
bool print_transitions
Definition uw-mac-DACAP-alter.h:759
virtual int getRtsPktsTx()
Definition uw-mac-DACAP-alter.h:655
virtual void txRts()
Definition uw-mac-DACAP-alter.cpp:1105
virtual void incrWrnPktsRx()
Definition uw-mac-DACAP-alter.h:570
virtual int command(int argc, const char *const *argv)
Definition uw-mac-DACAP-alter.cpp:444
Packet * curr_data_pkt
Definition uw-mac-DACAP-alter.h:818
virtual void stateDeferData()
Definition uw-mac-DACAP-alter.cpp:2177
int last_reason
Definition uw-mac-DACAP-alter.h:769
bool backoff_freeze_mode
Definition uw-mac-DACAP-alter.h:757
int u_data_id
Definition uw-mac-DACAP-alter.h:824
bool has_buffer_queue
Definition uw-mac-DACAP-alter.h:761
int WRN_size
Definition uw-mac-DACAP-alter.h:799
double alpha_
Definition uw-mac-DACAP-alter.h:791
double max_tx_tries
Definition uw-mac-DACAP-alter.h:782
virtual int getCtsPktsRx()
Definition uw-mac-DACAP-alter.h:679
double max_prop_delay
Definition uw-mac-DACAP-alter.h:779
double session_distance
Definition uw-mac-DACAP-alter.h:807
double sumrtt2
Definition uw-mac-DACAP-alter.h:743
int last_data_id_tx
Definition uw-mac-DACAP-alter.h:820
int CTS_size
Definition uw-mac-DACAP-alter.h:797
static int u_pkt_id
Definition uw-mac-DACAP-alter.h:823
int txsn
Definition uw-mac-DACAP-alter.h:829
virtual int getQueueSize()
Definition uw-mac-DACAP-alter.h:528
double backoff_remaining
Definition uw-mac-DACAP-alter.h:812
virtual void stateSendWarning()
Definition uw-mac-DACAP-alter.cpp:2121
int rts_pkts_tx
Definition uw-mac-DACAP-alter.h:733
virtual void stateWaitXAck()
Definition uw-mac-DACAP-alter.cpp:2078
int curr_dest_addr
Definition uw-mac-DACAP-alter.h:794
virtual void rxStateIdle(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1154
virtual void incrRtsPktsTx()
Definition uw-mac-DACAP-alter.h:578
double sum_defer_time
Definition uw-mac-DACAP-alter.h:738
int buffer_pkts
Definition uw-mac-DACAP-alter.h:784
double defer_times_no
Definition uw-mac-DACAP-alter.h:737
virtual double computeTxTime(int type)
Definition uw-mac-DACAP-alter.cpp:594
virtual void backoffStartTime()
Definition uw-mac-DACAP-alter.h:695
int prev_state
Definition uw-mac-DACAP-alter.h:804
virtual void Phy2MacStartRx(const Packet *p)
Definition uw-mac-DACAP-alter.cpp:957
virtual void rxStateWaitXData(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1551
virtual void rxStateWaitXCts(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1483
std::queue< Packet * > Q
Definition uw-mac-DACAP-alter.h:746
virtual void resetStats()
Definition uw-mac-DACAP-alter.h:619
int max_payload
Definition uw-mac-DACAP-alter.h:788
virtual void rxStateWaitWarning(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1711
int sleep_node_2
Definition uw-mac-DACAP-alter.h:767
double start_tx_time
Definition uw-mac-DACAP-alter.h:740
double delta_D
Definition uw-mac-DACAP-alter.h:773
int RTS_size
Definition uw-mac-DACAP-alter.h:798
bool TxActive
Definition uw-mac-DACAP-alter.h:748
virtual void rxStateWaitXAck(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1609
bool backoff_pending
Definition uw-mac-DACAP-alter.h:754
bool multihop_mode
Definition uw-mac-DACAP-alter.h:763
double backoff_start_time
Definition uw-mac-DACAP-alter.h:810
virtual void txAck()
Definition uw-mac-DACAP-alter.cpp:1080
virtual void deferEndTime(double duration)
Definition uw-mac-DACAP-alter.h:706
virtual void refreshState(int state)
Definition uw-mac-DACAP-alter.h:499
virtual void setBackoffNodes(double node, double node_b)
Definition uw-mac-DACAP-alter.cpp:1065
int HDR_size
Definition uw-mac-DACAP-alter.h:800
virtual void rxStateSendWarning(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1787
double max_backoff_counter
Definition uw-mac-DACAP-alter.h:790
virtual void queuePop(bool flag=true)
Definition uw-mac-DACAP-alter.h:536
virtual void stateDataReceived(Packet *data_pkt)
Definition uw-mac-DACAP-alter.cpp:2225
virtual void rxStateWaitData(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1434
virtual double getRecontendTime()
Definition uw-mac-DACAP-alter.cpp:736
int last_data_id_rx
Definition uw-mac-DACAP-alter.h:821
int wrn_pkts_rx
Definition uw-mac-DACAP-alter.h:732
virtual void rxStateBackoff(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1217
virtual void initPkt(Packet *p, int pkt_type)
Definition uw-mac-DACAP-alter.cpp:803
bool RxActive
Definition uw-mac-DACAP-alter.h:749
virtual double getBackoffTime()
Definition uw-mac-DACAP-alter.cpp:749
int rttsamples
Definition uw-mac-DACAP-alter.h:744
virtual int getWrnPktsTx()
Definition uw-mac-DACAP-alter.h:639
int cts_pkts_tx
Definition uw-mac-DACAP-alter.h:735
virtual int getRemainingPkts()
Definition uw-mac-DACAP-alter.h:631
virtual void recvFromUpperLayers(Packet *p)
Definition uw-mac-DACAP-alter.cpp:777
virtual void incrCtsPktsRx()
Definition uw-mac-DACAP-alter.h:602
double srtt
Definition uw-mac-DACAP-alter.h:741
virtual void stateSendAck()
Definition uw-mac-DACAP-alter.cpp:2248
bool session_active
Definition uw-mac-DACAP-alter.h:752
virtual void rxStateWaitXWarning(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1654
virtual void stateWaitWarning()
Definition uw-mac-DACAP-alter.cpp:2105
int rts_pkts_rx
Definition uw-mac-DACAP-alter.h:734
virtual void stateWaitXWarning()
Definition uw-mac-DACAP-alter.cpp:2089
virtual void incrWrnPktsTx()
Definition uw-mac-DACAP-alter.h:562
virtual void stateCTSReceived()
Definition uw-mac-DACAP-alter.cpp:2211
int sleep_node_1
Definition uw-mac-DACAP-alter.h:766
virtual void stateWaitData()
Definition uw-mac-DACAP-alter.cpp:2151
virtual void stateSendData()
Definition uw-mac-DACAP-alter.cpp:2198
virtual void rxStateRecontendWindow(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1867
virtual void incrTotalDeferTimes()
Definition uw-mac-DACAP-alter.h:610
virtual void initInfo()
Definition uw-mac-DACAP-alter.cpp:525
virtual void stateBackoff()
Definition uw-mac-DACAP-alter.cpp:2004
virtual void rxStateWaitACK(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1381
double t_min
Definition uw-mac-DACAP-alter.h:771
int curr_state
Definition uw-mac-DACAP-alter.h:803
virtual void incrCtsPktsTx()
Definition uw-mac-DACAP-alter.h:594
virtual void stateWaitCTS()
Definition uw-mac-DACAP-alter.cpp:2138
double backoff_duration
Definition uw-mac-DACAP-alter.h:811
virtual void txWrn()
Definition uw-mac-DACAP-alter.cpp:1143
virtual int getCtsPktsTx()
Definition uw-mac-DACAP-alter.h:671
virtual void freezeBackoff()
Definition uw-mac-DACAP-alter.cpp:702
virtual void Phy2MacEndTx(const Packet *p)
Definition uw-mac-DACAP-alter.cpp:865
double T_W_min
Definition uw-mac-DACAP-alter.h:772
virtual void rxStateWaitCTS(Packet *p)
Definition uw-mac-DACAP-alter.cpp:1303
DACAPTimer timer
Definition uw-mac-DACAP-alter.h:826
double sumrtt
Definition uw-mac-DACAP-alter.h:742
int getUpLayersDataPktsRx()
Definition uw-mac-DACAP-alter.h:553
int cts_pkts_rx
Definition uw-mac-DACAP-alter.h:736
double RTS_sent_time
Definition uw-mac-DACAP-alter.h:806
double delta_data
Definition uw-mac-DACAP-alter.h:776
virtual void stateRecontendWindow()
Definition uw-mac-DACAP-alter.cpp:2270
virtual void incrRtsPktsRx()
Definition uw-mac-DACAP-alter.h:586
virtual void exitSleep()
Definition uw-mac-DACAP-alter.cpp:695
virtual void exitBackoff()
Definition uw-mac-DACAP-alter.cpp:679
virtual void Phy2MacEndRx(Packet *p)
Definition uw-mac-DACAP-alter.cpp:963
virtual void txCts()
Definition uw-mac-DACAP-alter.cpp:1130
int backoff_counter
Definition uw-mac-DACAP-alter.h:830
virtual int crLayCommand(ClMessage *m)
Definition uw-mac-DACAP-alter.cpp:511
virtual int getRtsPktsRx()
Definition uw-mac-DACAP-alter.h:663
bool defer_data
Definition uw-mac-DACAP-alter.h:750
virtual ~MMacDACAP()
Definition uw-mac-DACAP-alter.cpp:438
virtual void printStateInfo(double delay=0)
Definition uw-mac-DACAP-alter.cpp:2282
int wrn_pkts_tx
Definition uw-mac-DACAP-alter.h:731
static map< int, string > info
Definition uw-mac-DACAP-alter.h:832
virtual double computeWaitTime(int mode, double distance)
Definition uw-mac-DACAP-alter.cpp:633
virtual void backoffEndTime()
Definition uw-mac-DACAP-alter.h:714
virtual void stateIdle()
Definition uw-mac-DACAP-alter.cpp:1948
virtual void txData()
Definition uw-mac-DACAP-alter.cpp:1092
double backoff_tuner
Definition uw-mac-DACAP-alter.h:785
double backoff_first_start
Definition uw-mac-DACAP-alter.h:814
virtual void stateWaitACK()
Definition uw-mac-DACAP-alter.cpp:2165
virtual void stateSendRTS()
Definition uw-mac-DACAP-alter.cpp:1989
virtual void stateWaitXData()
Definition uw-mac-DACAP-alter.cpp:2066
virtual void stateSendCTS()
Definition uw-mac-DACAP-alter.cpp:2259
Definition uw-mac-DACAP-alter.h:67
int sn
Definition uw-mac-DACAP-alter.h:70
static int offset_
Definition uw-mac-DACAP-alter.h:77
static int & offset()
Definition uw-mac-DACAP-alter.h:82
int dacap_type
Definition uw-mac-DACAP-alter.h:71
int tx_tries
Definition uw-mac-DACAP-alter.h:75
int data_sn
Definition uw-mac-DACAP-alter.h:73
static struct hdr_dacap * access(const Packet *p)
Definition uw-mac-DACAP-alter.h:91
double ts
Definition uw-mac-DACAP-alter.h:69
packet_t orig_type
Definition uw-mac-DACAP-alter.h:72
packet_t PT_DACAP
Definition initlib.cpp:47