satellite-bbframe-container.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2013 Magister Solutions Ltd
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  * Author: Sami Rantanen <sami.rantanen@magister.fi>
19  */
20 
21 #ifndef SATELLITE_BBFRAME_CONTAINER_H
22 #define SATELLITE_BBFRAME_CONTAINER_H
23 
24 #include "satellite-bbframe.h"
25 #include "satellite-enums.h"
26 
27 #include <ns3/simple-ref-count.h>
28 
29 #include <deque>
30 #include <vector>
31 
32 namespace ns3
33 {
34 
48 class SatBbFrameContainer : public Object
49 {
50  public:
55  static TypeId GetTypeId(void);
56 
61 
67  SatBbFrameContainer(std::vector<SatEnums::SatModcod_t>& modcodsInUse, Ptr<SatBbFrameConf> conf);
68 
72  virtual ~SatBbFrameContainer();
73 
81  bool IsEmpty(uint32_t priorityClass, SatEnums::SatModcod_t modcod);
82 
90  void AddData(uint32_t priorityClass, SatEnums::SatModcod_t modcod, Ptr<Packet> data);
91 
99  uint32_t GetBytesLeftInTailFrame(uint32_t priorityClass, SatEnums::SatModcod_t modcod);
100 
108  uint32_t GetMaxFramePayloadInBytes(uint32_t priorityClass, SatEnums::SatModcod_t modcod);
109 
117  SatEnums::SatModcod_t GetModcod(uint32_t priorityClass, double cno);
118 
123  Ptr<SatBbFrame> GetNextFrame();
124 
125  void MergeBbFrames(double carrierBandwidthInHz);
126 
131  Time GetTotalDuration() const;
132 
139  uint32_t GetFrameSymbols(SatEnums::SatModcod_t modcod);
140 
145  void SetMaxSymbolRate(uint32_t maxSymbolRate);
146 
151  uint32_t GetMaxSymbolRate();
152 
153  private:
154  typedef std::map<SatEnums::SatModcod_t, std::deque<Ptr<SatBbFrame>>> FrameContainer_t;
155 
156  std::deque<Ptr<SatBbFrame>> m_ctrlContainer;
159  Ptr<SatBbFrameConf> m_bbFrameConf;
161  uint32_t m_maxSymbolRate;
162 
168  TracedCallback<Ptr<SatBbFrame>, Ptr<SatBbFrame>> m_bbFrameMergeTrace;
169 
177  void CreateFrameToTail(uint32_t priorityClass, SatEnums::SatModcod_t modcod);
178 };
179 
180 } // namespace ns3
181 
182 #endif /* SATELLITE_BBFRAME_CONTAINER_H */
virtual ~SatBbFrameContainer()
Destructor.
static TypeId GetTypeId(void)
Get the type ID.
uint32_t GetMaxFramePayloadInBytes(uint32_t priorityClass, SatEnums::SatModcod_t modcod)
Get maximum payload bytes of a frame with the given priority class and MODCOD.
uint32_t GetBytesLeftInTailFrame(uint32_t priorityClass, SatEnums::SatModcod_t modcod)
Get bytes left in last frame of the queue with the given priority class and MODCOD.
void SetMaxSymbolRate(uint32_t maxSymbolRate)
Set the maximum symbol rate of this container, used for time-slicing.
uint32_t GetMaxSymbolRate()
Set the maximum symbol rate of this container, used for time-slicing.
Time GetTotalDuration() const
Get total transmission duration of the frames in container.
void MergeBbFrames(double carrierBandwidthInHz)
Ptr< SatBbFrame > GetNextFrame()
Get next frame from container to transmit.
TracedCallback< Ptr< SatBbFrame >, Ptr< SatBbFrame > > m_bbFrameMergeTrace
Trace for merged BB frames.
uint32_t GetFrameSymbols(SatEnums::SatModcod_t modcod)
Get the total number of symbols, incuding headers, when creating a new BBFrame.
bool IsEmpty(uint32_t priorityClass, SatEnums::SatModcod_t modcod)
Indicates if the container for a ModCod and priority is empty (no BBFrame).
std::map< SatEnums::SatModcod_t, std::deque< Ptr< SatBbFrame > > > FrameContainer_t
std::deque< Ptr< SatBbFrame > > m_ctrlContainer
void CreateFrameToTail(uint32_t priorityClass, SatEnums::SatModcod_t modcod)
Create short or normal frame according to MODCOD and member #m_bbFrameUsageMode.
void AddData(uint32_t priorityClass, SatEnums::SatModcod_t modcod, Ptr< Packet > data)
Add data according to given priority class and MODCOD to container.
SatEnums::SatBbFrameType_t m_defaultBbFrameType
SatBbFrameContainer()
Default constructor for SatBbFrameContainer not supported.
SatEnums::SatModcod_t GetModcod(uint32_t priorityClass, double cno)
Get maximum MODCOD with the given priority class and C/N0.
SatBbFrameType_t
BB frame type used in DVB-S2 FWD link.
SatModcod_t
Modulation scheme and coding rate for DVB-S2.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.