5G-LENA nr-v4.0-29-g6d8085cd
The 5G/NR module for the ns-3 simulator
Loading...
Searching...
No Matches
xr-traffic-mixer-helper.cc
1// Copyright (c) 2022 CTTC
2// Copyright (c) 2023 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
3//
4// SPDX-License-Identifier: GPL-2.0-only
5
6#include "xr-traffic-mixer-helper.h"
7
8#include "ns3/log.h"
9#include "ns3/nstime.h"
10#include "ns3/simulator.h"
11#include "ns3/uinteger.h"
12
13namespace ns3
14{
15
16NS_LOG_COMPONENT_DEFINE("XrTrafficMixerHelper");
17NS_OBJECT_ENSURE_REGISTERED(XrTrafficMixerHelper);
18
19const std::map<NrXrConfig, std::list<TypeId>> XrPreconfig = {
20 {AR_M3,
24 {AR_M3_V2,
29 {VR_DL2,
33 {CG_DL2,
37};
38
39enum NrXrConfig
40GetXrTrafficType(const std::string& item)
41{
42 if (item == "AR_M3")
43 {
44 return AR_M3;
45 }
46 else if (item == "AR_M3_V2")
47 {
48 return AR_M3_V2;
49 }
50 else if (item == "VR_DL1")
51 {
52 return VR_DL1;
53 }
54 else if (item == "VR_DL2")
55 {
56 return VR_DL2;
57 }
58 else if (item == "VR_UL")
59 {
60 return VR_UL;
61 }
62 else if (item == "CG_DL1")
63 {
64 return CG_DL1;
65 }
66 else if (item == "CG_DL2")
67 {
68 return CG_DL2;
69 }
70 else if (item == "CG_UL")
71 {
72 return CG_UL;
73 }
74 else if (item == "NGMN_VOICE")
75 {
76 return NGMN_VOICE;
77 }
78 else
79 {
80 NS_ABORT_MSG("Unknown traffic type");
81 }
82}
83
84std::string
85GetXrTrafficName(const NrXrConfig& item)
86{
87 switch (item)
88 {
89 case AR_M3:
90 return "AR_M3";
91 case AR_M3_V2:
92 return "AR_M3_V2";
93 case VR_DL1:
94 return "VR_DL1";
95 case VR_DL2:
96 return "VR_DL2";
97 case VR_UL:
98 return "VR_UL";
99 case CG_DL1:
100 return "CG_DL1";
101 case CG_DL2:
102 return "CG_DL2";
103 case CG_UL:
104 return "CG_UL";
105 case NGMN_VOICE:
106 return "NGMN_VOICE";
107 default:
108 NS_ABORT_MSG("Unknown traffic type");
109 };
110}
111
112TypeId
114{
115 static TypeId tid =
116 TypeId("ns3::XrTrafficMixerHelper").SetParent<Object>().SetGroupName("Applications");
117 return tid;
118}
119
120XrTrafficMixerHelper::XrTrafficMixerHelper()
121{
122 NS_LOG_FUNCTION(this);
123}
124
125void
126XrTrafficMixerHelper::AddStream(TypeId trafficGenerator)
127{
128 NS_LOG_FUNCTION(this);
129 m_trafficStreams.push_back(trafficGenerator);
130}
131
132XrTrafficMixerHelper::~XrTrafficMixerHelper()
133{
134 NS_LOG_FUNCTION(this);
135 m_trafficStreams.clear();
136}
137
138void
139XrTrafficMixerHelper::ConfigureXr(NrXrConfig xrTrafficType)
140{
141 NS_LOG_FUNCTION(this);
142 auto it = XrPreconfig.find(xrTrafficType);
143 NS_ASSERT_MSG(it != XrPreconfig.end(), "Unknown NrXrConfig configuration.");
144 NS_ASSERT_MSG(m_trafficStreams.empty(),
145 "Some traffic streams were already set. Default XR configuration failed.");
146 for (const auto& streamType : it->second)
147 {
148 m_trafficStreams.push_back(streamType);
149 }
150}
151
152ApplicationContainer
153XrTrafficMixerHelper::Install(std::string transportProtocol,
154 std::vector<Address>& remoteAddresses,
155 Ptr<Node> trafficGeneratorNode)
156{
157 NS_LOG_FUNCTION(this);
158 NS_ASSERT(!m_trafficStreams.empty() && m_trafficStreams.size() <= 3);
159 NS_ASSERT(!remoteAddresses.empty() && remoteAddresses.size() <= 3);
160 NS_ASSERT(remoteAddresses.size() >= m_trafficStreams.size());
161 uint16_t index = 0;
162
163 ApplicationContainer trafficGeneratorApps;
164 for (const auto& trafficTypeId : m_trafficStreams)
165 {
166 TrafficGeneratorHelper trafficHelper(transportProtocol,
167 remoteAddresses[index],
168 trafficTypeId);
169 trafficGeneratorApps.Add(trafficHelper.Install(trafficGeneratorNode));
170 index++;
171 }
172 return trafficGeneratorApps;
173}
174
175} // Namespace ns3
static TypeId GetTypeId()
Get the type ID.
static TypeId GetTypeId()
Get the type ID.
static TypeId GetTypeId()
Get the type ID.