traffic-control: Minor changes to rebase and finalize FqPie

This commit is contained in:
Tom Henderson
2021-03-04 08:42:24 -08:00
parent 9b40674205
commit a889163870
6 changed files with 139 additions and 123 deletions

View File

@@ -92,6 +92,7 @@ SOURCES = \
$(SRC)/traffic-control/doc/fq-codel.rst \
$(SRC)/traffic-control/doc/fq-cobalt.rst \
$(SRC)/traffic-control/doc/pie.rst \
$(SRC)/traffic-control/doc/fq-pie.rst \
$(SRC)/traffic-control/doc/mq.rst \
$(SRC)/spectrum/doc/spectrum.rst \
$(SRC)/netanim/doc/animation.rst \

View File

@@ -15,4 +15,5 @@ Traffic Control Layer
cobalt
fq-cobalt
pie
fq-pie
mq

View File

@@ -1,6 +1,7 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2020 NITK Surathkal
* Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
* Copyright (c) 2020 NITK Surathkal (modified for FQ-PIE)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@ -15,12 +16,14 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Authors: Bhaskar Kataria <bhaskar.k7920@gmail.com>
* Tom Henderson <tomhend@u.washington.edu>
* Mohit P. Tahiliani <tahiliani@nitk.edu.in>
* Vivek Jain <jain.vivek.anand@gmail.com>
* Ankit Deepak <adadeepak8@gmail.com>
*
* Authors: Pasquale Imputato <p.imputato@gmail.com>
* Stefano Avallone <stefano.avallone@unina.it>
* Modified for FQ-PIE by: Bhaskar Kataria <bhaskar.k7920@gmail.com>
* Tom Henderson <tomhend@u.washington.edu>
* Mohit P. Tahiliani <tahiliani@nitk.edu.in>
* Vivek Jain <jain.vivek.anand@gmail.com>
* Ankit Deepak <adadeepak8@gmail.com>
*
*/
#include "ns3/test.h"
@@ -48,7 +51,8 @@ int32_t g_hash;
* Simple test packet filter able to classify IPv4 packets
*
*/
class Ipv4FqPieTestPacketFilter : public Ipv4PacketFilter {
class Ipv4FqPieTestPacketFilter : public Ipv4PacketFilter
{
public:
/**
* \brief Get the type ID.
@@ -76,12 +80,10 @@ Ipv4FqPieTestPacketFilter::GetTypeId (void)
}
Ipv4FqPieTestPacketFilter::Ipv4FqPieTestPacketFilter ()
{
}
{}
Ipv4FqPieTestPacketFilter::~Ipv4FqPieTestPacketFilter ()
{
}
{}
int32_t
Ipv4FqPieTestPacketFilter::DoClassify (Ptr<QueueDiscItem> item) const
@@ -110,12 +112,10 @@ private:
FqPieQueueDiscNoSuitableFilter::FqPieQueueDiscNoSuitableFilter ()
: TestCase ("Test packets that are not classified by any filter")
{
}
{}
FqPieQueueDiscNoSuitableFilter::~FqPieQueueDiscNoSuitableFilter ()
{
}
{}
void
FqPieQueueDiscNoSuitableFilter::DoRun (void)
@@ -162,12 +162,10 @@ private:
FqPieQueueDiscIPFlowsSeparationAndPacketLimit::FqPieQueueDiscIPFlowsSeparationAndPacketLimit ()
: TestCase ("Test IP flows separation and packet limit")
{
}
{}
FqPieQueueDiscIPFlowsSeparationAndPacketLimit::~FqPieQueueDiscIPFlowsSeparationAndPacketLimit ()
{
}
{}
void
FqPieQueueDiscIPFlowsSeparationAndPacketLimit::AddPacket (Ptr<FqPieQueueDisc> queue, Ipv4Header hdr)
@@ -231,12 +229,10 @@ private:
FqPieQueueDiscDeficit::FqPieQueueDiscDeficit ()
: TestCase ("Test credits and flows status")
{
}
{}
FqPieQueueDiscDeficit::~FqPieQueueDiscDeficit ()
{
}
{}
void
FqPieQueueDiscDeficit::AddPacket (Ptr<FqPieQueueDisc> queue, Ipv4Header hdr)
@@ -250,7 +246,7 @@ FqPieQueueDiscDeficit::AddPacket (Ptr<FqPieQueueDisc> queue, Ipv4Header hdr)
void
FqPieQueueDiscDeficit::DoRun (void)
{
Ptr<FqPieQueueDisc> queueDisc = CreateObjectWithAttributes<FqPieQueueDisc> ();
Ptr<FqPieQueueDisc> queueDisc = CreateObject<FqPieQueueDisc> ();
queueDisc->SetQuantum (90);
queueDisc->Initialize ();
@@ -373,12 +369,10 @@ private:
FqPieQueueDiscTCPFlowsSeparation::FqPieQueueDiscTCPFlowsSeparation ()
: TestCase ("Test TCP flows separation")
{
}
{}
FqPieQueueDiscTCPFlowsSeparation::~FqPieQueueDiscTCPFlowsSeparation ()
{
}
{}
void
FqPieQueueDiscTCPFlowsSeparation::AddPacket (Ptr<FqPieQueueDisc> queue, Ipv4Header ipHdr, TcpHeader tcpHdr)
@@ -459,12 +453,10 @@ private:
FqPieQueueDiscUDPFlowsSeparation::FqPieQueueDiscUDPFlowsSeparation ()
: TestCase ("Test UDP flows separation")
{
}
{}
FqPieQueueDiscUDPFlowsSeparation::~FqPieQueueDiscUDPFlowsSeparation ()
{
}
{}
void
FqPieQueueDiscUDPFlowsSeparation::AddPacket (Ptr<FqPieQueueDisc> queue, Ipv4Header ipHdr, UdpHeader udpHdr)
@@ -535,20 +527,20 @@ FqPieQueueDiscUDPFlowsSeparation::DoRun (void)
* creation capability of set associative hashing in FqPIE.
* We modified DoClassify () and CheckProtocol () so that we could control
* the hash returned for each packet. In the beginning, we use flow hashes
* ranging from 0 to 7. These must go into different queues in the same set.
* The set number for these is obtained using outerhash, which is 0.
* ranging from 0 to 7. These must go into different queues in the same set.
* The set number for these is obtained using outerhash, which is 0.
* When a new packet arrives with flow hash 1024, outerhash = 0 is obtained
* and the first set is iteratively searched.
* The packet is eventually added to queue 0 since the tags of queues
* in the set do not match with the hash of the flow. The tag of queue 0 is
* The packet is eventually added to queue 0 since the tags of queues
* in the set do not match with the hash of the flow. The tag of queue 0 is
* updated as 1024. When a packet with hash 1025 arrives, outerhash = 0
* is obtained and the first set is iteratively searched.
* is obtained and the first set is iteratively searched.
* Since there is no match, it is added to queue 0 and the tag of queue 0 is
* updated to 1025.
*
* The variable outerhash stores the nearest multiple of 8 that is lesser than
* the hash. When a flow hash of 20 arrives, the value of outerhash
* is 16. Since m_flowIndices[16] wasnt previously allotted, a new flow
* is 16. Since m_flowIndices[16] wasn't previously allotted, a new flow
* is created, and the tag corresponding to this queue is set to 20.
*/
@@ -557,19 +549,18 @@ class FqPieQueueDiscSetLinearProbing : public TestCase
public:
FqPieQueueDiscSetLinearProbing ();
virtual ~FqPieQueueDiscSetLinearProbing ();
private:
virtual void DoRun (void);
void AddPacket (Ptr<FqPieQueueDisc> queue, Ipv4Header hdr);
};
FqPieQueueDiscSetLinearProbing::FqPieQueueDiscSetLinearProbing ()
: TestCase ("Test credits and flows status")
{
}
: TestCase ("Test credits and flows status")
{}
FqPieQueueDiscSetLinearProbing::~FqPieQueueDiscSetLinearProbing ()
{
}
{}
void
FqPieQueueDiscSetLinearProbing::AddPacket (Ptr<FqPieQueueDisc> queue, Ipv4Header hdr)
@@ -651,7 +642,7 @@ FqPieQueueDiscSetLinearProbing::DoRun (void)
* This class tests L4S mode. This test is divided to sub test one without hash collisions and so ECT0 and ECT1 flows are
* classified into different flows.
* Sub Test 1
* 70 packets are enqueued into both the flows with the delay of 0.5ms between two enqueues, and dequeued with the delay of
* 70 packets are enqueued into both the flows with the delay of 0.5ms between two enqueues, and dequeued with the delay of
* 1ms between two dequeues.
* Sub Test 2
* 140(70 ECT0 + 70 ECT1) packets are enqueued such that ECT1 packets are enqueued at 0.5ms, 1.5ms, 2.5ms and so on, and ECT0 packets are
@@ -674,12 +665,10 @@ private:
FqPieQueueDiscL4sMode::FqPieQueueDiscL4sMode ()
: TestCase ("Test L4S mode")
{
}
{}
FqPieQueueDiscL4sMode::~FqPieQueueDiscL4sMode ()
{
}
{}
void
FqPieQueueDiscL4sMode::AddPacket (Ptr<FqPieQueueDisc> queue, Ipv4Header hdr, uint32_t nPkt)
@@ -728,9 +717,9 @@ FqPieQueueDiscL4sMode::DoRun (void)
// 2) With hash collisions
// Test case 1, Without hash collisions
Ptr<FqPieQueueDisc> queueDisc = CreateObjectWithAttributes<FqPieQueueDisc> ("MaxSize", StringValue ("10240p"), "UseEcn", BooleanValue (true),
"Perturbation", UintegerValue (0), "UseL4s", BooleanValue (true),
"CeThreshold", TimeValue (MilliSeconds (2)));
Ptr<FqPieQueueDisc> queueDisc = CreateObjectWithAttributes<FqPieQueueDisc> ("MaxSize", StringValue ("10240p"),
"UseEcn", BooleanValue (true), "Perturbation", UintegerValue (0),
"UseL4s", BooleanValue (true), "CeThreshold", TimeValue (MilliSeconds (2)));
queueDisc->SetQuantum (1514);
queueDisc->Initialize ();
@@ -756,16 +745,16 @@ FqPieQueueDiscL4sMode::DoRun (void)
DequeueWithDelay (queueDisc, delay, 140);
Simulator::Stop (Seconds (10.0));
Simulator::Run ();
Ptr<PieQueueDisc> q0 = queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetObject <PieQueueDisc> ();
Ptr<PieQueueDisc> q1 = queueDisc->GetQueueDiscClass (1)->GetQueueDisc ()->GetObject <PieQueueDisc> ();
NS_TEST_EXPECT_MSG_EQ (q0->GetStats ().GetNMarkedPackets (PieQueueDisc::CE_THRESHOLD_EXCEEDED_MARK), 66, "There should be 66 marked packets"
"4th packet is enqueued at 2ms and dequeued at 4ms hence the delay of 2ms which not greater than CE threshold"
"5th packet is enqueued at 2.5ms and dequeued at 5ms hence the delay of 2.5ms and subsequent packet also do have delay"
"greater than CE threshold so all the packets after 4th packet are marked");
"4th packet is enqueued at 2ms and dequeued at 4ms hence the delay of 2ms which not greater than CE threshold"
"5th packet is enqueued at 2.5ms and dequeued at 5ms hence the delay of 2.5ms and subsequent packet also do have delay"
"greater than CE threshold so all the packets after 4th packet are marked");
NS_TEST_EXPECT_MSG_EQ (q0->GetStats ().GetNDroppedPackets (PieQueueDisc::UNFORCED_DROP), 0, "Queue delay is less than max burst allowance so"
"There should not be any dropped packets");
"There should not be any dropped packets");
NS_TEST_EXPECT_MSG_EQ (q0->GetStats ().GetNMarkedPackets (PieQueueDisc::UNFORCED_MARK), 0, "There should not be any marked packets");
NS_TEST_EXPECT_MSG_EQ (q1->GetStats ().GetNMarkedPackets (PieQueueDisc::UNFORCED_MARK), 0, "There should not be marked packets.");
NS_TEST_EXPECT_MSG_EQ (q1->GetStats ().GetNDroppedPackets (PieQueueDisc::UNFORCED_DROP), 0, "There should not be any dropped packets");
@@ -773,9 +762,9 @@ FqPieQueueDiscL4sMode::DoRun (void)
Simulator::Destroy ();
// Test case 2, With hash collisions
queueDisc = CreateObjectWithAttributes<FqPieQueueDisc> ("MaxSize", StringValue ("10240p"), "UseEcn", BooleanValue (true),
"Perturbation", UintegerValue (0), "UseL4s", BooleanValue (true),
"CeThreshold", TimeValue (MilliSeconds (2)));
queueDisc = CreateObjectWithAttributes<FqPieQueueDisc> ("MaxSize", StringValue ("10240p"),
"UseEcn", BooleanValue (true), "Perturbation", UintegerValue (0),
"UseL4s", BooleanValue (true), "CeThreshold", TimeValue (MilliSeconds (2)));
queueDisc->SetQuantum (1514);
queueDisc->Initialize ();
@@ -803,11 +792,11 @@ FqPieQueueDiscL4sMode::DoRun (void)
q0 = queueDisc->GetQueueDiscClass (0)->GetQueueDisc ()->GetObject <PieQueueDisc> ();
NS_TEST_EXPECT_MSG_EQ (q0->GetStats ().GetNMarkedPackets (PieQueueDisc::CE_THRESHOLD_EXCEEDED_MARK), 68, "There should be 68 marked packets"
"2nd ECT1 packet is enqueued at 1.5ms and dequeued at 3ms hence the delay of 1.5ms which not greater than CE threshold"
"3rd packet is enqueued at 2.5ms and dequeued at 5ms hence the delay of 2.5ms and subsequent packet also do have delay"
"greater than CE threshold so all the packets after 2nd packet are marked");
"2nd ECT1 packet is enqueued at 1.5ms and dequeued at 3ms hence the delay of 1.5ms which not greater than CE threshold"
"3rd packet is enqueued at 2.5ms and dequeued at 5ms hence the delay of 2.5ms and subsequent packet also do have delay"
"greater than CE threshold so all the packets after 2nd packet are marked");
NS_TEST_EXPECT_MSG_EQ (q0->GetStats ().GetNDroppedPackets (PieQueueDisc::UNFORCED_DROP), 0, "Queue delay is less than max burst allowance so"
"There should not be any dropped packets");
"There should not be any dropped packets");
NS_TEST_EXPECT_MSG_EQ (q0->GetStats ().GetNMarkedPackets (PieQueueDisc::UNFORCED_MARK), 0, "There should not be any marked packets");
Simulator::Destroy ();

