-
Notifications
You must be signed in to change notification settings - Fork 28
/
dummy-controller.h
90 lines (76 loc) · 3.22 KB
/
dummy-controller.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
/******************************************************************************
* Copyright 2016-2017 Cisco Systems, Inc. *
* *
* Licensed under the Apache License, Version 2.0 (the "License"); *
* you may not use this file except in compliance with the License. *
* *
* You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an "AS IS" BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
******************************************************************************/
/**
* @file
* Dummy controller (CBR) interface for rmcat ns3 module.
*
* @version 0.1.1
* @author Jiantao Fu
* @author Sergio Mena
* @author Xiaoqing Zhu
*/
#ifndef DUMMY_CONTROLLER_H
#define DUMMY_CONTROLLER_H
#include "sender-based-controller.h"
namespace rmcat {
/**
* Simplistic implementation of a sender-based congestion controller. The
* algorithm simply returns a constant, hard-coded bandwidth when queried.
*/
class DummyController: public SenderBasedController
{
public:
/** Class constructor */
DummyController();
/** Class destructor */
virtual ~DummyController();
/**
* Set the current bandwidth estimation. This can be useful in test environments
* to temporarily disrupt the current bandwidth estimation
*
* @param [in] newBw Bandwidth estimation to overwrite the current estimation
*/
virtual void setCurrentBw(float newBw);
/**
* Reset the internal state of the congestion controller
*/
virtual void reset();
/**
* Simplistic implementation of feedback packet processing. It simply
* prints calculated metrics at regular intervals
*/
virtual bool processFeedback(uint64_t nowUs,
uint16_t sequence,
uint64_t rxTimestampUs,
uint8_t ecn=0);
/**
* Simplistic implementation of bandwidth getter. It returns a hard-coded
* bandwidth value in bits per second
*/
virtual float getBandwidth(uint64_t nowUs) const;
private:
void updateMetrics();
void logStats(uint64_t nowUs) const;
uint64_t m_lastTimeCalcUs;
bool m_lastTimeCalcValid;
uint64_t m_QdelayUs; /**< estimated queuing delay in microseconds */
uint32_t m_ploss; /**< packet loss count within configured window */
float m_plr; /**< packet loss ratio within packet history window */
float m_RecvR; /**< updated receiving rate in bps */
};
}
#endif /* DUMMY_CONTROLLER_H */