satellite-orbiter-user-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-tag.h"
28 #include "satellite-mac.h"
29 #include "satellite-phy-rx.h"
30 #include "satellite-phy-tx.h"
32 #include "satellite-time-tag.h"
33 #include "satellite-topology.h"
35 #include "satellite-utils.h"
36 
37 #include <ns3/double.h>
38 #include <ns3/enum.h>
39 #include <ns3/log.h>
40 #include <ns3/pointer.h>
41 #include <ns3/simulator.h>
42 #include <ns3/singleton.h>
43 #include <ns3/uinteger.h>
44 
45 #include <limits>
46 #include <queue>
47 #include <tuple>
48 
49 NS_LOG_COMPONENT_DEFINE("SatOrbiterUserPhy");
50 
51 namespace ns3
52 {
53 
54 NS_OBJECT_ENSURE_REGISTERED(SatOrbiterUserPhy);
55 
56 TypeId
58 {
59  static TypeId tid =
60  TypeId("ns3::SatOrbiterUserPhy")
61  .SetParent<SatPhy>()
62  .AddConstructor<SatOrbiterUserPhy>()
63  .AddAttribute("PhyRx",
64  "The PhyRx layer attached to this phy.",
65  PointerValue(),
66  MakePointerAccessor(&SatPhy::GetPhyRx, &SatPhy::SetPhyRx),
67  MakePointerChecker<SatPhyRx>())
68  .AddAttribute("PhyTx",
69  "The PhyTx layer attached to this phy.",
70  PointerValue(),
71  MakePointerAccessor(&SatPhy::GetPhyTx, &SatPhy::SetPhyTx),
72  MakePointerChecker<SatPhyTx>())
73  .AddAttribute("RxTemperatureDbk",
74  "RX noise temperature in orbiter User in dBK.",
75  DoubleValue(28.4),
76  MakeDoubleAccessor(&SatPhy::GetRxNoiseTemperatureDbk,
78  MakeDoubleChecker<double>())
79  .AddAttribute(
80  "RxMaxAntennaGainDb",
81  "Maximum RX antenna gain in Db",
82  DoubleValue(54.00),
84  MakeDoubleChecker<double_t>())
85  .AddAttribute(
86  "TxMaxAntennaGainDb",
87  "Maximum TX gain in dB",
88  DoubleValue(54.00),
90  MakeDoubleChecker<double_t>())
91  .AddAttribute("TxMaxPowerDbw",
92  "Maximum TX power in dB",
93  DoubleValue(15.00),
95  MakeDoubleChecker<double>())
96  .AddAttribute(
97  "TxOutputLossDb",
98  "TX Output loss in dB",
99  DoubleValue(2.85),
101  MakeDoubleChecker<double>())
102  .AddAttribute(
103  "TxPointingLossDb",
104  "TX Pointing loss in dB",
105  DoubleValue(0.00),
107  MakeDoubleChecker<double>())
108  .AddAttribute("TxOboLossDb",
109  "TX OBO loss in dB",
110  DoubleValue(0.00),
111  MakeDoubleAccessor(&SatPhy::GetTxOboLossDb, &SatPhy::SetTxOboLossDb),
112  MakeDoubleChecker<double>())
113  .AddAttribute(
114  "TxAntennaLossDb",
115  "TX Antenna loss in dB",
116  DoubleValue(1.00),
118  MakeDoubleChecker<double>())
119  .AddAttribute(
120  "RxAntennaLossDb",
121  "RX Antenna loss in dB",
122  DoubleValue(1.00),
124  MakeDoubleChecker<double>())
125  .AddAttribute("DefaultFadingValue",
126  "Default value for fading",
127  DoubleValue(1.00),
128  MakeDoubleAccessor(&SatPhy::GetDefaultFading, &SatPhy::SetDefaultFading),
129  MakeDoubleChecker<double_t>())
130  .AddAttribute("OtherSysIfCOverIDb",
131  "Other system interference, C over I in dB.",
132  DoubleValue(27.5),
134  MakeDoubleChecker<double>())
135  .AddAttribute("AciIfCOverIDb",
136  "Adjacent channel interference, C over I in dB.",
137  DoubleValue(17.0),
139  MakeDoubleChecker<double>())
140  .AddAttribute("QueueSize",
141  "Maximum size of FIFO m_queue in bytes.",
142  UintegerValue(100000),
143  MakeUintegerAccessor(&SatOrbiterUserPhy::m_queueSizeMax),
144  MakeUintegerChecker<uint32_t>())
145  .AddTraceSource("QueueSizeBytes",
146  "Send number of bytes in FIFO return feeder queue",
147  MakeTraceSourceAccessor(&SatOrbiterUserPhy::m_queueSizeBytesTrace),
148  "ns3::SatStatsRtnFeederQueueHelper::QueueSizeCallback")
149  .AddTraceSource("QueueSizePackets",
150  "Send number of packets in FIFO return feeder queue",
151  MakeTraceSourceAccessor(&SatOrbiterUserPhy::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_aciInterferenceCOverIDb(17.0),
166  m_otherSysInterferenceCOverIDb(27.5),
167  m_aciInterferenceCOverI(SatUtils::DbToLinear(m_aciInterferenceCOverIDb)),
168  m_otherSysInterferenceCOverI(SatUtils::DbToLinear(m_otherSysInterferenceCOverIDb)),
169  m_queueSizeBytes(0),
170  m_queueSizePackets(0)
171 {
172  NS_LOG_FUNCTION(this);
173  NS_FATAL_ERROR("SatOrbiterUserPhy default constructor is not allowed to use");
174 }
175 
177  Ptr<SatLinkResults> linkResults,
178  SatPhyRxCarrierConf::RxCarrierCreateParams_s parameters,
179  Ptr<SatSuperframeConf> superFrameConf)
180  : SatPhy(params),
181  m_queueSizeBytes(0),
182  m_queueSizePackets(0)
183 {
184  NS_LOG_FUNCTION(this);
185 
186  m_forwardLinkRegenerationMode = Singleton<SatTopology>::Get()->GetForwardLinkRegenerationMode();
187  m_returnLinkRegenerationMode = Singleton<SatTopology>::Get()->GetReturnLinkRegenerationMode();
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 
210 
211  parameters.m_rxTemperatureK = SatUtils::DbToLinear(SatPhy::GetRxNoiseTemperatureDbk());
212  parameters.m_aciIfWrtNoiseFactor = 0.0;
213  parameters.m_extNoiseDensityWhz = 0.0;
215  {
216  parameters.m_rxMode = SatPhyRxCarrierConf::TRANSPARENT;
217  }
218  else
219  {
220  parameters.m_rxMode = SatPhyRxCarrierConf::NORMAL;
221  }
222  parameters.m_linkRegenerationMode = m_returnLinkRegenerationMode;
223  parameters.m_chType = SatEnums::RETURN_USER_CH;
224 
225  Ptr<SatPhyRxCarrierConf> carrierConf = CreateObject<SatPhyRxCarrierConf>(parameters);
226 
227  if (linkResults)
228  {
229  carrierConf->SetLinkResults(linkResults);
230  }
231 
232  carrierConf->SetAdditionalInterferenceCb(
233  MakeCallback(&SatOrbiterUserPhy::GetAdditionalInterference, this));
234 
235  SatPhy::ConfigureRxCarriers(carrierConf, superFrameConf);
236 }
237 
239 {
240  NS_LOG_FUNCTION(this);
241 }
242 
243 void
245 {
246  NS_LOG_FUNCTION(this);
247  Object::DoDispose();
248 }
249 
250 void
252 {
253  NS_LOG_FUNCTION(this);
254  Object::DoInitialize();
255 }
256 
257 void
258 SatOrbiterUserPhy::SendPduWithParams(Ptr<SatSignalParameters> txParams)
259 {
260  NS_LOG_FUNCTION(this << txParams);
261  NS_LOG_INFO(this << " sending a packet with carrierId: " << txParams->m_carrierId
262  << " duration: " << txParams->m_duration);
263 
265  {
266  SetTimeTag(txParams->m_packetsInBurst);
267  }
268 
269  // copy as sender own PhyTx object (at satellite) to ensure right distance calculation
270  // and antenna gain getting at receiver (UT or GW)
271  // copy on tx power too.
272 
273  txParams->m_phyTx = m_phyTx;
274  txParams->m_txPower_W = m_eirpWoGainW;
275 
277 
279  {
280  uint32_t nbBytes = 0;
281  for (Ptr<Packet> pkt : txParams->m_packetsInBurst)
282  {
283  nbBytes += pkt->GetSize();
284  }
285  uint32_t nbPackets = txParams->m_packetsInBurst.size();
286  if (m_queueSizeBytes + nbBytes < m_queueSizeMax)
287  {
288  event = SatEnums::PACKET_ENQUE;
289  m_queue.push(std::make_tuple(txParams, nbBytes, nbPackets));
290  m_queueSizeBytes += nbBytes;
291  m_queueSizePackets += nbPackets;
292 
294  GetE2EDestinationAddress(txParams->m_packetsInBurst));
296  GetE2EDestinationAddress(txParams->m_packetsInBurst));
297 
298  if (m_isSending == false)
299  {
300  SendFromQueue();
301  }
302  }
303  else
304  {
305  event = SatEnums::PACKET_DROP;
306  NS_LOG_INFO("Packet dropped because REGENERATION_PHY queue is full");
307  }
308  }
309  else
310  {
311  event = SatEnums::PACKET_SENT;
312  m_phyTx->StartTx(txParams);
313  }
314 
315  // Add packet trace entry:
316  m_packetTrace(Simulator::Now(),
317  event,
318  m_nodeInfo->GetNodeType(),
319  m_nodeInfo->GetNodeId(),
320  m_nodeInfo->GetMacAddress(),
323  SatUtils::GetPacketInfo(txParams->m_packetsInBurst));
324 }
325 
326 void
328 {
329  if (m_queue.empty())
330  {
331  NS_FATAL_ERROR("Trying to deque an empty queue");
332  }
333 
334  m_isSending = true;
335  std::tuple<Ptr<SatSignalParameters>, uint32_t, uint32_t> element = m_queue.front();
336  m_queue.pop();
337 
338  Ptr<SatSignalParameters> txParams = std::get<0>(element);
339  m_queueSizeBytes -= std::get<1>(element);
340  m_queueSizePackets -= std::get<2>(element);
341 
344  GetE2EDestinationAddress(txParams->m_packetsInBurst));
345 
346  // Add sent packet trace entry:
347  m_packetTrace(Simulator::Now(),
349  m_nodeInfo->GetNodeType(),
350  m_nodeInfo->GetNodeId(),
351  m_nodeInfo->GetMacAddress(),
354  SatUtils::GetPacketInfo(txParams->m_packetsInBurst));
355 
356  Simulator::Schedule(txParams->m_duration + NanoSeconds(1), &SatOrbiterUserPhy::EndTx, this);
357 
358  m_phyTx->StartTx(txParams);
359 }
360 
361 void
363 {
364  m_isSending = false;
365  if (!m_queue.empty())
366  {
367  this->SendFromQueue();
368  }
369 }
370 
371 void
373 {
374  NS_LOG_FUNCTION(this);
375 
377  {
378  SatSignalParameters::PacketsInBurst_t::iterator it1;
379  for (it1 = packets.begin(); it1 != packets.end(); ++it1)
380  {
381  Address addr; // invalid address.
382  bool isTaggedWithAddress = false;
383  ByteTagIterator it2 = (*it1)->GetByteTagIterator();
384 
385  while (!isTaggedWithAddress && it2.HasNext())
386  {
387  ByteTagIterator::Item item = it2.Next();
388 
389  if (item.GetTypeId() == SatAddressTag::GetTypeId())
390  {
391  NS_LOG_DEBUG(this << " contains a SatAddressTag tag:"
392  << " start=" << item.GetStart() << " end=" << item.GetEnd());
393  SatAddressTag addrTag;
394  item.GetTag(addrTag);
395  addr = addrTag.GetSourceAddress();
396  isTaggedWithAddress = true; // this will exit the while loop.
397  }
398  }
399 
400  m_rxTrace(*it1, addr);
401 
402  SatPhyLinkTimeTag linkTimeTag;
403  if ((*it1)->RemovePacketTag(linkTimeTag))
404  {
405  NS_LOG_DEBUG(this << " contains a SatPhyLinkTimeTag tag");
406  Time delay = Simulator::Now() - linkTimeTag.GetSenderLinkTimestamp();
407  m_rxLinkDelayTrace(delay, addr);
408  if (m_lastLinkDelay.IsZero() == false)
409  {
410  Time jitter = Abs(delay - m_lastLinkDelay);
411  m_rxLinkJitterTrace(jitter, addr);
412  }
413  m_lastLinkDelay = delay;
414  }
415 
416  } // end of `for (it1 = rxParams->m_packetsInBurst)`
417 
418  } // end of `if (m_isStatisticsTagsEnabled)`
419 }
420 
421 void
422 SatOrbiterUserPhy::Receive(Ptr<SatSignalParameters> rxParams, bool phyError)
423 {
424  NS_LOG_FUNCTION(this << rxParams);
425 
427 
428  // Add packet trace entry:
429  m_packetTrace(Simulator::Now(),
430  event,
431  m_nodeInfo->GetNodeType(),
432  m_nodeInfo->GetNodeId(),
433  m_nodeInfo->GetMacAddress(),
436  SatUtils::GetPacketInfo(rxParams->m_packetsInBurst));
437 
438  if (phyError)
439  {
440  // If there was a PHY error, the packet is dropped here.
441  NS_LOG_INFO(this << " dropped " << rxParams->m_packetsInBurst.size()
442  << " packets because of PHY error.");
443  }
444  else
445  {
447  {
449  break;
452  if (rxParams->m_txInfo.waveformId == 2)
453  {
454  SatSignalParameters::PacketsInBurst_t::iterator it;
455  for (it = rxParams->m_packetsInBurst.begin();
456  it != rxParams->m_packetsInBurst.end();
457  it++)
458  {
459  SatUplinkInfoTag satUplinkInfoTag;
460  (*it)->RemovePacketTag(satUplinkInfoTag);
461  satUplinkInfoTag.SetIsControl(true);
462  (*it)->AddPacketTag(satUplinkInfoTag);
463  }
464  }
465  // No break here: need to add additional fields SatUplinkInfoTag
466  }
468  if (rxParams->m_txInfo.waveformId == 2)
469  {
470  // Send CMT (empty, just to simulate load) message to GW
471  Ptr<SatCmtMessage> cmtMessage = CreateObject<SatCmtMessage>();
472  m_txCtrlFeederCallback(cmtMessage,
473  GetE2EDestinationAddress(rxParams->m_packetsInBurst),
474  rxParams->Copy());
475  }
476 
477  rxParams->m_txInfo.packetType = SatEnums::PACKET_TYPE_DEDICATED_ACCESS;
478 
479  SatSignalParameters::PacketsInBurst_t::iterator it;
480  for (it = rxParams->m_packetsInBurst.begin(); it != rxParams->m_packetsInBurst.end();
481  it++)
482  {
483  SatUplinkInfoTag satUplinkInfoTag;
484  (*it)->RemovePacketTag(satUplinkInfoTag);
485  satUplinkInfoTag.SetSatId(rxParams->m_satId);
486  satUplinkInfoTag.SetBeamId(rxParams->m_beamId);
487  satUplinkInfoTag.SetSatelliteReceptionTime(Simulator::Now() - rxParams->m_duration);
488  (*it)->AddPacketTag(satUplinkInfoTag);
489  }
490 
491  RxTraces(rxParams->m_packetsInBurst);
492 
493  ModcodTrace(rxParams);
494 
495  break;
496  }
497  default:
498  NS_FATAL_ERROR("Unknown regeneration mode");
499  }
500 
501  m_rxCallback(rxParams->m_packetsInBurst, rxParams);
502  }
503 }
504 
505 double
507 {
508  NS_LOG_FUNCTION(this);
509 
510  return 1 / ((1 / m_aciInterferenceCOverI) + (1 / m_otherSysInterferenceCOverI));
511 }
512 
515 {
516  return SatEnums::LD_FORWARD;
517 }
518 
521 {
522  return SatEnums::LD_RETURN;
523 }
524 
525 Address
527 {
528  SatSignalParameters::PacketsInBurst_t::iterator it1;
529  for (it1 = packets.begin(); it1 != packets.end(); ++it1)
530  {
531  Address addr; // invalid address.
532  SatAddressE2ETag satAddressE2ETag;
533  if ((*it1)->PeekPacketTag(satAddressE2ETag))
534  {
535  return satAddressE2ETag.GetE2EDestAddress();
536  }
537  }
538  return Mac48Address();
539 }
540 
541 void
543 {
545 }
546 
547 } // 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.
TracedCallback< uint32_t, const Address & > m_queueSizePacketsTrace
Traced callback to monitor RTN feeder queue size in packets.
void SetSendControlMsgToFeederCallback(SendControlMsgToFeederCallback cb)
Set SendControlMsgToFeederCallback.
SatOrbiterUserPhy::SendControlMsgToFeederCallback m_txCtrlFeederCallback
Callback to send ctrl packet on orbiter feeder.
double m_otherSysInterferenceCOverI
Other system interference in linear.
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)
virtual void DoInitialize(void)
Initialization of SatPhy.
uint32_t m_queueSizeMax
Maximum size of FIFO m_queue in bytes.
Address GetE2EDestinationAddress(SatPhy::PacketContainer_t packets)
Get destination address of packets.
virtual void DoDispose(void)
Dispose of this class instance.
virtual double GetAdditionalInterference()
Get additional interference, used to compute final SINR at RX.
Callback< bool, Ptr< SatControlMessage >, const Address &, Ptr< SatSignalParameters > > SendControlMsgToFeederCallback
SatOrbiterUserPhy(void)
Default constructor.
SatEnums::RegenerationMode_t m_forwardLinkRegenerationMode
Regeneration mode on forward link.
virtual void RxTraces(SatPhy::PacketContainer_t packets)
Invoke the Rx trace source for each received packet.
bool m_isSending
Indicates if a packet is already being sent.
double m_otherSysInterferenceCOverIDb
Configured other system interference in dB.
double m_aciInterferenceCOverIDb
Configured Adjacent Channel Interference (ACI) in dB.
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 SatEnums::SatLinkDir_t GetSatLinkRxDir()
Get the link RX direction.
static TypeId GetTypeId(void)
inherited from Object
SatEnums::RegenerationMode_t m_returnLinkRegenerationMode
Regeneration mode on return link.
virtual SatEnums::SatLinkDir_t GetSatLinkTxDir()
Get the link TX direction.
TracedCallback< uint32_t, const Address & > m_queueSizeBytesTrace
Traced callback to monitor RTN feeder queue size in bytes.
void SendFromQueue()
Send a packet from the queue.
virtual ~SatOrbiterUserPhy()
Destructor for SatOrbiterUserPhy.
virtual void Receive(Ptr< SatSignalParameters > rxParams, bool phyError)
Receives packets from lower layer.
void EndTx()
Notify a packet has finished being sent.
uint32_t m_queueSizePackets
Size of FIFO queue in packets.
double m_aciInterferenceCOverI
Adjacent Channel Interference (ACI) in linear.
The SatPhy models the basic physical layer of the satellite system.
Definition: satellite-phy.h:62
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:79
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 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.