satellite-geo-feeder-phy.cc
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 
23 
24 #include "satellite-address-tag.h"
26 #include "satellite-channel.h"
27 #include "satellite-mac.h"
28 #include "satellite-phy-rx.h"
29 #include "satellite-phy-tx.h"
31 #include "satellite-time-tag.h"
33 #include "satellite-utils.h"
34 
35 #include <ns3/double.h>
36 #include <ns3/enum.h>
37 #include <ns3/log.h>
38 #include <ns3/pointer.h>
39 #include <ns3/simulator.h>
40 #include <ns3/uinteger.h>
41 
42 #include <limits>
43 
44 NS_LOG_COMPONENT_DEFINE("SatGeoFeederPhy");
45 
46 namespace ns3
47 {
48 
49 NS_OBJECT_ENSURE_REGISTERED(SatGeoFeederPhy);
50 
51 TypeId
53 {
54  static TypeId tid =
55  TypeId("ns3::SatGeoFeederPhy")
56  .SetParent<SatPhy>()
57  .AddConstructor<SatGeoFeederPhy>()
58  .AddAttribute("PhyRx",
59  "The PhyRx layer attached to this phy.",
60  PointerValue(),
61  MakePointerAccessor(&SatPhy::GetPhyRx, &SatPhy::SetPhyRx),
62  MakePointerChecker<SatPhyRx>())
63  .AddAttribute("PhyTx",
64  "The PhyTx layer attached to this phy.",
65  PointerValue(),
66  MakePointerAccessor(&SatPhy::GetPhyTx, &SatPhy::SetPhyTx),
67  MakePointerChecker<SatPhyTx>())
68  .AddAttribute("RxTemperatureDbk",
69  "RX noise temperature in Geo Feeder in dBK.",
70  DoubleValue(28.4),
71  MakeDoubleAccessor(&SatPhy::GetRxNoiseTemperatureDbk,
73  MakeDoubleChecker<double>())
74  .AddAttribute(
75  "RxMaxAntennaGainDb",
76  "Maximum RX gain in dB",
77  DoubleValue(54.00),
79  MakeDoubleChecker<double_t>())
80  .AddAttribute(
81  "TxMaxAntennaGainDb",
82  "Maximum TX gain in dB",
83  DoubleValue(54.00),
85  MakeDoubleChecker<double_t>())
86  .AddAttribute("TxMaxPowerDbw",
87  "Maximum TX power in dB",
88  DoubleValue(-4.38),
90  MakeDoubleChecker<double>())
91  .AddAttribute(
92  "TxOutputLossDb",
93  "TX Output loss in dB",
94  DoubleValue(1.75),
96  MakeDoubleChecker<double>())
97  .AddAttribute(
98  "TxPointingLossDb",
99  "TX Pointing loss in dB",
100  DoubleValue(0.00),
102  MakeDoubleChecker<double>())
103  .AddAttribute("TxOboLossDb",
104  "TX OBO loss in dB",
105  DoubleValue(4.00),
106  MakeDoubleAccessor(&SatPhy::GetTxOboLossDb, &SatPhy::SetTxOboLossDb),
107  MakeDoubleChecker<double>())
108  .AddAttribute(
109  "TxAntennaLossDb",
110  "TX Antenna loss in dB",
111  DoubleValue(1.00),
113  MakeDoubleChecker<double>())
114  .AddAttribute(
115  "RxAntennaLossDb",
116  "RX Antenna loss in dB",
117  DoubleValue(1.00),
119  MakeDoubleChecker<double>())
120  .AddAttribute("DefaultFadingValue",
121  "Default value for fading",
122  DoubleValue(1.00),
123  MakeDoubleAccessor(&SatPhy::GetDefaultFading, &SatPhy::SetDefaultFading),
124  MakeDoubleChecker<double_t>())
125  .AddAttribute("ExtNoisePowerDensityDbwhz",
126  "Other system interference, C over I in dB.",
127  DoubleValue(-207.0),
129  MakeDoubleChecker<double>())
130  .AddAttribute("ImIfCOverIDb",
131  "Adjacent channel interference, C over I in dB.",
132  DoubleValue(27.0),
133  MakeDoubleAccessor(&SatGeoFeederPhy::m_imInterferenceCOverIDb),
134  MakeDoubleChecker<double>())
135  .AddAttribute("FixedAmplificationGainDb",
136  "Fixed amplification gain used in RTN link at the satellite.",
137  DoubleValue(82.0),
138  MakeDoubleAccessor(&SatGeoFeederPhy::m_fixedAmplificationGainDb),
139  MakeDoubleChecker<double>())
140  .AddAttribute("QueueSize",
141  "Maximum size of FIFO m_queue in bytes.",
142  UintegerValue(100000),
143  MakeUintegerAccessor(&SatGeoFeederPhy::m_queueSizeMax),
144  MakeUintegerChecker<uint32_t>())
145  .AddTraceSource("QueueSizeBytes",
146  "Send number of bytes in FIFO return feeder queue",
147  MakeTraceSourceAccessor(&SatGeoFeederPhy::m_queueSizeBytesTrace),
148  "ns3::SatStatsRtnFeederQueueHelper::QueueSizeCallback")
149  .AddTraceSource("QueueSizePackets",
150  "Send number of packets in FIFO return feeder queue",
151  MakeTraceSourceAccessor(&SatGeoFeederPhy::m_queueSizePacketsTrace),
152  "ns3::SatStatsRtnFeederQueueHelper::QueueSizeCallback");
153  return tid;
154 }
155 
156 TypeId
158 {
159  NS_LOG_FUNCTION(this);
160 
161  return GetTypeId();
162 }
163 
165  : m_extNoisePowerDensityDbwHz(-207.0),
166  m_imInterferenceCOverIDb(27.0),
167  m_imInterferenceCOverI(SatUtils::DbToLinear(m_imInterferenceCOverIDb)),
168  m_fixedAmplificationGainDb(82.0),
169  m_queueSizeBytes(0),
170  m_queueSizePackets(0)
171 {
172  NS_LOG_FUNCTION(this);
173  NS_FATAL_ERROR("SatGeoFeederPhy default constructor is not allowed to use");
174 }
175 
177  Ptr<SatLinkResults> linkResults,
178  SatPhyRxCarrierConf::RxCarrierCreateParams_s parameters,
179  Ptr<SatSuperframeConf> superFrameConf,
180  SatEnums::RegenerationMode_t forwardLinkRegenerationMode,
181  SatEnums::RegenerationMode_t returnLinkRegenerationMode)
182  : SatPhy(params)
183 {
184  NS_LOG_FUNCTION(this);
185 
186  m_forwardLinkRegenerationMode = forwardLinkRegenerationMode;
187  m_returnLinkRegenerationMode = returnLinkRegenerationMode;
188  m_isSending = false;
189  m_queueSizeBytes = 0;
190  m_queueSizePackets = 0;
191 
193  {
194  m_queue = std::queue<std::tuple<Ptr<SatSignalParameters>, uint32_t, uint32_t>>();
195  }
196 
198  {
199  SatPhy::GetPhyTx()->SetAttribute("TxMode", EnumValue(SatPhyTx::TRANSPARENT));
200  }
201  else
202  {
203  SatPhy::GetPhyTx()->SetAttribute("TxMode", EnumValue(SatPhyTx::NORMAL));
204  }
205 
206  ObjectBase::ConstructSelf(AttributeConstructionList());
207 
209 
210  // Configure the SatPhyRxCarrier instances
211  // Note, that in GEO satellite, there is no need for error modeling.
212 
213  parameters.m_rxTemperatureK = SatUtils::DbToLinear(SatPhy::GetRxNoiseTemperatureDbk());
214  parameters.m_extNoiseDensityWhz = SatUtils::DbToLinear(m_extNoisePowerDensityDbwHz);
215  parameters.m_aciIfWrtNoiseFactor = 0.0;
216  if (forwardLinkRegenerationMode == SatEnums::TRANSPARENT)
217  {
218  parameters.m_rxMode = SatPhyRxCarrierConf::TRANSPARENT;
219  }
220  else
221  {
222  parameters.m_rxMode = SatPhyRxCarrierConf::NORMAL;
223  }
224  parameters.m_linkRegenerationMode = forwardLinkRegenerationMode;
225  parameters.m_chType = SatEnums::FORWARD_FEEDER_CH;
226 
227  Ptr<SatPhyRxCarrierConf> carrierConf = CreateObject<SatPhyRxCarrierConf>(parameters);
228 
229  if (linkResults)
230  {
231  carrierConf->SetLinkResults(linkResults);
232  }
233 
234  carrierConf->SetAdditionalInterferenceCb(
235  MakeCallback(&SatGeoFeederPhy::GetAdditionalInterference, this));
236 
237  SatPhy::ConfigureRxCarriers(carrierConf, superFrameConf);
238 }
239 
241 {
242  NS_LOG_FUNCTION(this);
243 }
244 
245 void
247 {
248  NS_LOG_FUNCTION(this);
249  Object::DoDispose();
250 }
251 
252 void
254 {
255  NS_LOG_FUNCTION(this);
256  Object::DoInitialize();
257 }
258 
259 void
260 SatGeoFeederPhy::SendPduWithParams(Ptr<SatSignalParameters> txParams)
261 {
262  NS_LOG_FUNCTION(this << txParams);
263  NS_LOG_INFO(this << " sending a packet with carrierId: " << txParams->m_carrierId
264  << " duration: " << txParams->m_duration);
265 
267  {
268  SetTimeTag(txParams->m_packetsInBurst);
269  }
270 
271  // copy as sender own PhyTx object (at satellite) to ensure right distance calculation
272  // and antenna gain getting at receiver (UT or GW)
273  // copy on tx power too.
274 
275  txParams->m_phyTx = m_phyTx;
276 
286  {
287  txParams->m_txPower_W =
288  txParams->m_rxPower_W * SatUtils::DbToLinear(m_fixedAmplificationGainDb);
289  }
290  else
291  {
292  txParams->m_txPower_W = m_eirpWoGainW;
293  }
294 
295  NS_LOG_INFO("Amplified Tx power: " << SatUtils::LinearToDb(txParams->m_txPower_W));
296  NS_LOG_INFO("Statically configured tx power: " << SatUtils::LinearToDb(m_eirpWoGainW));
297 
299 
301  {
302  uint32_t nbBytes = 0;
303  for (Ptr<Packet> pkt : txParams->m_packetsInBurst)
304  {
305  nbBytes += pkt->GetSize();
306  }
307  uint32_t nbPackets = txParams->m_packetsInBurst.size();
308  if (m_queueSizeBytes + nbBytes < m_queueSizeMax)
309  {
310  event = SatEnums::PACKET_ENQUE;
311  m_queue.push(std::make_tuple(txParams, nbBytes, nbPackets));
312  m_queueSizeBytes += nbBytes;
313  m_queueSizePackets += nbPackets;
314 
316  GetE2ESourceAddress(txParams->m_packetsInBurst));
318  GetE2ESourceAddress(txParams->m_packetsInBurst));
319 
320  if (m_isSending == false)
321  {
322  SendFromQueue();
323  }
324  }
325  else
326  {
327  event = SatEnums::PACKET_DROP;
328  NS_LOG_INFO("Packet dropped because REGENERATION_PHY queue is full");
329  }
330  }
331  else
332  {
333  event = SatEnums::PACKET_SENT;
334  m_phyTx->StartTx(txParams);
335  }
336 
337  // Add packet trace entry:
338  m_packetTrace(Simulator::Now(),
339  event,
340  m_nodeInfo->GetNodeType(),
341  m_nodeInfo->GetNodeId(),
342  m_nodeInfo->GetMacAddress(),
345  SatUtils::GetPacketInfo(txParams->m_packetsInBurst));
346 }
347 
348 void
350 {
351  if (m_queue.empty())
352  {
353  NS_FATAL_ERROR("Trying to deque an empty queue");
354  }
355  m_isSending = true;
356  std::tuple<Ptr<SatSignalParameters>, uint32_t, uint32_t> element = m_queue.front();
357  m_queue.pop();
358 
359  Ptr<SatSignalParameters> txParams = std::get<0>(element);
360  m_queueSizeBytes -= std::get<1>(element);
361  m_queueSizePackets -= std::get<2>(element);
362 
363  m_queueSizeBytesTrace(m_queueSizeBytes, GetE2ESourceAddress(txParams->m_packetsInBurst));
364  m_queueSizePacketsTrace(m_queueSizePackets, GetE2ESourceAddress(txParams->m_packetsInBurst));
365 
366  // Add sent packet trace entry:
367  m_packetTrace(Simulator::Now(),
369  m_nodeInfo->GetNodeType(),
370  m_nodeInfo->GetNodeId(),
371  m_nodeInfo->GetMacAddress(),
374  SatUtils::GetPacketInfo(txParams->m_packetsInBurst));
375 
376  Simulator::Schedule(txParams->m_duration + NanoSeconds(1), &SatGeoFeederPhy::EndTx, this);
377 
378  m_phyTx->StartTx(txParams);
379 }
380 
381 void
383 {
384  m_isSending = false;
385  if (!m_queue.empty())
386  {
387  this->SendFromQueue();
388  }
389 }
390 
391 void
393 {
394  NS_LOG_FUNCTION(this);
395 
397  {
398  SatSignalParameters::PacketsInBurst_t::iterator it1;
399  for (it1 = packets.begin(); it1 != packets.end(); ++it1)
400  {
401  Address addr; // invalid address.
402 
403  SatAddressE2ETag addressE2ETag;
404  if ((*it1)->PeekPacketTag(addressE2ETag))
405  {
406  NS_LOG_DEBUG(this << " contains a SatMac tag");
407  addr = addressE2ETag.GetE2EDestAddress();
408  }
409 
410  m_rxTrace(*it1, addr);
411 
412  SatPhyLinkTimeTag linkTimeTag;
413  if ((*it1)->RemovePacketTag(linkTimeTag))
414  {
415  NS_LOG_DEBUG(this << " contains a SatPhyLinkTimeTag tag");
416  Time delay = Simulator::Now() - linkTimeTag.GetSenderLinkTimestamp();
417  m_rxLinkDelayTrace(delay, addr);
418  if (m_lastLinkDelay.IsZero() == false)
419  {
420  Time jitter = Abs(delay - m_lastLinkDelay);
421  m_rxLinkJitterTrace(jitter, addr);
422  }
423  m_lastLinkDelay = delay;
424  }
425 
426  } // end of `for (it1 = rxParams->m_packetsInBurst)`
427 
428  } // end of `if (m_isStatisticsTagsEnabled)`
429 }
430 
431 void
432 SatGeoFeederPhy::Receive(Ptr<SatSignalParameters> rxParams, bool phyError)
433 {
434  NS_LOG_FUNCTION(this << rxParams);
435 
437 
438  // Add packet trace entry:
439  m_packetTrace(Simulator::Now(),
440  event,
441  m_nodeInfo->GetNodeType(),
442  m_nodeInfo->GetNodeId(),
443  m_nodeInfo->GetMacAddress(),
446  SatUtils::GetPacketInfo(rxParams->m_packetsInBurst));
447 
448  if (phyError)
449  {
450  // If there was a PHY error, the packet is dropped here.
451  NS_LOG_INFO(this << " dropped " << rxParams->m_packetsInBurst.size()
452  << " packets because of PHY error.");
453  }
454  else
455  {
457  {
459  break;
462  rxParams->m_txInfo.packetType = SatEnums::PACKET_TYPE_DEDICATED_ACCESS;
463 
464  SatSignalParameters::PacketsInBurst_t::iterator it;
465  for (it = rxParams->m_packetsInBurst.begin(); it != rxParams->m_packetsInBurst.end();
466  it++)
467  {
468  SatUplinkInfoTag satUplinkInfoTag;
469  (*it)->RemovePacketTag(satUplinkInfoTag);
470  satUplinkInfoTag.SetSatId(rxParams->m_satId);
471  satUplinkInfoTag.SetBeamId(rxParams->m_beamId);
472  (*it)->AddPacketTag(satUplinkInfoTag);
473  }
474 
475  RxTraces(rxParams->m_packetsInBurst);
476 
477  ModcodTrace(rxParams);
478 
479  break;
480  }
481  default:
482  NS_FATAL_ERROR("Unknown regeneration mode");
483  }
484 
485  m_rxCallback(rxParams->m_packetsInBurst, rxParams);
486  }
487 }
488 
489 double
491 {
492  NS_LOG_FUNCTION(this);
493 
494  return m_imInterferenceCOverI;
495 }
496 
499 {
500  return SatEnums::LD_RETURN;
501 }
502 
505 {
506  return SatEnums::LD_FORWARD;
507 }
508 
509 Address
511 {
512  SatSignalParameters::PacketsInBurst_t::iterator it1;
513  for (it1 = packets.begin(); it1 != packets.end(); ++it1)
514  {
515  Address addr; // invalid address.
516  ByteTagIterator it2 = (*it1)->GetByteTagIterator();
517 
518  while (it2.HasNext())
519  {
520  ByteTagIterator::Item item = it2.Next();
521 
522  if (item.GetTypeId() == SatAddressTag::GetTypeId())
523  {
524  SatAddressTag addrTag;
525  item.GetTag(addrTag);
526  return addrTag.GetSourceAddress();
527  }
528  }
529  }
530  return Mac48Address();
531 }
532 
533 } // namespace ns3
This class implements a tag that carries the satellite MAC of GW and UT.
Mac48Address GetE2EDestAddress(void) const
Get E2E destination MAC address.
This class implements a tag that carries the MAC address of the sender of the packet.
static TypeId GetTypeId()
Inherited from ObjectBase base class.
Address GetSourceAddress() const
Get the source address.
SatLinkDir_t
Link direction used for packet tracing.
SatPacketEvent_t
Packet event used for packet tracing.
RegenerationMode_t
The regeneration mode used in satellites.
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.
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
void SetTxPointingLossDb(double lossDb)
Set the pointing loss of the transmitter in dB.
TracedCallback< Time, SatEnums::SatPacketEvent_t, SatEnums::SatNodeType_t, uint32_t, Mac48Address, SatEnums::SatLogLevel_t, SatEnums::SatLinkDir_t, std::string > m_packetTrace
Trace callback used for packet tracing:
void SetTimeTag(SatPhy::PacketContainer_t packets)
Set SatPhyTimeTag of packets.
void SetRxAntennaGainDb(double gainDb)
Set the maximum antenna gain of the receiver in dB.
void ConfigureRxCarriers(Ptr< SatPhyRxCarrierConf > carrierConf, Ptr< SatSuperframeConf > superFrameConf)
Configure Rx carriers.
virtual Ptr< SatPhyTx > GetPhyTx() const
Get the SatPhyTx pointer.
void SetTxOboLossDb(double lossDb)
Set the OBO loss of the transmitter in dB.
TracedCallback< const Time &, const Address & > m_rxLinkDelayTrace
Traced callback for all received packets, including link delay information and the address of the sen...
void SetDefaultFading(double fading)
Set the default fading of the PHY.
double GetTxOutputLossDb() const
Get the output loss of the transmitter in dB.
double GetTxAntennaGainDb() const
Get the maximum antenna gain of the transmitter in dB.
virtual Ptr< SatPhyRx > GetPhyRx() const
Get the SatPhyRx pointer.
void SetTxOutputLossDb(double lossDb)
Set the output loss of the transmitter in dB.
double GetTxPointingLossDb() const
Get the pointing loss of the transmitter in dB.
Ptr< SatNodeInfo > m_nodeInfo
Node info containing node related information, such as node type, node id and MAC address (of the Sat...
double GetDefaultFading() const
Get the default fading of the PHY.
double GetTxMaxPowerDbw() const
Get the maximum transmit power of the transmitter in dB.
double GetTxOboLossDb() const
Get the OBO loss of the transmitter in dB.
void SetTxMaxPowerDbw(double powerDb)
Set the maximum transmit power of the transmitter in dB.
TracedCallback< Ptr< const Packet >, const Address & > m_rxTrace
Traced callback for all received packets, including the address of the senders.
double GetRxAntennaGainDb() const
Get the maximum antenna gain of the receiver in dB.
double m_eirpWoGainW
Calculated EIRP without gain in W.
virtual void SetPhyTx(Ptr< SatPhyTx > phyTx)
Set the SatPhyTx module.
void SetRxAntennaLossDb(double lossDb)
Set the antenna loss of the receiver in dB.
void SetRxNoiseTemperatureDbk(double temperatureDbk)
Set the noise temperature of the receiver in dbK.
double GetRxNoiseTemperatureDbk() const
Get the noise temperature of the receiver in dbK.
double GetRxAntennaLossDb() const
Get the antenna loss of the receiver in dB.
Ptr< SatPhyTx > m_phyTx
Pointer to internal SatPhyTx instance.
void ModcodTrace(Ptr< SatSignalParameters > rxParams)
Invoke the RxLinkModcod trace source for each received packet.
void SetTxAntennaGainDb(double gainDb)
Set the maximum antenna gain of the transmitter in dB.
bool m_isStatisticsTagsEnabled
EnableStatisticsTags attribute.
Time m_lastLinkDelay
Last delay measurement for link.
SatSignalParameters::PacketsInBurst_t PacketContainer_t
Define PacketContainer in SatPhy.
Definition: satellite-phy.h:78
void SetTxAntennaLossDb(double lossDb)
Set the antenna loss of the transmitter in dB.
virtual void SetPhyRx(Ptr< SatPhyRx > phyRx)
Set the SatPhyRx module.
SatPhy::ReceiveCallback m_rxCallback
The upper layer package receive callback.
TracedCallback< const Time &, const Address & > m_rxLinkJitterTrace
Traced callback for all received packets, including link jitter information and the address of the se...
double GetTxAntennaLossDb() const
Get the antenna loss of the transmitter in dB.
SatUtils class is for general conversions used in satellite module.
static T DbToLinear(T db)
Converts decibels to linear.
static T LinearToDb(T linear)
Converts linear to decibels.
static std::string GetPacketInfo(const Ptr< const Packet > p)
Get packet information in std::string for printing purposes.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.
Creation parameters for base PHY object.