satellite-orbiter-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_ORBITER_FEEDER_PHY_H
23 #define SATELLITE_ORBITER_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 <stdint.h>
37 #include <tuple>
38 
39 namespace ns3
40 {
41 
42 class SatPhyRxCarrier;
43 class SatPhyRxCarrierUplink;
44 class SatPhyRxCarrierPerSlot;
45 class SatPhyRxCarrierPerFrame;
46 class SatPhyRxCarrierPerWindow;
47 
55 {
56  public:
60  SatOrbiterFeederPhy(void);
61 
63  Ptr<SatLinkResults> linkResults,
64  SatPhyRxCarrierConf::RxCarrierCreateParams_s parameters,
65  Ptr<SatSuperframeConf> superFrameConf);
66 
70  virtual ~SatOrbiterFeederPhy();
71 
75  static TypeId GetTypeId(void);
76  TypeId GetInstanceTypeId(void) const;
77  virtual void DoInitialize(void);
78 
82  virtual void DoDispose(void);
83 
88  virtual void SendPduWithParams(Ptr<SatSignalParameters> rxParams);
89 
99  virtual void Receive(Ptr<SatSignalParameters> rxParams, bool phyError);
100 
106  virtual double GetAdditionalInterference();
107 
113  typedef void (*QueueSizeCallback)(uint32_t size, const Address& from);
114 
115  protected:
120  virtual void RxTraces(SatPhy::PacketContainer_t packets);
121 
127 
133 
137  TracedCallback<uint32_t, const Address&> m_queueSizeBytesTrace;
138 
142  TracedCallback<uint32_t, const Address&> m_queueSizePacketsTrace;
143 
144  private:
148  void SendFromQueue();
149 
153  void EndTx();
154 
161 
166 
171 
176 
181 
186 
191 
196  std::queue<std::tuple<Ptr<SatSignalParameters>, uint32_t, uint32_t>> m_queue;
197 
202 
207 
211  uint32_t m_queueSizeMax;
212 
217 };
218 
219 } // namespace ns3
220 
221 #endif /* SATELLITE_ORBITER_FEEDER_PHY_H */
SatLinkDir_t
Link direction used for packet tracing.
RegenerationMode_t
The regeneration mode used in satellites.
The SatOrbiterFeederPhy models the feeder link physical layer of the satellite node.
virtual void DoInitialize(void)
Initialization of SatPhy.
virtual double GetAdditionalInterference()
Get additional interference, used to compute final SINR at RX.
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 ~SatOrbiterFeederPhy()
Destructor for SatOrbiterFeederPhy.
virtual void RxTraces(SatPhy::PacketContainer_t packets)
Invoke the Rx trace source for each received packet.
virtual SatEnums::SatLinkDir_t GetSatLinkTxDir()
Get the link TX direction.
double m_extNoisePowerDensityDbwHz
Configured external noise power.
static TypeId GetTypeId(void)
inherited from Object
double m_fixedAmplificationGainDb
Fixed amplification gain used in RTN link at the satellite.
virtual SatEnums::SatLinkDir_t GetSatLinkRxDir()
Get the link RX direction.
double m_imInterferenceCOverI
Intermodulation interference in linear.
TracedCallback< uint32_t, const Address & > m_queueSizeBytesTrace
Traced callback to monitor RTN feeder queue size in bytes.
TracedCallback< uint32_t, const Address & > m_queueSizePacketsTrace
Traced callback to monitor RTN feeder queue size in packets.
Address GetE2ESourceAddress(SatPhy::PacketContainer_t packets)
Get source address of packets.
bool m_isSending
Indicates if a packet is already being sent.
void SendFromQueue()
Send a packet from the queue.
virtual void Receive(Ptr< SatSignalParameters > rxParams, bool phyError)
Receives packets from lower layer.
uint32_t m_queueSizeBytes
Size of FIFO queue in bytes.
virtual void SendPduWithParams(Ptr< SatSignalParameters > rxParams)
Send Pdu to the PHY tx module (for satellite switch packet forwarding)
SatEnums::RegenerationMode_t m_forwardLinkRegenerationMode
Regeneration mode on forward link.
double m_imInterferenceCOverIDb
Configured Intermodulation interference in dB.
uint32_t m_queueSizePackets
Size of FIFO queue in packets.
uint32_t m_queueSizeMax
Maximum size of FIFO m_queue in bytes.
void(* QueueSizeCallback)(uint32_t size, const Address &from)
Callback signature for QueueSizeBytes and QueueSizePackets trace source.
virtual void DoDispose(void)
Dispose of this class instance.
SatEnums::RegenerationMode_t m_returnLinkRegenerationMode
Regeneration mode on return link.
SatOrbiterFeederPhy(void)
Default constructor.
void EndTx()
Notify a packet has finished being sent.
The SatPhy models the basic physical layer of the satellite system.
Definition: satellite-phy.h:62
SatSignalParameters::PacketsInBurst_t PacketContainer_t
Define PacketContainer in SatPhy.
Definition: satellite-phy.h:79
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.
Creation parameters for base PHY object.