satellite-geo-feeder-phy.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  * Bastien Tauran <bastien.tauran@viveris.fr>
20  */
21 
22 #ifndef SATELLITE_GEO_FEEDER_PHY_H
23 #define SATELLITE_GEO_FEEDER_PHY_H
24 
25 #include "satellite-frame-conf.h"
26 #include "satellite-phy.h"
28 
29 #include <ns3/address.h>
30 #include <ns3/nstime.h>
31 #include <ns3/object.h>
32 #include <ns3/packet.h>
33 #include <ns3/ptr.h>
34 
35 #include <queue>
36 #include <tuple>
37 
38 namespace ns3
39 {
40 
41 class SatPhyRxCarrier;
42 class SatPhyRxCarrierUplink;
43 class SatPhyRxCarrierPerSlot;
44 class SatPhyRxCarrierPerFrame;
45 class SatPhyRxCarrierPerWindow;
46 
53 class SatGeoFeederPhy : public SatPhy
54 {
55  public:
59  SatGeoFeederPhy(void);
60 
62  Ptr<SatLinkResults> linkResults,
63  SatPhyRxCarrierConf::RxCarrierCreateParams_s parameters,
64  Ptr<SatSuperframeConf> superFrameConf,
65  SatEnums::RegenerationMode_t forwardLinkRegenerationMode,
66  SatEnums::RegenerationMode_t returnLinkRegenerationMode);
67 
71  virtual ~SatGeoFeederPhy();
72 
76  static TypeId GetTypeId(void);
77  TypeId GetInstanceTypeId(void) const;
78  virtual void DoInitialize(void);
79 
83  virtual void DoDispose(void);
84 
89  virtual void SendPduWithParams(Ptr<SatSignalParameters> rxParams);
90 
100  virtual void Receive(Ptr<SatSignalParameters> rxParams, bool phyError);
101 
107  virtual double GetAdditionalInterference();
108 
114  typedef void (*QueueSizeCallback)(uint32_t size, const Address& from);
115 
116  protected:
121  virtual void RxTraces(SatPhy::PacketContainer_t packets);
122 
128 
134 
138  TracedCallback<uint32_t, const Address&> m_queueSizeBytesTrace;
139 
143  TracedCallback<uint32_t, const Address&> m_queueSizePacketsTrace;
144 
145  private:
149  void SendFromQueue();
150 
154  void EndTx();
155 
162 
167 
172 
177 
182 
187 
192 
197  std::queue<std::tuple<Ptr<SatSignalParameters>, uint32_t, uint32_t>> m_queue;
198 
203 
208 
212  uint32_t m_queueSizeMax;
213 
218 };
219 
220 } // namespace ns3
221 
222 #endif /* SATELLITE_GEO_FEEDER_PHY_H */
SatLinkDir_t
Link direction used for packet tracing.
RegenerationMode_t
The regeneration mode used in satellites.
The SatGeoFeederPhy models the feeder link physical layer of the satellite node.
virtual ~SatGeoFeederPhy()
Destructor for SatGeoFeederPhy.
uint32_t m_queueSizeMax
Maximum size of FIFO m_queue in bytes.
virtual double GetAdditionalInterference()
Get additional interference, used to compute final SINR at RX.
static TypeId GetTypeId(void)
inherited from Object
double m_imInterferenceCOverI
Intermodulation interference in linear.
virtual void DoDispose(void)
Dispose of this class instance.
virtual void SendPduWithParams(Ptr< SatSignalParameters > rxParams)
Send Pdu to the PHY tx module (for GEO satellite switch packet forwarding)
virtual void RxTraces(SatPhy::PacketContainer_t packets)
Invoke the Rx trace source for each received packet.
uint32_t m_queueSizeBytes
Size of FIFO queue in bytes.
SatEnums::RegenerationMode_t m_returnLinkRegenerationMode
Regeneration mode on return link.
SatGeoFeederPhy(void)
Default constructor.
std::queue< std::tuple< Ptr< SatSignalParameters >, uint32_t, uint32_t > > m_queue
Simple FIFO queue to avoid collisions on TX in case of REGENERATION_PHY.
virtual void Receive(Ptr< SatSignalParameters > rxParams, bool phyError)
Receives packets from lower layer.
double m_fixedAmplificationGainDb
Fixed amplification gain used in RTN link at the satellite.
virtual SatEnums::SatLinkDir_t GetSatLinkRxDir()
Get the link RX direction.
SatEnums::RegenerationMode_t m_forwardLinkRegenerationMode
Regeneration mode on forward link.
void SendFromQueue()
Send a packet from the queue.
bool m_isSending
Indicates if a packet is already being sent.
void(* QueueSizeCallback)(uint32_t size, const Address &from)
Callback signature for QueueSizeBytes and QueueSizePackets trace source.
virtual SatEnums::SatLinkDir_t GetSatLinkTxDir()
Get the link TX direction.
Address GetE2ESourceAddress(SatPhy::PacketContainer_t packets)
Get source address of packets.
virtual void DoInitialize(void)
Initialization of SatPhy.
TypeId GetInstanceTypeId(void) const
double m_imInterferenceCOverIDb
Configured Intermodulation interference in dB.
uint32_t m_queueSizePackets
Size of FIFO queue in packets.
void EndTx()
Notify a packet has finished being sent.
TracedCallback< uint32_t, const Address & > m_queueSizePacketsTrace
Traced callback to monitor RTN feeder queue size in packets.
double m_extNoisePowerDensityDbwHz
Configured external noise power.
TracedCallback< uint32_t, const Address & > m_queueSizeBytesTrace
Traced callback to monitor RTN feeder queue size in bytes.
The SatPhy models the basic physical layer of the satellite system.
Definition: satellite-phy.h:61
SatSignalParameters::PacketsInBurst_t PacketContainer_t
Define PacketContainer in SatPhy.
Definition: satellite-phy.h:78
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.
Creation parameters for base PHY object.