-
Notifications
You must be signed in to change notification settings - Fork 0
/
aodv-weep-scheduler.h
102 lines (89 loc) · 3.18 KB
/
aodv-weep-scheduler.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
#ifndef AODV_WEEP_SCHEDULER_H
#define AODV_WEEP_SCHEDULER_H
#include <cstdint>
#include <queue>
#include <vector>
#include "ns3/double.h"
#include "ns3/ipv4-address.h"
#include "ns3/ipv4-routing-protocol.h"
#include "ns3/packet.h"
#include "ns3/random-variable-stream.h"
#include "packet-scheduler-base.h"
#include "aodv-queue.h"
namespace ns3 {
namespace weep {
class AodvWeepScheduler : public PacketScheduler
{
public:
/**
* \brief Get the type ID.
* \return the object TypeId
*/
static TypeId GetTypeId (void);
AodvWeepScheduler ()
{
m_uniformRandomVariable = CreateObject<UniformRandomVariable> ();
m_uniformRandomVariable->SetAttribute("Min", DoubleValue (0.0));
m_uniformRandomVariable->SetAttribute("Max", DoubleValue (100.0));
}
AodvWeepScheduler (uint32_t maxLen, Time maxDelay)
{
m_size = maxLen;
m_maxDelay = maxDelay;
}
bool Enqueue (Ptr<PacketQueueEntry> entry);
void SendPacket ();
private:
/// Calculate weight of a packet
/// Product of
/// 1. External priority (ep).
/// 2. Estimated lifetime index (eli).
/// 3. Fragility index (fi).
/// 4. Path performance index (ppi).
/// 5. Urgency Factor (H)
/// 5. Hop Factor (U)
double CalculateWeight (Ptr<DataPacketQueueEntry> entry);
/// Calculate Estimated lifetime index (eli)
double CalculateEstimatedLifetimeIndex (Ptr<DataPacketQueueEntry> entry);
/// Calculate Fragility index (fi)
double CalculateFragilityIndex (Ptr<DataPacketQueueEntry> entry);
/// Calculate Path performance index (ppi)
double CalculatePathPerformanceIndex (Ptr<DataPacketQueueEntry> entry);
/// Calculate Hop Factor (H)
double CalculateHopFactor (Ptr<DataPacketQueueEntry> entry);
/// Calculate Urgency Factor (U)
double CalculateUrgencyFactor (Ptr<DataPacketQueueEntry> entry);
/// Forward packets from level3 to level2
void ForwardPackets (uint32_t numPackets);
/// Clear level2 queue
void ClearLevel2Queue ();
/// Update node data from packet
void UpdateNodeData (Ptr<PacketQueueEntry> entry);
/// Packet queues
std::vector<std::pair<uint64_t, Ptr<PacketQueueEntry>>> m_level1Queue;
std::set<std::tuple<double, uint64_t, Ptr<DataPacketQueueEntry>>> m_level2Queue;
std::set<std::tuple<double, uint64_t, Ptr<DataPacketQueueEntry>>> m_level3Queue;
std::queue<Ptr<DataPacketQueueEntry>, std::vector<Ptr<DataPacketQueueEntry>>> m_sendQueue;
/// Random variable generator to generate jitter
Ptr<UniformRandomVariable> m_uniformRandomVariable;
/// Depletion rates
std::map<Ipv4Address, double> m_depletionRates;
/// Maximum energies
std::map<Ipv4Address, double> m_maxEnergies;
/// Current residual energies
std::map<Ipv4Address, double> m_currentEnergies;
/// Last update times
std::map<Ipv4Address, uint64_t> m_lastUpdateTimes;
/// Fragility indices
std::map<std::string, double> m_fragilityIndices;
/// Number of hops
std::map<std::string, uint32_t> m_hops;
/// Sessions in l2 queue
std::set<std::string> m_sessionsInL2Queue;
std::vector<Ptr<PacketQueueEntry>> m_queue;
};
NS_OBJECT_ENSURE_REGISTERED (AodvWeepScheduler);
} // namespace weep
} // namespace ns3
#endif /* AODV_WEEP_SCHEDULER_H */