View File

@@ -2,61 +2,76 @@
.. highlight:: cpp
.. highlight:: bash
FqPIE queue disc
------------------
FQ-PIE queue disc
-----------------
This chapter describes the FqPIE ([Hoe16]_) queue disc implementation in |ns3|.
The FlowQueue-PIE (FQ-PIE) algorithm is similar to the FlowQueue part of FlowQueue-CoDel (FQ-CoDel) algorithm available in ns-3-dev/src/traffic-control/doc/fq-codel.rst.
The documentation for PIE is available in ns-3-dev/src/traffic-control/doc/pie.rst.
This chapter describes the FQ-PIE ([Ram19]_) queue disc implementation in |ns3|.
The FQ-PIE queue disc combines the Proportional Integral Controller Enhanced
(PIE) AQM algorithm with the FlowQueue scheduler that is part of FQ-CoDel
(also available in |ns3|). FQ-PIE was introduced to Linux kernel version 5.6.
Model Description
*****************
The source code for the FqPIE queue disc is located in the directory
The source code for the ``FqPieQueueDisc`` is located in the directory
``src/traffic-control/model`` and consists of 2 files `fq-pie-queue-disc.h`
and `fq-pie-queue-disc.cc` defining a FqPieQueueDisc class and a helper
FqPieFlow class. The code was ported to |ns3| based on Linux kernel code
implemented by Mohit P. Tahiliani.
The Model Description is similar to the FqCoDel documentation mentioned above.
This model calculates drop probability independently in each flow queue.
One difficulty, as pointed out by [CableLabs14]_, is that PIE calculates
drop probability based on the departure rate of a (flow) queue, which may
be more highly variable than the aggregate queue. An alternative, which
CableLabs has called SFQ-PIE, is to calculate an overall drop probability
for the entire queue structure, and then scale this drop probability based
on the ratio of the queue depth of each flow queue compared with the depth
of the current largest queue. This ns-3 model does not implement the
SFQ-PIE variant described by CableLabs.
References
==========
.. [CAK16] https://github.com/torvalds/linux/blob/master/net/sched/sch_fq_pie.c , Implementation of FqPIE in Linux
.. [PIE] https://ieeexplore.ieee.org/document/9000684
.. [Ram19] G. Ramakrishnan, M. Bhasi, V. Saicharan, L. Monis, S. D. Patil and M. P. Tahiliani, "FQ-PIE Queue Discipline in the Linux Kernel: Design, Implementation and Challenges," 2019 IEEE 44th LCN Symposium on Emerging Topics in Networking (LCN Symposium), Osnabrueck, Germany, 2019, pp. 117-124,
.. [CableLabs14] G. White, Active Queue Management in DOCSIS 3.X Cable Modems, CableLabs white paper, May 2014.
Attributes
==========
The key attributes that the FqPieQueue class holds include the following:
The key attributes that the FqPieQueue class holds include the following.
First, there are PIE-specific attributes that are copied into the individual
PIE flow queues:
Most of the key attributes are similar to the FqCoDel implementation mentioned above.
Some differences are:
Absence of ``MinBytes``, ``Interval`` and ``Target`` parameter.
Some extra parameters are
* ``UseEcn:`` Whether to use ECN marking
* ``MarkEcnThreshold:`` ECN marking threshold (RFC 8033 suggests 0.1 (i.e., 10%) default).
* ``MeanPktSize:`` Average of packet size.
* ``A:`` Decrement value of drop probability. Default value is 1./4096 .
* ``B:`` The Threshold after which Blue is enabled. Default value is 400ms.
* ``UseL4s:`` Whether to use L4S (only mark ECT1 packets at CE threshold)
* ``MeanPktSize:`` Constant used to roughly convert bytes to packets
* ``A:`` Alpha value in PIE algorithm drop probability calculation
* ``B:`` Beta value in PIE algorithm drop probability calculation
* ``Tupdate:`` Time period to calculate drop probability
* ``Supdate:`` Start time of the update timer
* ``DequeueThreshold:`` Minimum queue size in bytes before dequeue rate is measured
* ``QueueDelayReference:`` Desired queue delay
* ``MaxBurstAllowance:`` Current max burst allowance before random drop
* ``QueueDelayReference:`` AQM latency target
* ``MaxBurstAllowance:`` AQM max burst allowance before random drop
* ``UseDequeueRateEstimator:`` Enable/Disable usage of Dequeue Rate Estimator
* ``UseCapDropAdjustment:`` Enable/Disable Cap Drop Adjustment feature mentioned in RFC 8033
* ``UseDerandomization:`` Enable/Disable Derandomization feature mentioned in RFC 8033
Second, there are QueueDisc level, or FQ-specific attributes::
* ``MaxSize:`` Maximum number of packets in the queue disc
* ``Flows:`` Maximum number of flow queues
* ``DropBatchSize:`` Maximum number of packets dropped from the fat flow
* ``Perturbation:`` Salt value used as hash input when classifying flows
* ``EnableSetAssociativeHash:`` Enable or disable set associative hash
* ``SetWays:`` Size of a set of queues in set associative hash
Examples
========
A typical usage pattern is to create a traffic control helper and to configure type
and attributes of queue disc and filters from the helper. For example, FqPIE
A typical usage pattern is to create a traffic control helper and to configure
the type and attributes of queue disc and filters from the helper. For example, FqPIE
can be configured as follows:
.. sourcecode:: cpp
@@ -80,4 +95,4 @@ The test suite can be run using the following commands::
or::
$ NS_LOG="FqPieQueueDisc" ./waf --run "test-runner --suite=fq-pie-queue-disc"
$ NS_LOG="FqPieQueueDisc" ./waf --run "test-runner --suite=fq-pie-queue-disc"

