Loading...
Searching...
No Matches
satellite-traffic-helper.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 * Copyright (c) 2020 CNES
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation;
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * Author: Bastien Tauran <bastien.tauran@viveris.fr>
20 */
21
22#ifndef __SATELLITE_TRAFFIC_HELPER_H__
23#define __SATELLITE_TRAFFIC_HELPER_H__
24
25#include "satellite-helper.h"
26
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"
33
34#include <map>
35#include <stdint.h>
36#include <string>
37
38#define STRINGIFY(x) #x
39#define TOSTRING(x) STRINGIFY(x)
40
41namespace ns3
42{
46class SatTrafficHelper : public Object
47{
48 public:
52 typedef enum
53 {
54 LORA_PERIODIC, // implemented
55 LORA_CBR, // implemented
56 CBR, // implemented
57 ONOFF, // implemented
58 HTTP, // implemented
59 NRTV, // implemented
60 POISSON, // implemented
61 VOIP, // implemented
62 CUSTOM // implemented
64
65 typedef enum
66 {
70
71 typedef enum
72 {
76
85
90 static TypeId GetTypeId(void);
91
96
100 SatTrafficHelper(Ptr<SatHelper> satHelper,
101 Ptr<SatStatsHelperContainer> satStatsHelperContainer);
102
107 {
108 }
109
119 void AddLoraPeriodicTraffic(Time interval,
120 uint32_t packetSize,
121 NodeContainer uts,
122 Time startTime,
123 Time stopTime,
124 Time startDelay);
125
136 void AddLoraPeriodicTraffic(Time interval,
137 uint32_t packetSize,
138 NodeContainer uts,
139 Time startTime,
140 Time stopTime,
141 Time startDelay,
142 double percentage);
143
154 void AddLoraCbrTraffic(Time interval,
155 uint32_t packetSize,
156 NodeContainer gwUsers,
157 NodeContainer utUsers,
158 Time startTime,
159 Time stopTime,
160 Time startDelay);
161
173 void AddLoraCbrTraffic(Time interval,
174 uint32_t packetSize,
175 NodeContainer gwUsers,
176 NodeContainer utUsers,
177 Time startTime,
178 Time stopTime,
179 Time startDelay,
180 double percentage);
181
194 void AddCbrTraffic(TrafficDirection_t direction,
196 Time interval,
197 uint32_t packetSize,
198 NodeContainer gwUsers,
199 NodeContainer utUsers,
200 Time startTime,
201 Time stopTime,
202 Time startDelay);
203
217 void AddCbrTraffic(TrafficDirection_t direction,
219 Time interval,
220 uint32_t packetSize,
221 NodeContainer gwUsers,
222 NodeContainer utUsers,
223 Time startTime,
224 Time stopTime,
225 Time startDelay,
226 double percentage);
227
242 void AddOnOffTraffic(TrafficDirection_t direction,
244 DataRate dataRate,
245 uint32_t packetSize,
246 NodeContainer gwUsers,
247 NodeContainer utUsers,
248 std::string onTimePattern,
249 std::string offTimePattern,
250 Time startTime,
251 Time stopTime,
252 Time startDelay);
253
269 void AddOnOffTraffic(TrafficDirection_t direction,
271 DataRate dataRate,
272 uint32_t packetSize,
273 NodeContainer gwUsers,
274 NodeContainer utUsers,
275 std::string onTimePattern,
276 std::string offTimePattern,
277 Time startTime,
278 Time stopTime,
279 Time startDelay,
280 double percentage);
281
291 void AddHttpTraffic(TrafficDirection_t direction,
292 NodeContainer gwUsers,
293 NodeContainer utUsers,
294 Time startTime,
295 Time stopTime,
296 Time startDelay);
297
308 void AddHttpTraffic(TrafficDirection_t direction,
309 NodeContainer gwUsers,
310 NodeContainer utUsers,
311 Time startTime,
312 Time stopTime,
313 Time startDelay,
314 double percentage);
315
325 void AddNrtvTraffic(TrafficDirection_t direction,
326 NodeContainer gwUsers,
327 NodeContainer utUsers,
328 Time startTime,
329 Time stopTime,
330 Time startDelay);
331
342 void AddNrtvTraffic(TrafficDirection_t direction,
343 NodeContainer gwUsers,
344 NodeContainer utUsers,
345 Time startTime,
346 Time stopTime,
347 Time startDelay,
348 double percentage);
349
363 Time onTime,
364 Time offTimeExpMean,
365 DataRate rate,
366 uint32_t packetSize,
367 NodeContainer gwUsers,
368 NodeContainer utUsers,
369 Time startTime,
370 Time stopTime,
371 Time startDelay);
372
387 Time onTime,
388 Time offTimeExpMean,
389 DataRate rate,
390 uint32_t packetSize,
391 NodeContainer gwUsers,
392 NodeContainer utUsers,
393 Time startTime,
394 Time stopTime,
395 Time startDelay,
396 double percentage);
397
408 void AddVoipTraffic(TrafficDirection_t direction,
409 VoipCodec_t codec,
410 NodeContainer gwUsers,
411 NodeContainer utUsers,
412 Time startTime,
413 Time stopTime,
414 Time startDelay);
415
427 void AddVoipTraffic(TrafficDirection_t direction,
428 VoipCodec_t codec,
429 NodeContainer gwUsers,
430 NodeContainer utUsers,
431 Time startTime,
432 Time stopTime,
433 Time startDelay,
434 double percentage);
435
448 std::string interval,
449 uint32_t packetSize,
450 NodeContainer gwUsers,
451 NodeContainer utUsers,
452 Time startTime,
453 Time stopTime,
454 Time startDelay);
455
462 void ChangeCustomTraffic(Time delay, std::string interval, uint32_t packetSize);
463
464 private:
468 typedef struct
469 {
470 ApplicationContainer application;
471 Time start;
472 Time stop;
475
476 Ptr<SatHelper> m_satHelper; // Pointer to the SatHelper objet
477 Ptr<SatStatsHelperContainer>
478 m_satStatsHelperContainer; // Pointer to the SatStatsHelperContainer objet
479
480 CustomTrafficInfo_s m_last_custom_application; // Last application container of custom traffic
481
483
490 void UpdateAttribute(Ptr<CbrApplication> application,
491 std::string interval,
492 uint32_t packetSize);
493
497 bool HasSinkInstalled(Ptr<Node> node, uint16_t port);
498};
499
500class SatTrafficHelperConf : public Object
501{
502 public:
507
514 SatTrafficHelperConf(Ptr<SatTrafficHelper> trafficHelper, Time simTime);
515
519 virtual ~SatTrafficHelperConf();
520
524 static TypeId GetTypeId(void);
525
530
537
544
546 {
547 TransportLayerProtocol_t m_protocol;
548 TrafficDirection_t m_direction;
550 DataRate m_dataRate;
551 uint32_t m_packetSize;
552 std::string m_onTimePattern;
553 std::string m_offTimePattern;
556 SatTrafficHelper::VoipCodec_t m_codec;
561
563 : m_protocol(SatTrafficHelperConf::PROTOCOL_UDP),
564 m_direction(SatTrafficHelperConf::RTN_LINK),
565 m_interval(Seconds(1.0)),
566 m_dataRate(DataRate("500kb/s")),
567 m_packetSize(512),
568 m_onTimePattern("ns3::ConstantRandomVariable[Constant=1000]"),
569 m_offTimePattern("ns3::ConstantRandomVariable[Constant=0]"),
570 m_onTime(Seconds(1)),
571 m_offTime(MilliSeconds(100)),
572 m_codec(SatTrafficHelper::VoipCodec_t::G_711_1),
573 m_startTime(0),
574 m_stopTime(0),
575 m_startDelay(0),
576 m_percentage(0.0)
577 {
578 // do nothing
579 }
580 } TrafficConfiguration_t;
581
582 std::map<std::string, TrafficConfiguration_t> m_trafficModel;
583
584 private:
585 void SetTrafficProtocol(std::string trafficModel, TransportLayerProtocol_t protocol)
586 {
587 std::map<std::string, TrafficConfiguration_t>::iterator it =
588 m_trafficModel.find(trafficModel);
589 if (it == m_trafficModel.end())
590 {
592 traffic.m_protocol = protocol;
593 m_trafficModel.emplace(trafficModel, traffic);
594 }
595 else
596 {
597 it->second.m_protocol = protocol;
598 }
599 }
600
601 TransportLayerProtocol_t GetTrafficProtocol(std::string trafficModel) const
602 {
603 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
604 m_trafficModel.find(trafficModel);
605 if (it == m_trafficModel.end())
606 {
607 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
608 }
609
610 return it->second.m_protocol;
611 }
612
613 void SetTrafficDirection(std::string trafficModel, TrafficDirection_t direction)
614 {
615 std::map<std::string, TrafficConfiguration_t>::iterator it =
616 m_trafficModel.find(trafficModel);
617 if (it == m_trafficModel.end())
618 {
620 traffic.m_direction = direction;
621 m_trafficModel.emplace(trafficModel, traffic);
622 }
623 else
624 {
625 it->second.m_direction = direction;
626 }
627 }
628
629 TrafficDirection_t GetTrafficDirection(std::string trafficModel) const
630 {
631 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
632 m_trafficModel.find(trafficModel);
633 if (it == m_trafficModel.end())
634 {
635 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
636 }
637
638 return it->second.m_direction;
639 }
640
641 void SetTrafficInterval(std::string trafficModel, Time interval)
642 {
643 std::map<std::string, TrafficConfiguration_t>::iterator it =
644 m_trafficModel.find(trafficModel);
645 if (it == m_trafficModel.end())
646 {
648 traffic.m_interval = interval;
649 m_trafficModel.emplace(trafficModel, traffic);
650 }
651 else
652 {
653 it->second.m_interval = interval;
654 }
655 }
656
657 Time GetTrafficInterval(std::string trafficModel) const
658 {
659 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
660 m_trafficModel.find(trafficModel);
661 if (it == m_trafficModel.end())
662 {
663 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
664 }
665
666 return it->second.m_interval;
667 }
668
669 void SetTrafficDataRate(std::string trafficModel, DataRate dataRate)
670 {
671 std::map<std::string, TrafficConfiguration_t>::iterator it =
672 m_trafficModel.find(trafficModel);
673 if (it == m_trafficModel.end())
674 {
676 traffic.m_dataRate = dataRate;
677 m_trafficModel.emplace(trafficModel, traffic);
678 }
679 else
680 {
681 it->second.m_dataRate = dataRate;
682 }
683 }
684
685 DataRate GetTrafficDataRate(std::string trafficModel) const
686 {
687 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
688 m_trafficModel.find(trafficModel);
689 if (it == m_trafficModel.end())
690 {
691 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
692 }
693
694 return it->second.m_dataRate;
695 }
696
697 void SetTrafficPacketSize(std::string trafficModel, uint32_t packetSize)
698 {
699 std::map<std::string, TrafficConfiguration_t>::iterator it =
700 m_trafficModel.find(trafficModel);
701 if (it == m_trafficModel.end())
702 {
704 traffic.m_packetSize = packetSize;
705 m_trafficModel.emplace(trafficModel, traffic);
706 }
707 else
708 {
709 it->second.m_packetSize = packetSize;
710 }
711 }
712
713 uint32_t GetTrafficPacketSize(std::string trafficModel) const
714 {
715 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
716 m_trafficModel.find(trafficModel);
717 if (it == m_trafficModel.end())
718 {
719 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
720 }
721
722 return it->second.m_packetSize;
723 }
724
725 void SetTrafficOnTimePattern(std::string trafficModel, std::string onTimePattern)
726 {
727 std::map<std::string, TrafficConfiguration_t>::iterator it =
728 m_trafficModel.find(trafficModel);
729 if (it == m_trafficModel.end())
730 {
732 traffic.m_onTimePattern = onTimePattern;
733 m_trafficModel.emplace(trafficModel, traffic);
734 }
735 else
736 {
737 it->second.m_onTimePattern = onTimePattern;
738 }
739 }
740
741 std::string GetTrafficOnTimePattern(std::string trafficModel) const
742 {
743 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
744 m_trafficModel.find(trafficModel);
745 if (it == m_trafficModel.end())
746 {
747 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
748 }
749
750 return it->second.m_onTimePattern;
751 }
752
753 void SetTrafficOffTimePattern(std::string trafficModel, std::string offTimePattern)
754 {
755 std::map<std::string, TrafficConfiguration_t>::iterator it =
756 m_trafficModel.find(trafficModel);
757 if (it == m_trafficModel.end())
758 {
760 traffic.m_offTimePattern = offTimePattern;
761 m_trafficModel.emplace(trafficModel, traffic);
762 }
763 else
764 {
765 it->second.m_offTimePattern = offTimePattern;
766 }
767 }
768
769 std::string GetTrafficOffTimePattern(std::string trafficModel) const
770 {
771 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
772 m_trafficModel.find(trafficModel);
773 if (it == m_trafficModel.end())
774 {
775 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
776 }
777
778 return it->second.m_offTimePattern;
779 }
780
781 void SetTrafficOnTime(std::string trafficModel, Time onTime)
782 {
783 std::map<std::string, TrafficConfiguration_t>::iterator it =
784 m_trafficModel.find(trafficModel);
785 if (it == m_trafficModel.end())
786 {
788 traffic.m_onTime = onTime;
789 m_trafficModel.emplace(trafficModel, traffic);
790 }
791 else
792 {
793 it->second.m_onTime = onTime;
794 }
795 }
796
797 Time GetTrafficOnTime(std::string trafficModel) const
798 {
799 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
800 m_trafficModel.find(trafficModel);
801 if (it == m_trafficModel.end())
802 {
803 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
804 }
805
806 return it->second.m_onTime;
807 }
808
809 void SetTrafficOffTime(std::string trafficModel, Time offTime)
810 {
811 std::map<std::string, TrafficConfiguration_t>::iterator it =
812 m_trafficModel.find(trafficModel);
813 if (it == m_trafficModel.end())
814 {
816 traffic.m_offTime = offTime;
817 m_trafficModel.emplace(trafficModel, traffic);
818 }
819 else
820 {
821 it->second.m_offTime = offTime;
822 }
823 }
824
825 Time GetTrafficOffTime(std::string trafficModel) const
826 {
827 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
828 m_trafficModel.find(trafficModel);
829 if (it == m_trafficModel.end())
830 {
831 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
832 }
833
834 return it->second.m_offTime;
835 }
836
837 void SetTrafficCodec(std::string trafficModel, SatTrafficHelper::VoipCodec_t codec)
838 {
839 std::map<std::string, TrafficConfiguration_t>::iterator it =
840 m_trafficModel.find(trafficModel);
841 if (it == m_trafficModel.end())
842 {
844 traffic.m_codec = codec;
845 m_trafficModel.emplace(trafficModel, traffic);
846 }
847 else
848 {
849 it->second.m_codec = codec;
850 }
851 }
852
853 SatTrafficHelper::VoipCodec_t GetTrafficCodec(std::string trafficModel) const
854 {
855 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
856 m_trafficModel.find(trafficModel);
857 if (it == m_trafficModel.end())
858 {
859 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
860 }
861
862 return it->second.m_codec;
863 }
864
865 void SetTrafficStartTime(std::string trafficModel, Time startTime)
866 {
867 std::map<std::string, TrafficConfiguration_t>::iterator it =
868 m_trafficModel.find(trafficModel);
869 if (it == m_trafficModel.end())
870 {
872 traffic.m_startTime = startTime;
873 m_trafficModel.emplace(trafficModel, traffic);
874 }
875 else
876 {
877 it->second.m_startTime = startTime;
878 }
879 }
880
881 Time GetTrafficStartTime(std::string trafficModel) const
882 {
883 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
884 m_trafficModel.find(trafficModel);
885 if (it == m_trafficModel.end())
886 {
887 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
888 }
889
890 return it->second.m_startTime;
891 }
892
893 void SetTrafficStopTime(std::string trafficModel, Time stopTime)
894 {
895 std::map<std::string, TrafficConfiguration_t>::iterator it =
896 m_trafficModel.find(trafficModel);
897 if (it == m_trafficModel.end())
898 {
900 traffic.m_startTime = stopTime;
901 m_trafficModel.emplace(trafficModel, traffic);
902 }
903 else
904 {
905 it->second.m_stopTime = stopTime;
906 }
907 }
908
909 Time GetTrafficStopTime(std::string trafficModel) const
910 {
911 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
912 m_trafficModel.find(trafficModel);
913 if (it == m_trafficModel.end())
914 {
915 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
916 }
917
918 return it->second.m_stopTime;
919 }
920
921 void SetTrafficStartDelay(std::string trafficModel, Time startDelay)
922 {
923 std::map<std::string, TrafficConfiguration_t>::iterator it =
924 m_trafficModel.find(trafficModel);
925 if (it == m_trafficModel.end())
926 {
928 traffic.m_startDelay = startDelay;
929 m_trafficModel.emplace(trafficModel, traffic);
930 }
931 else
932 {
933 it->second.m_startDelay = startDelay;
934 }
935 }
936
937 Time GetTrafficStartDelay(std::string trafficModel) const
938 {
939 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
940 m_trafficModel.find(trafficModel);
941 if (it == m_trafficModel.end())
942 {
943 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
944 }
945
946 return it->second.m_startDelay;
947 }
948
949 void SetTrafficPercentage(std::string trafficModel, double percentage)
950 {
951 std::map<std::string, TrafficConfiguration_t>::iterator it =
952 m_trafficModel.find(trafficModel);
953 if (it == m_trafficModel.end())
954 {
956 traffic.m_percentage = percentage;
957 m_trafficModel.emplace(trafficModel, traffic);
958 }
959 else
960 {
961 it->second.m_percentage = percentage;
962 }
963 }
964
965 double GetTrafficPercentage(std::string trafficModel) const
966 {
967 std::map<std::string, TrafficConfiguration_t>::const_iterator it =
968 m_trafficModel.find(trafficModel);
969 if (it == m_trafficModel.end())
970 {
971 NS_FATAL_ERROR("Traffic model " << trafficModel << " has not been configured");
972 }
973
974 return it->second.m_percentage;
975 }
976
977#define TRAFFIC_MODEL_PROTOCOL_ATTRIBUTE_ACCESSOR_DEFINE(index) \
978 inline void SetTraffic##index##Protocol(TransportLayerProtocol_t value) \
979 { \
980 return SetTrafficProtocol(TOSTRING(index), value); \
981 } \
982 inline TransportLayerProtocol_t GetTraffic##index##Protocol() const \
983 { \
984 return GetTrafficProtocol(TOSTRING(index)); \
985 }
986
987#define TRAFFIC_MODEL_DIRECTION_ATTRIBUTE_ACCESSOR_DEFINE(index) \
988 inline void SetTraffic##index##Direction(TrafficDirection_t value) \
989 { \
990 return SetTrafficDirection(TOSTRING(index), value); \
991 } \
992 inline TrafficDirection_t GetTraffic##index##Direction() const \
993 { \
994 return GetTrafficDirection(TOSTRING(index)); \
995 }
996
997#define TRAFFIC_MODEL_INTERVAL_ATTRIBUTE_ACCESSOR_DEFINE(index) \
998 inline void SetTraffic##index##Interval(Time value) \
999 { \
1000 return SetTrafficInterval(TOSTRING(index), value); \
1001 } \
1002 inline Time GetTraffic##index##Interval() const \
1003 { \
1004 return GetTrafficInterval(TOSTRING(index)); \
1005 }
1006
1007#define TRAFFIC_MODEL_DATA_RATE_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1008 inline void SetTraffic##index##DataRate(DataRate value) \
1009 { \
1010 return SetTrafficDataRate(TOSTRING(index), value); \
1011 } \
1012 inline DataRate GetTraffic##index##DataRate() const \
1013 { \
1014 return GetTrafficDataRate(TOSTRING(index)); \
1015 }
1016
1017#define TRAFFIC_MODEL_PACKET_SIZE_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1018 inline void SetTraffic##index##PacketSize(uint32_t value) \
1019 { \
1020 return SetTrafficPacketSize(TOSTRING(index), value); \
1021 } \
1022 inline uint32_t GetTraffic##index##PacketSize() const \
1023 { \
1024 return GetTrafficPacketSize(TOSTRING(index)); \
1025 }
1026
1027#define TRAFFIC_MODEL_ON_TIME_PATTERN_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1028 inline void SetTraffic##index##OnTimePattern(std::string value) \
1029 { \
1030 return SetTrafficOnTimePattern(TOSTRING(index), value); \
1031 } \
1032 inline std::string GetTraffic##index##OnTimePattern() const \
1033 { \
1034 return GetTrafficOnTimePattern(TOSTRING(index)); \
1035 }
1036
1037#define TRAFFIC_MODEL_OFF_TIME_PATTERN_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1038 inline void SetTraffic##index##OffTimePattern(std::string value) \
1039 { \
1040 return SetTrafficOffTimePattern(TOSTRING(index), value); \
1041 } \
1042 inline std::string GetTraffic##index##OffTimePattern() const \
1043 { \
1044 return GetTrafficOffTimePattern(TOSTRING(index)); \
1045 }
1046
1047#define TRAFFIC_MODEL_ON_TIME_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1048 inline void SetTraffic##index##OnTime(Time value) \
1049 { \
1050 return SetTrafficOnTime(TOSTRING(index), value); \
1051 } \
1052 inline Time GetTraffic##index##OnTime() const \
1053 { \
1054 return GetTrafficOnTime(TOSTRING(index)); \
1055 }
1056
1057#define TRAFFIC_MODEL_OFF_TIME_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1058 inline void SetTraffic##index##OffTime(Time value) \
1059 { \
1060 return SetTrafficOffTime(TOSTRING(index), value); \
1061 } \
1062 inline Time GetTraffic##index##OffTime() const \
1063 { \
1064 return GetTrafficOffTime(TOSTRING(index)); \
1065 }
1066
1067#define TRAFFIC_MODEL_CODEC_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1068 inline void SetTraffic##index##Codec(SatTrafficHelper::VoipCodec_t value) \
1069 { \
1070 return SetTrafficCodec(TOSTRING(index), value); \
1071 } \
1072 inline SatTrafficHelper::VoipCodec_t GetTraffic##index##Codec() const \
1073 { \
1074 return GetTrafficCodec(TOSTRING(index)); \
1075 }
1076
1077#define TRAFFIC_MODEL_START_TIME_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1078 inline void SetTraffic##index##StartTime(Time value) \
1079 { \
1080 return SetTrafficStartTime(TOSTRING(index), value); \
1081 } \
1082 inline Time GetTraffic##index##StartTime() const \
1083 { \
1084 return GetTrafficStartTime(TOSTRING(index)); \
1085 }
1086
1087#define TRAFFIC_MODEL_STOP_TIME_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1088 inline void SetTraffic##index##StopTime(Time value) \
1089 { \
1090 return SetTrafficStopTime(TOSTRING(index), value); \
1091 } \
1092 inline Time GetTraffic##index##StopTime() const \
1093 { \
1094 return GetTrafficStopTime(TOSTRING(index)); \
1095 }
1096
1097#define TRAFFIC_MODEL_START_DELAY_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1098 inline void SetTraffic##index##StartDelay(Time value) \
1099 { \
1100 return SetTrafficStartDelay(TOSTRING(index), value); \
1101 } \
1102 inline Time GetTraffic##index##StartDelay() const \
1103 { \
1104 return GetTrafficStartDelay(TOSTRING(index)); \
1105 }
1106
1107#define TRAFFIC_MODEL_PERCENTAGE_ATTRIBUTE_ACCESSOR_DEFINE(index) \
1108 inline void SetTraffic##index##Percentage(double value) \
1109 { \
1110 return SetTrafficPercentage(TOSTRING(index), value); \
1111 } \
1112 inline double GetTraffic##index##Percentage() const \
1113 { \
1114 return GetTrafficPercentage(TOSTRING(index)); \
1115 }
1116
1123
1130
1139
1150
1156
1162
1172
1179
1181 Ptr<SatTrafficHelper> m_trafficHelper;
1182};
1183
1184} // namespace ns3
1185
1186#endif /* __SATELLITE_TRAFFIC_HELPER_H__ */
1187
1188// More generic
1189// call functons AddVoipTraffic, AddPoissonTraffic, etc.
1190// each one call a generic function (with for loops). Has a additionnal function -> subfunction, for
1191// traffic with parameters Subfunction (private) call GW*UT times
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.
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
TransportLayerProtocol_t m_protocol
Struct for info on last custom trafic created.