-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstoc-fairqueue.h
51 lines (37 loc) · 1.1 KB
/
stoc-fairqueue.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
#ifndef STOC_FAIR_QUEUE_H
#define STOC_FAIR_QUEUE_H
/*
* An stochastic fair-queue using DRR.
*/
#include "queue.h"
class StocFairQueue : public Queue
{
public:
StocFairQueue(linkspeed_bps bitrate, mem_b maxsize,
QueueLogger *logger, uint32_t nQueue = 32, uint32_t quantum = MSS_BYTES);
void receivePacket(Packet &pkt);
void printStats();
protected:
void beginService();
void completeService();
void dropPacket(Packet &pkt);
private:
uint64_t hashFlow(int index, uint32_t flowid);
// Number of FIFO queues.
uint32_t _nQueue;
// Number of packets currently enqueued.
uint64_t _nPackets;
// Quantum to transmit in each round.
uint32_t _quantum;
// Multiple queues storing all the packets.
std::vector<std::list<Packet*> > _packets;
// Credits available for each queue.
std::vector<uint32_t> _credits;
// Bytes stored in each FIFO queue.
std::vector<uint32_t> _Qsize;
// Flag for whether a queue is active or not.
std::vector<bool> _isActive;
// List of active queues.
std::list<uint32_t> _activeQ;
};
#endif