23
src/traffic-control/model/fq-pie-queue-disc.cc Executable file → Normal file
View File

@@ -1,6 +1,7 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2018 NITK Surathkal
* Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
* Copyright (c) 2018 NITK Surathkal (modified for FQ-PIE)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@ -15,10 +16,12 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Authors: Sumukha PK <sumukhapk46@gmail.com>
* Prajval M <26prajval98@gmail.com>
* Ishaan R D <ishaanrd6@gmail.com>
* Mohit P. Tahiliani <tahiliani@nitk.edu.in>
* Authors: Pasquale Imputato <p.imputato@gmail.com>
* Stefano Avallone <stefano.avallone@unina.it>
* Modified for FQ-PIE by: Sumukha PK <sumukhapk46@gmail.com>
* Prajval M <26prajval98@gmail.com>
* Ishaan R D <ishaanrd6@gmail.com>
* Mohit P. Tahiliani <tahiliani@nitk.edu.in>
*/
@@ -139,7 +142,7 @@ TypeId FqPieQueueDisc::GetTypeId (void)
"Average of packet size",
UintegerValue (1000),
MakeUintegerAccessor (&FqPieQueueDisc::m_meanPktSize),
MakeUintegerChecker<uint32_t> ())
MakeUintegerChecker<uint32_t> ())
.AddAttribute ("A",
"Value of alpha",
DoubleValue (0.125),
@@ -437,7 +440,8 @@ FqPieQueueDisc::DoDequeue (void)
{
NS_LOG_DEBUG ("Dequeued packet " << item->GetPacket ());
}
} while (item == 0);
}
while (item == 0);
flow->IncreaseDeficit (item->GetSize () * -1);
@@ -490,7 +494,7 @@ FqPieQueueDisc::CheckConfig (void)
// If UseL4S attribute is enabled then CE threshold must be set.
if (m_useL4s)
{
NS_ABORT_MSG_IF (m_ceThreshold == Time::Max(), "CE threshold not set");
NS_ABORT_MSG_IF (m_ceThreshold == Time::Max (), "CE threshold not set");
if (m_useEcn == false)
{
NS_LOG_WARN ("Enabling ECN as L4S mode is enabled");
@@ -552,7 +556,8 @@ FqPieQueueDisc::FqPieDrop (void)
item = qd->GetInternalQueue (0)->Dequeue ();
DropAfterDequeue (item, OVERLIMIT_DROP);
len += item->GetSize ();
} while (++count < m_dropBatchSize && len < threshold);
}
while (++count < m_dropBatchSize && len < threshold);
return index;
}

