22#ifndef __SATELLITE_TRAFFIC_HELPER_H__
23#define __SATELLITE_TRAFFIC_HELPER_H__
27#include "ns3/application-container.h"
28#include "ns3/cbr-application.h"
29#include "ns3/config.h"
30#include "ns3/object.h"
31#include "ns3/satellite-stats-helper-container.h"
32#include "ns3/string.h"
38#define STRINGIFY(x) #x
39#define TOSTRING(x) STRINGIFY(x)
101 Ptr<SatStatsHelperContainer> satStatsHelperContainer);
156 NodeContainer gwUsers,
157 NodeContainer utUsers,
175 NodeContainer gwUsers,
176 NodeContainer utUsers,
198 NodeContainer gwUsers,
199 NodeContainer utUsers,
221 NodeContainer gwUsers,
222 NodeContainer utUsers,
246 NodeContainer gwUsers,
247 NodeContainer utUsers,
248 std::string onTimePattern,
249 std::string offTimePattern,
273 NodeContainer gwUsers,
274 NodeContainer utUsers,
275 std::string onTimePattern,
276 std::string offTimePattern,
292 NodeContainer gwUsers,
293 NodeContainer utUsers,
309 NodeContainer gwUsers,
310 NodeContainer utUsers,
326 NodeContainer gwUsers,
327 NodeContainer utUsers,
343 NodeContainer gwUsers,
344 NodeContainer utUsers,
367 NodeContainer gwUsers,
368 NodeContainer utUsers,
391 NodeContainer gwUsers,
392 NodeContainer utUsers,
410 NodeContainer gwUsers,
411 NodeContainer utUsers,
429 NodeContainer gwUsers,
430 NodeContainer utUsers,
448 std::string interval,
450 NodeContainer gwUsers,
451 NodeContainer utUsers,
477 Ptr<SatStatsHelperContainer>
491 std::string interval,
492 uint32_t packetSize);
563 :
m_protocol(SatTrafficHelperConf::PROTOCOL_UDP),
572 m_codec(SatTrafficHelper::VoipCodec_t::G_711_1),
580 } TrafficConfiguration_t;
587 std::map<std::string, TrafficConfiguration_t>::iterator it =
597 it->second.m_protocol = protocol;
603 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
607 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
610 return it->second.m_protocol;
615 std::map<std::string, TrafficConfiguration_t>::iterator it =
625 it->second.m_direction = direction;
631 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
635 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
638 return it->second.m_direction;
643 std::map<std::string, TrafficConfiguration_t>::iterator it =
653 it->second.m_interval = interval;
659 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
663 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
666 return it->second.m_interval;
671 std::map<std::string, TrafficConfiguration_t>::iterator it =
681 it->second.m_dataRate = dataRate;
687 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
691 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
694 return it->second.m_dataRate;
699 std::map<std::string, TrafficConfiguration_t>::iterator it =
709 it->second.m_packetSize = packetSize;
715 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
719 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
722 return it->second.m_packetSize;
727 std::map<std::string, TrafficConfiguration_t>::iterator it =
737 it->second.m_onTimePattern = onTimePattern;
743 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
747 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
750 return it->second.m_onTimePattern;
755 std::map<std::string, TrafficConfiguration_t>::iterator it =
765 it->second.m_offTimePattern = offTimePattern;
771 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
775 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
778 return it->second.m_offTimePattern;
783 std::map<std::string, TrafficConfiguration_t>::iterator it =
793 it->second.m_onTime = onTime;
799 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
803 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
806 return it->second.m_onTime;
811 std::map<std::string, TrafficConfiguration_t>::iterator it =
821 it->second.m_offTime = offTime;
827 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
831 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
834 return it->second.m_offTime;
839 std::map<std::string, TrafficConfiguration_t>::iterator it =
849 it->second.m_codec = codec;
855 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
859 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
862 return it->second.m_codec;
867 std::map<std::string, TrafficConfiguration_t>::iterator it =
877 it->second.m_startTime = startTime;
883 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
887 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
890 return it->second.m_startTime;
895 std::map<std::string, TrafficConfiguration_t>::iterator it =
905 it->second.m_stopTime = stopTime;
911 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
915 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
918 return it->second.m_stopTime;
923 std::map<std::string, TrafficConfiguration_t>::iterator it =
933 it->second.m_startDelay = startDelay;
939 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
943 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
946 return it->second.m_startDelay;
951 std::map<std::string, TrafficConfiguration_t>::iterator it =
961 it->second.m_percentage = percentage;
967 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
971 NS_FATAL_ERROR(
"Traffic model " << trafficModel <<
" has not been configured");
974 return it->second.m_percentage;
977#define TRAFFIC_MODEL_PROTOCOL_ATTRIBUTE_ACCESSOR_DEFINE(index) \
978 inline void SetTraffic##index##Protocol(TransportLayerProtocol_t value) \
980 return SetTrafficProtocol(TOSTRING(index), value); \
982 inline TransportLayerProtocol_t GetTraffic##index##Protocol() const \
984 return GetTrafficProtocol(TOSTRING(index)); \
987#define TRAFFIC_MODEL_DIRECTION_ATTRIBUTE_ACCESSOR_DEFINE(index) \
988 inline void SetTraffic##index##Direction(TrafficDirection_t value) \
990 return SetTrafficDirection(TOSTRING(index), value); \
992 inline TrafficDirection_t GetTraffic##index##Direction() const \
994 return GetTrafficDirection(TOSTRING(index)); \
997#define TRAFFIC_MODEL_INTERVAL_ATTRIBUTE_ACCESSOR_DEFINE(index) \
998 inline void SetTraffic##index##Interval(Time value) \
1000 return SetTrafficInterval(TOSTRING(index), value); \
1002 inline Time GetTraffic##index##Interval() const \
1004 return GetTrafficInterval(TOSTRING(index)); \
1007#define TRAFFIC_MODEL_DATA_RATE_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1008 inline void SetTraffic##index##DataRate(DataRate value) \
1010 return SetTrafficDataRate(TOSTRING(index), value); \
1012 inline DataRate GetTraffic##index##DataRate() const \
1014 return GetTrafficDataRate(TOSTRING(index)); \
1017#define TRAFFIC_MODEL_PACKET_SIZE_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1018 inline void SetTraffic##index##PacketSize(uint32_t value) \
1020 return SetTrafficPacketSize(TOSTRING(index), value); \
1022 inline uint32_t GetTraffic##index##PacketSize() const \
1024 return GetTrafficPacketSize(TOSTRING(index)); \
1027#define TRAFFIC_MODEL_ON_TIME_PATTERN_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1028 inline void SetTraffic##index##OnTimePattern(std::string value) \
1030 return SetTrafficOnTimePattern(TOSTRING(index), value); \
1032 inline std::string GetTraffic##index##OnTimePattern() const \
1034 return GetTrafficOnTimePattern(TOSTRING(index)); \
1037#define TRAFFIC_MODEL_OFF_TIME_PATTERN_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1038 inline void SetTraffic##index##OffTimePattern(std::string value) \
1040 return SetTrafficOffTimePattern(TOSTRING(index), value); \
1042 inline std::string GetTraffic##index##OffTimePattern() const \
1044 return GetTrafficOffTimePattern(TOSTRING(index)); \
1047#define TRAFFIC_MODEL_ON_TIME_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1048 inline void SetTraffic##index##OnTime(Time value) \
1050 return SetTrafficOnTime(TOSTRING(index), value); \
1052 inline Time GetTraffic##index##OnTime() const \
1054 return GetTrafficOnTime(TOSTRING(index)); \
1057#define TRAFFIC_MODEL_OFF_TIME_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1058 inline void SetTraffic##index##OffTime(Time value) \
1060 return SetTrafficOffTime(TOSTRING(index), value); \
1062 inline Time GetTraffic##index##OffTime() const \
1064 return GetTrafficOffTime(TOSTRING(index)); \
1067#define TRAFFIC_MODEL_CODEC_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1068 inline void SetTraffic##index##Codec(SatTrafficHelper::VoipCodec_t value) \
1070 return SetTrafficCodec(TOSTRING(index), value); \
1072 inline SatTrafficHelper::VoipCodec_t GetTraffic##index##Codec() const \
1074 return GetTrafficCodec(TOSTRING(index)); \
1077#define TRAFFIC_MODEL_START_TIME_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1078 inline void SetTraffic##index##StartTime(Time value) \
1080 return SetTrafficStartTime(TOSTRING(index), value); \
1082 inline Time GetTraffic##index##StartTime() const \
1084 return GetTrafficStartTime(TOSTRING(index)); \
1087#define TRAFFIC_MODEL_STOP_TIME_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1088 inline void SetTraffic##index##StopTime(Time value) \
1090 return SetTrafficStopTime(TOSTRING(index), value); \
1092 inline Time GetTraffic##index##StopTime() const \
1094 return GetTrafficStopTime(TOSTRING(index)); \
1097#define TRAFFIC_MODEL_START_DELAY_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1098 inline void SetTraffic##index##StartDelay(Time value) \
1100 return SetTrafficStartDelay(TOSTRING(index), value); \
1102 inline Time GetTraffic##index##StartDelay() const \
1104 return GetTrafficStartDelay(TOSTRING(index)); \
1107#define TRAFFIC_MODEL_PERCENTAGE_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1108 inline void SetTraffic##index##Percentage(double value) \
1110 return SetTrafficPercentage(TOSTRING(index), value); \
1112 inline double GetTraffic##index##Percentage() const \
1114 return GetTrafficPercentage(TOSTRING(index)); \
Time GetTrafficStartDelay(std::string trafficModel) const
void SetTrafficProtocol(std::string trafficModel, TransportLayerProtocol_t protocol)
TRAFFIC_MODEL_STOP_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Poisson)
TRAFFIC_MODEL_PACKET_SIZE_ATTRIBUTE_ACCESSOR_DEFINE(OnOff)
void SetTrafficStartDelay(std::string trafficModel, Time startDelay)
Time GetTrafficOffTime(std::string trafficModel) const
void SetTrafficDataRate(std::string trafficModel, DataRate dataRate)
TrafficDirection_t GetTrafficDirection(std::string trafficModel) const
TRAFFIC_MODEL_STOP_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Cbr)
TRAFFIC_MODEL_STOP_TIME_ATTRIBUTE_ACCESSOR_DEFINE(LoraPeriodic)
TRAFFIC_MODEL_PERCENTAGE_ATTRIBUTE_ACCESSOR_DEFINE(Http)
TRAFFIC_MODEL_PACKET_SIZE_ATTRIBUTE_ACCESSOR_DEFINE(LoraPeriodic)
TRAFFIC_MODEL_PROTOCOL_ATTRIBUTE_ACCESSOR_DEFINE(OnOff)
TRAFFIC_MODEL_START_TIME_ATTRIBUTE_ACCESSOR_DEFINE(LoraPeriodic)
TRAFFIC_MODEL_START_DELAY_ATTRIBUTE_ACCESSOR_DEFINE(LoraCbr)
TRAFFIC_MODEL_START_DELAY_ATTRIBUTE_ACCESSOR_DEFINE(Nrtv)
Time GetTrafficStopTime(std::string trafficModel) const
TRAFFIC_MODEL_START_DELAY_ATTRIBUTE_ACCESSOR_DEFINE(Voip)
TRAFFIC_MODEL_DIRECTION_ATTRIBUTE_ACCESSOR_DEFINE(Http)
TRAFFIC_MODEL_PACKET_SIZE_ATTRIBUTE_ACCESSOR_DEFINE(Poisson)
TRAFFIC_MODEL_START_DELAY_ATTRIBUTE_ACCESSOR_DEFINE(OnOff)
void SetTrafficOffTimePattern(std::string trafficModel, std::string offTimePattern)
TRAFFIC_MODEL_START_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Http)
Time GetTrafficInterval(std::string trafficModel) const
TRAFFIC_MODEL_DATA_RATE_ATTRIBUTE_ACCESSOR_DEFINE(OnOff)
uint32_t GetTrafficPacketSize(std::string trafficModel) const
TRAFFIC_MODEL_DIRECTION_ATTRIBUTE_ACCESSOR_DEFINE(OnOff)
void SetTrafficInterval(std::string trafficModel, Time interval)
TRAFFIC_MODEL_PERCENTAGE_ATTRIBUTE_ACCESSOR_DEFINE(Cbr)
TRAFFIC_MODEL_START_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Nrtv)
TRAFFIC_MODEL_OFF_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Poisson)
TRAFFIC_MODEL_START_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Voip)
TRAFFIC_MODEL_INTERVAL_ATTRIBUTE_ACCESSOR_DEFINE(LoraPeriodic)
TRAFFIC_MODEL_DIRECTION_ATTRIBUTE_ACCESSOR_DEFINE(Voip)
TRAFFIC_MODEL_START_TIME_ATTRIBUTE_ACCESSOR_DEFINE(OnOff)
TRAFFIC_MODEL_ON_TIME_PATTERN_ATTRIBUTE_ACCESSOR_DEFINE(OnOff)
TRAFFIC_MODEL_INTERVAL_ATTRIBUTE_ACCESSOR_DEFINE(LoraCbr)
std::string GetTrafficOffTimePattern(std::string trafficModel) const
TRAFFIC_MODEL_STOP_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Http)
TRAFFIC_MODEL_PACKET_SIZE_ATTRIBUTE_ACCESSOR_DEFINE(LoraCbr)
TRAFFIC_MODEL_PERCENTAGE_ATTRIBUTE_ACCESSOR_DEFINE(Voip)
TRAFFIC_MODEL_START_DELAY_ATTRIBUTE_ACCESSOR_DEFINE(Poisson)
TRAFFIC_MODEL_START_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Cbr)
TRAFFIC_MODEL_START_DELAY_ATTRIBUTE_ACCESSOR_DEFINE(Cbr)
TRAFFIC_MODEL_STOP_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Voip)
void SetTrafficDirection(std::string trafficModel, TrafficDirection_t direction)
TRAFFIC_MODEL_PERCENTAGE_ATTRIBUTE_ACCESSOR_DEFINE(LoraCbr)
TRAFFIC_MODEL_STOP_TIME_ATTRIBUTE_ACCESSOR_DEFINE(OnOff)
TRAFFIC_MODEL_START_TIME_ATTRIBUTE_ACCESSOR_DEFINE(LoraCbr)
TRAFFIC_MODEL_PERCENTAGE_ATTRIBUTE_ACCESSOR_DEFINE(OnOff)
void SetTrafficCodec(std::string trafficModel, SatTrafficHelper::VoipCodec_t codec)
Time GetTrafficStartTime(std::string trafficModel) const
TRAFFIC_MODEL_ON_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Poisson)
TRAFFIC_MODEL_CODEC_ATTRIBUTE_ACCESSOR_DEFINE(Voip)
virtual ~SatTrafficHelperConf()
Destructor.
void SetTrafficOnTimePattern(std::string trafficModel, std::string onTimePattern)
SatTrafficHelperConf()
Default constructor.
TRAFFIC_MODEL_PERCENTAGE_ATTRIBUTE_ACCESSOR_DEFINE(LoraPeriodic)
TRAFFIC_MODEL_DIRECTION_ATTRIBUTE_ACCESSOR_DEFINE(Cbr)
TRAFFIC_MODEL_STOP_TIME_ATTRIBUTE_ACCESSOR_DEFINE(LoraCbr)
SatTrafficHelper::VoipCodec_t GetTrafficCodec(std::string trafficModel) const
TRAFFIC_MODEL_START_DELAY_ATTRIBUTE_ACCESSOR_DEFINE(LoraPeriodic)
TRAFFIC_MODEL_DIRECTION_ATTRIBUTE_ACCESSOR_DEFINE(Nrtv)
void InstallTrafficModels()
Install traffic models from configuration files.
TRAFFIC_MODEL_START_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Poisson)
static TypeId GetTypeId(void)
Derived from Object.
void SetTrafficStartTime(std::string trafficModel, Time startTime)
Ptr< SatTrafficHelper > m_trafficHelper
DataRate GetTrafficDataRate(std::string trafficModel) const
void SetTrafficStopTime(std::string trafficModel, Time stopTime)
TRAFFIC_MODEL_DIRECTION_ATTRIBUTE_ACCESSOR_DEFINE(Poisson)
TRAFFIC_MODEL_STOP_TIME_ATTRIBUTE_ACCESSOR_DEFINE(Nrtv)
TRAFFIC_MODEL_DATA_RATE_ATTRIBUTE_ACCESSOR_DEFINE(Poisson)
TRAFFIC_MODEL_PERCENTAGE_ATTRIBUTE_ACCESSOR_DEFINE(Nrtv)
TRAFFIC_MODEL_PROTOCOL_ATTRIBUTE_ACCESSOR_DEFINE(Cbr)
void SetTrafficOffTime(std::string trafficModel, Time offTime)
TransportLayerProtocol_t GetTrafficProtocol(std::string trafficModel) const
void SetTrafficPercentage(std::string trafficModel, double percentage)
TRAFFIC_MODEL_PERCENTAGE_ATTRIBUTE_ACCESSOR_DEFINE(Poisson)
std::string GetTrafficOnTimePattern(std::string trafficModel) const
TRAFFIC_MODEL_START_DELAY_ATTRIBUTE_ACCESSOR_DEFINE(Http)
void SetTrafficOnTime(std::string trafficModel, Time onTime)
TRAFFIC_MODEL_OFF_TIME_PATTERN_ATTRIBUTE_ACCESSOR_DEFINE(OnOff)
TRAFFIC_MODEL_INTERVAL_ATTRIBUTE_ACCESSOR_DEFINE(Cbr)
Time GetTrafficOnTime(std::string trafficModel) const
void SetTrafficPacketSize(std::string trafficModel, uint32_t packetSize)
std::map< std::string, TrafficConfiguration_t > m_trafficModel
double GetTrafficPercentage(std::string trafficModel) const
TRAFFIC_MODEL_PACKET_SIZE_ATTRIBUTE_ACCESSOR_DEFINE(Cbr)
void AddNrtvTraffic(TrafficDirection_t direction, NodeContainer gwUsers, NodeContainer utUsers, Time startTime, Time stopTime, Time startDelay)
Add a new TCP/NRTV traffic between chosen GWs and UTs.
void AddCustomTraffic(TrafficDirection_t direction, std::string interval, uint32_t packetSize, NodeContainer gwUsers, NodeContainer utUsers, Time startTime, Time stopTime, Time startDelay)
Add a new CBR traffic between chosen GWs and UTs that can be customized.
SatTrafficHelper()
Default constructor.
void ChangeCustomTraffic(Time delay, std::string interval, uint32_t packetSize)
Change the parameters of the last custom traffic created.
CustomTrafficInfo_s m_last_custom_application
void AddCbrTraffic(TrafficDirection_t direction, TransportLayerProtocol_t protocol, Time interval, uint32_t packetSize, NodeContainer gwUsers, NodeContainer utUsers, Time startTime, Time stopTime, Time startDelay)
Add a new CBR traffic between chosen GWs and UTs.
bool HasSinkInstalled(Ptr< Node > node, uint16_t port)
Check if node has a PacketSink installed at certain port.
void AddOnOffTraffic(TrafficDirection_t direction, TransportLayerProtocol_t protocol, DataRate dataRate, uint32_t packetSize, NodeContainer gwUsers, NodeContainer utUsers, std::string onTimePattern, std::string offTimePattern, Time startTime, Time stopTime, Time startDelay)
Add a new ONOFF traffic between chosen GWs and UTs.
Ptr< SatHelper > m_satHelper
bool m_enableDefaultStatistics
virtual ~SatTrafficHelper()
Destructor for SatTrafficHelper.
static TypeId GetTypeId(void)
Get the type ID.
void AddPoissonTraffic(TrafficDirection_t direction, Time onTime, Time offTimeExpMean, DataRate rate, uint32_t packetSize, NodeContainer gwUsers, NodeContainer utUsers, Time startTime, Time stopTime, Time startDelay)
Add a new Poisson traffic between chosen GWs and UTs.
void AddVoipTraffic(TrafficDirection_t direction, VoipCodec_t codec, NodeContainer gwUsers, NodeContainer utUsers, Time startTime, Time stopTime, Time startDelay)
Add a new Poisson traffic between chosen GWs and UTs.
TrafficType_t
List of available traffics.
Ptr< SatStatsHelperContainer > m_satStatsHelperContainer
void AddHttpTraffic(TrafficDirection_t direction, NodeContainer gwUsers, NodeContainer utUsers, Time startTime, Time stopTime, Time startDelay)
Add a new TCP/HTTP traffic between chosen GWs and UTs.
void AddLoraPeriodicTraffic(Time interval, uint32_t packetSize, NodeContainer uts, Time startTime, Time stopTime, Time startDelay)
Add Lora periodic traffic between chosen GWs and UTs.
void UpdateAttribute(Ptr< CbrApplication > application, std::string interval, uint32_t packetSize)
Update the chosen attribute of a custom traffic.
void AddLoraCbrTraffic(Time interval, uint32_t packetSize, NodeContainer gwUsers, NodeContainer utUsers, Time startTime, Time stopTime, Time startDelay)
Add Lora CBR traffic between chosen GWs and UTs.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.
SatTrafficHelper::VoipCodec_t m_codec
TrafficDirection_t m_direction
std::string m_onTimePattern
std::string m_offTimePattern
TransportLayerProtocol_t m_protocol
Struct for info on last custom trafic created.
ApplicationContainer application