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