57
src/traffic-control/model/fq-pie-queue-disc.h Executable file → Normal file
View File

@@ -1,6 +1,7 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2018 NITK Surathkal
* Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
* Copyright (c) 2018 NITK Surathkal (modified for FQ-PIE)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@ -15,10 +16,12 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Authors: Sumukha PK <sumukhapk46@gmail.com>
* Prajval M <26prajval98@gmail.com>
* Ishaan R D <ishaanrd6@gmail.com>
* Mohit P. Tahiliani <tahiliani@nitk.edu.in>
* Authors: Pasquale Imputato <p.imputato@gmail.com>
* Stefano Avallone <stefano.avallone@unina.it>
* Modified for FQ-PIE by: Sumukha PK <sumukhapk46@gmail.com>
* Prajval M <26prajval98@gmail.com>
* Ishaan R D <ishaanrd6@gmail.com>
* Mohit P. Tahiliani <tahiliani@nitk.edu.in>
*/
#ifndef FQ_PIE_QUEUE_DISC
@@ -37,7 +40,8 @@ namespace ns3 {
* \brief A flow queue used by the FqPie queue disc
*/
class FqPieFlow : public QueueDiscClass {
class FqPieFlow : public QueueDiscClass
{
public:
/**
* \brief Get the type ID.
@@ -56,11 +60,11 @@ public:
* \brief Used to determine the status of this flow queue
*/
enum FlowStatus
{
INACTIVE,
NEW_FLOW,
OLD_FLOW
};
{
INACTIVE,
NEW_FLOW,
OLD_FLOW
};
/**
* \brief Set the deficit for this flow
@@ -111,7 +115,8 @@ private:
* \brief A FqPie packet queue disc
*/
class FqPieQueueDisc : public QueueDisc {
class FqPieQueueDisc : public QueueDisc
{
public:
/**
* \brief Get the type ID.
@@ -125,19 +130,19 @@ public:
virtual ~FqPieQueueDisc ();
/**
* \brief Set the quantum value.
*
* \param quantum The number of bytes each queue gets to dequeue on each round of the scheduling algorithm
*/
void SetQuantum (uint32_t quantum);
/**
* \brief Set the quantum value.
*
* \param quantum The number of bytes each queue gets to dequeue on each round of the scheduling algorithm
*/
void SetQuantum (uint32_t quantum);
/**
* \brief Get the quantum value.
*
* \returns The number of bytes each queue gets to dequeue on each round of the scheduling algorithm
*/
uint32_t GetQuantum (void) const;
/**
* \brief Get the quantum value.
*
* \returns The number of bytes each queue gets to dequeue on each round of the scheduling algorithm
*/
uint32_t GetQuantum (void) const;
// Reasons for dropping packets
static constexpr const char* UNCLASSIFIED_DROP = "Unclassified drop"; //!< No packet filter able to classify packet
@@ -178,7 +183,7 @@ private:
double m_b; //!< Parameter to pie controller
uint32_t m_dqThreshold; //!< Minimum queue size in bytes before dequeue rate is measured
bool m_useDqRateEstimator; //!< Enable/Disable usage of dequeue rate estimator for queue delay calculation
bool m_isCapDropAdjustment;//!< Enable/Disable Cap Drop Adjustment feature mentioned in RFC 8033
bool m_isCapDropAdjustment; //!< Enable/Disable Cap Drop Adjustment feature mentioned in RFC 8033
bool m_useDerandomization; //!< Enable Derandomization feature mentioned in RFC 8033
// Fq parameters
@@ -201,4 +206,4 @@ private:
} // namespace ns3
#endif /* FQ_PIE_QUEUE_DISC */
#endif /* FQ_PIE_QUEUE_DISC */