A Discrete-Event Network Simulator
API
prio-queue-disc.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Authors: Stefano Avallone <stavallo@unina.it>
19  */
20 
21 #ifndef PRIO_QUEUE_DISC_H
22 #define PRIO_QUEUE_DISC_H
23 
24 #include "ns3/queue-disc.h"
25 #include <array>
26 
27 namespace ns3 {
28 
29 typedef std::array<uint16_t, 16> Priomap;
30 
49 class PrioQueueDisc : public QueueDisc {
50 public:
55  static TypeId GetTypeId (void);
59  PrioQueueDisc ();
60 
61  virtual ~PrioQueueDisc();
62 
69  void SetBandForPriority (uint8_t prio, uint16_t band);
70 
77  uint16_t GetBandForPriority (uint8_t prio) const;
78 
79 private:
80  virtual bool DoEnqueue (Ptr<QueueDiscItem> item);
81  virtual Ptr<QueueDiscItem> DoDequeue (void);
82  virtual Ptr<const QueueDiscItem> DoPeek (void);
83  virtual bool CheckConfig (void);
84  virtual void InitializeParams (void);
85 
87 };
88 
97 std::ostream &operator << (std::ostream &os, const Priomap &priomap);
98 
107 std::istream &operator >> (std::istream &is, Priomap &priomap);
108 
110 
111 } // namespace ns3
112 
113 #endif /* PRIO_QUEUE_DISC_H */
std::istream & operator>>(std::istream &is, Angles &a)
initialize a struct Angles from input
Definition: angles.cc:48
static TypeId GetTypeId(void)
Get the type ID.
virtual bool DoEnqueue(Ptr< QueueDiscItem > item)
This function actually enqueues a packet into the queue disc.
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
std::array< uint16_t, 16 > Priomap
QueueDisc is an abstract base class providing the interface and implementing the operations common to...
Definition: queue-disc.h:182
virtual Ptr< const QueueDiscItem > DoPeek(void)
Return a copy of the next packet the queue disc will extract.
PrioQueueDisc()
PrioQueueDisc constructor.
void SetBandForPriority(uint8_t prio, uint16_t band)
Set the band (class) assigned to packets with specified priority.
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output
Definition: angles.cc:42
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual bool CheckConfig(void)
Check whether the current configuration is correct.
virtual void InitializeParams(void)
Initialize parameters (if any) before the first packet is enqueued.
uint16_t GetBandForPriority(uint8_t prio) const
Get the band (class) assigned to packets with specified priority.
Priomap m_prio2band
Priority to band mapping.
a unique identifier for an interface.
Definition: type-id.h:58
#define ATTRIBUTE_HELPER_HEADER(type)
Declare the attribute value, accessor and checkers for class type.
The Prio qdisc is a simple classful queueing discipline that contains an arbitrary number of classes ...
virtual Ptr< QueueDiscItem > DoDequeue(void)
This function actually extracts a packet from the queue disc.