satellite-ut-llc.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: Jani Puttonen <jani.puttonen@magister.fi>
19  */
20 
21 #ifndef SATELLITE_UT_LLC_H
22 #define SATELLITE_UT_LLC_H
23 
24 #include "satellite-llc.h"
25 #include "satellite-queue.h"
26 
27 #include <ns3/ptr.h>
28 
29 namespace ns3
30 {
31 
32 class Packet;
33 class Address;
34 class Mac48Address;
35 class SatRequestManager;
36 class SatSchedulingObject;
37 class SatNodeInfo;
38 
45 class SatUtLlc : public SatLlc
46 {
47  public:
51  static TypeId GetTypeId(void);
52 
56  SatUtLlc();
57 
63  SatUtLlc(SatEnums::RegenerationMode_t forwardLinkRegenerationMode,
64  SatEnums::RegenerationMode_t returnLinkRegenerationMode);
65 
71  virtual ~SatUtLlc();
72 
84  virtual Ptr<Packet> NotifyTxOpportunity(uint32_t bytes,
85  Mac48Address utAddr,
86  uint8_t rcIndex,
87  uint32_t& bytesLeft,
88  uint32_t& nextMinTxO);
89 
98  virtual bool Enque(Ptr<Packet> packet, Address dest, uint8_t flowId);
99 
104  void SetRequestManager(Ptr<SatRequestManager> rm);
105 
110  Ptr<SatRequestManager> GetRequestManager() const;
111 
117 
126  virtual uint32_t GetNumSmallerPackets(uint32_t maxPacketSizeBytes) const;
127 
132  virtual void SetNodeInfo(Ptr<SatNodeInfo> nodeInfo);
133 
142  virtual uint32_t GetNBytesInQueue(Mac48Address utAddress) const;
143 
152  virtual uint32_t GetNPacketsInQueue(Mac48Address utAddress) const;
153 
158 
163  void SetGwAddress(Mac48Address address);
164 
165  protected:
169  void DoDispose();
170 
175  virtual void CreateEncap(Ptr<EncapKey> key);
176 
182  virtual void CreateEncap(Ptr<EncapKey> key, Ptr<SatQueue> providedQueue);
183 
188  virtual void CreateDecap(Ptr<EncapKey> key);
189 
196  virtual void GetSchedulingContexts(std::vector<Ptr<SatSchedulingObject>>& output) const;
197 
203 
209 
210  private:
214  Ptr<SatRequestManager> m_requestManager;
215 
222 };
223 
224 } // namespace ns3
225 
226 #endif /* SATELLITE_UT_LLC_H */
SatLinkDir_t
Link direction used for packet tracing.
RegenerationMode_t
The regeneration mode used in satellites.
SatLlc base class holds the UT specific SatBaseEncapsulator instances, which are responsible of fragm...
virtual uint32_t GetNBytesInQueue() const
Get the total number of (new) bytes in all encapsulators.
virtual uint32_t GetNPacketsInQueue() const
Get the total number of (new) packets in all encapsulators.
Callback< void, SatQueue::QueueEvent_t, uint8_t > QueueEventCallback
Callback to indicate queue related event.
SatUtLlc holds the UT implementation of LLC layer.
void SetQueueStatisticsCallbacks()
Set queue statistics callbacks for each UT packet queue.
virtual SatEnums::SatLinkDir_t GetSatLinkRxDir()
Get the link RX direction.
void SetMacQueueEventCallback(SatQueue::QueueEventCallback cb)
SatQueue::QueueEventCallback m_macQueueEventCb
Callback to send queue events to e.g.
Ptr< SatRequestManager > m_requestManager
Request manager handling the capacity requests.
void SetRequestManager(Ptr< SatRequestManager > rm)
Set a request manager for UT's LLC instance.
virtual void CreateDecap(Ptr< EncapKey > key)
Virtual method to create a new decapsulator 'on-a-need-basis' dynamically.
virtual ~SatUtLlc()
Destroy a SatUtLlc.
virtual uint32_t GetNumSmallerPackets(uint32_t maxPacketSizeBytes) const
Method checks how many packets are smaller or equal in size than the maximum packets size threshold s...
SatUtLlc()
Construct a SatUtLlc, should not be used.
void SetGwAddress(Mac48Address address)
Set the GW address.
virtual void SetNodeInfo(Ptr< SatNodeInfo > nodeInfo)
Set the node info.
virtual void CreateEncap(Ptr< EncapKey > key)
Virtual method to create a new encapsulator 'on-a-need-basis' dynamically.
Ptr< SatRequestManager > GetRequestManager() const
Getter for the request manager.
void DoDispose()
Dispose of SatUtLLc.
static TypeId GetTypeId(void)
Derived form Object.
virtual bool Enque(Ptr< Packet > packet, Address dest, uint8_t flowId)
Called from higher layer (SatNetDevice) to enque packet to LLC.
virtual SatEnums::SatLinkDir_t GetSatLinkTxDir()
Get the link TX direction.
virtual Ptr< Packet > NotifyTxOpportunity(uint32_t bytes, Mac48Address utAddr, uint8_t rcIndex, uint32_t &bytesLeft, uint32_t &nextMinTxO)
Called from lower layer (MAC) to inform a Tx opportunity of certain amount of bytes.
virtual void GetSchedulingContexts(std::vector< Ptr< SatSchedulingObject >> &output) const
Create and fill the scheduling objects based on LLC layer information.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.