Loading...
Searching...
No Matches
satellite-beam-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) 2018 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: Sami Rantanen <sami.rantanen@magister.fi>
20 * Author: Mathias Ettinger <mettinger@viveris.toulouse.fr>
21 */
22
23#ifndef SATELLITE_BEAM_HELPER_H
24#define SATELLITE_BEAM_HELPER_H
25
26#include "satellite-gw-helper.h"
28#include "satellite-ut-helper.h"
29
30#include "ns3/ipv4-address-helper.h"
31#include "ns3/node-container.h"
32#include "ns3/satellite-antenna-gain-pattern-container.h"
33#include "ns3/satellite-beam-channel-pair.h"
34#include "ns3/satellite-bstp-controller.h"
35#include "ns3/satellite-markov-container.h"
36#include "ns3/satellite-mobility-observer.h"
37#include "ns3/satellite-ncc.h"
38#include "ns3/satellite-packet-trace.h"
39#include "ns3/satellite-phy-rx-carrier-conf.h"
40#include "ns3/satellite-superframe-sequence.h"
41#include "ns3/satellite-typedefs.h"
42
43#include <list>
44#include <map>
45#include <set>
46#include <stdint.h>
47#include <string>
48#include <utility>
49#include <vector>
50
51namespace ns3
52{
53
54class PropagationDelayModel;
55
64class SatBeamHelper : public Object
65{
66 public:
71
76
77 typedef std::pair<uint32_t, uint32_t> FrequencyPair_t; // user = first, feeder = second
78 typedef std::pair<uint32_t, uint32_t> GwLink_t; // first GW ID, second feeder link frequency id
79
80 typedef std::set<Ptr<Node>>
81 MulticastBeamInfoItem_t; // set container having receiving UT nodes in beam
82 typedef std::map<uint32_t, std::set<Ptr<Node>>>
83 MulticastBeamInfo_t; // key = beam ID, value = receiving UT nodes in beam
84
89 static TypeId GetTypeId(void);
90
95
106 SatBeamHelper(std::vector<std::pair<uint32_t, uint32_t>> isls,
107 SatTypedefs::CarrierBandwidthConverter_t bandwidthConverterCb,
108 uint32_t fwdLinkCarrierCount,
109 uint32_t rtnLinkCarrierCount,
110 Ptr<SatSuperframeSeq> seq);
111
120 virtual void NotifyConstructionCompleted() override;
121
126 {
127 }
128
133 void Init();
134
144 void SetAntennaGainPatterns(Ptr<SatAntennaGainPatternContainer> antennaPatterns);
145
156 void SetDeviceAttribute(std::string name, const AttributeValue& value);
157
168 void SetChannelAttribute(std::string name, const AttributeValue& value);
169
175
194 std::pair<Ptr<NetDevice>, NetDeviceContainer> Install(
195 NodeContainer ut,
196 Ptr<Node> gwNode,
197 uint32_t gwId,
198 uint32_t satId,
199 uint32_t beamId,
200 uint32_t rtnUlFreqId,
201 uint32_t rtnFlFreqId,
202 uint32_t fwdUlFreqId,
203 uint32_t fwdFlFreqId,
204 SatMac::RoutingUpdateCallback routingCallback);
205
224 Ptr<NetDevice> InstallFeeder(Ptr<SatOrbiterNetDevice> orbiterNetDevice,
225 Ptr<Node> gwNode,
226 uint32_t gwId,
227 uint32_t satId,
228 uint32_t beamId,
229 uint32_t feederSatId,
230 uint32_t feederBeamId,
232 uint32_t rtnFlFreqId,
233 uint32_t fwdFlFreqId,
234 SatMac::RoutingUpdateCallback routingCallback);
235
252 NetDeviceContainer InstallUser(Ptr<SatOrbiterNetDevice> orbiterNetDevice,
253 NodeContainer ut,
254 Ptr<NetDevice> gwNd,
255 uint32_t satId,
256 uint32_t beamId,
258 uint32_t rtnUlFreqId,
259 uint32_t fwdUlFreqId,
260 SatMac::RoutingUpdateCallback routingCallback);
261
265 void InstallIsls();
266
270 void SetIslRoutes();
271
278 uint32_t GetGwId(uint32_t satId, uint32_t beamId) const;
279
285 NodeContainer GetUtNodes(uint32_t satId, uint32_t beamId) const;
286
291 std::list<std::pair<uint32_t, uint32_t>> GetBeams() const;
292
298 void EnableCreationTraces(Ptr<OutputStreamWrapper> stream, CallbackBase& cb);
299
303 std::string GetBeamInfo() const;
304
308 std::string GetUtInfo() const;
309
317 Ptr<Node> GetGwNode(uint32_t gwId) const;
318
322 Ptr<SatUtHelper> GetUtHelper() const;
323
327 Ptr<SatGwHelper> GetGwHelper() const;
328
332 Ptr<SatOrbiterHelper> GetOrbiterHelper() const;
333
337 Ptr<SatNcc> GetNcc() const;
338
345 uint32_t GetUtBeamId(Ptr<Node> utNode) const;
346
359 NetDeviceContainer AddMulticastGroupRoutes(MulticastBeamInfo_t beamInfo,
360 Ptr<Node> sourceUtNode,
361 Ipv4Address sourceAddress,
362 Ipv4Address groupAddress,
363 bool routeToGwUsers,
364 Ptr<NetDevice>& gwOutputDev);
365
369 virtual void DoDispose();
370
376 void EnablePacketTrace();
377
378 Ptr<PropagationDelayModel> GetPropagationDelayModel(uint32_t satId,
379 uint32_t beamId,
380 SatEnums::ChannelType_t channelType);
381
383
384 private:
387
390
391 Ptr<SatSuperframeSeq> m_superframeSeq;
392
393 ObjectFactory m_channelFactory;
394 Ptr<SatOrbiterHelper> m_orbiterHelper;
395 Ptr<SatGwHelper> m_gwHelper;
396 Ptr<SatUtHelper> m_utHelper;
397 Ptr<SatNcc> m_ncc;
398
399 Ptr<SatAntennaGainPatternContainer> m_antennaGainPatterns;
400
401 std::map<std::pair<uint32_t, uint32_t>, uint32_t>
402 m_beam; // first pair sat ID / beam ID, second GW ID
403 std::map<uint32_t, Ptr<Node>> m_gwNode; // first GW ID, second node pointer
404 std::multimap<std::pair<uint32_t, uint32_t>, Ptr<Node>>
405 m_utNode; // first pair sat ID / beam ID, second node pointer of the UT
406 Ptr<SatChannelPair> m_ulChannels; // user link ID, channel pointers pair
407 Ptr<SatChannelPair> m_flChannels; // feeder link ID, channel pointers pair
408 std::map<std::pair<uint32_t, uint32_t>, FrequencyPair_t>
409 m_beamFreqs; // first beam ID, channel frequency IDs pair
410
414 TracedCallback<std::string> m_creationTrace;
415
421
426
431
436
441
445 Ptr<SatMarkovConf> m_markovConf;
446
453
459
464
469
474
479
485
492
497 Ptr<SatBstpController> m_bstpController;
498
502 Ptr<SatPacketTrace> m_packetTrace;
503
508
513 std::string CreateBeamInfo() const;
514
524 uint32_t beamId,
525 uint32_t fwdFrequencyId,
526 uint32_t rtnFrequencyId,
527 bool isUserLink);
528
537 bool StoreGwNode(uint32_t id, Ptr<Node> node);
538
545 Ptr<SatBaseFading> InstallFadingContainer(Ptr<Node> node) const;
546
555 void AddMulticastRouteToUt(Ptr<Node> utNode,
556 Ipv4Address sourceAddress,
557 Ipv4Address groupAddress,
558 bool routeToSatellite);
559
564
568 std::map<uint32_t, Ptr<NetDevice>> m_gwNdMap;
569
573 std::vector<std::pair<uint32_t, uint32_t>> m_isls;
574};
575
576} // namespace ns3
577
578#endif /* SATELLITE_BEAM_HELPER_H */
void SetAntennaGainPatterns(Ptr< SatAntennaGainPatternContainer > antennaPatterns)
Set the antenna gain patterns to be used when configuring the beams to the satellite.
NetDeviceContainer AddMulticastGroupRoutes(MulticastBeamInfo_t beamInfo, Ptr< Node > sourceUtNode, Ipv4Address sourceAddress, Ipv4Address groupAddress, bool routeToGwUsers, Ptr< NetDevice > &gwOutputDev)
std::map< std::pair< uint32_t, uint32_t >, uint32_t > m_beam
SatEnums::DvbVersion_t m_dvbVersion
Indicates if using DVB-S2 or DVB-S2X.
Time m_constantPropagationDelay
Constant propagation delay.
bool m_printDetailedInformationToCreationTraces
Flag indicating whether to print detailed information to the creation traces.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
Ptr< SatChannelPair > m_flChannels
virtual void NotifyConstructionCompleted() override
Notifier called once the ObjectBase is fully constructed.
void SetIslRoutes()
Set ISL routes.
SatChannel::CarrierFreqConverter CarrierFreqConverter
Define type CarrierFreqConverter.
Ptr< SatSuperframeSeq > m_superframeSeq
bool StoreGwNode(uint32_t id, Ptr< Node > node)
Creates GW node according to given id and stores GW to map.
Ptr< SatBstpController > m_bstpController
Beam Switching Time Plan controller, which is created if FWD link beam hopping is enabled (m_enableFw...
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
void InstallIsls()
Create all the ISLs.
Ptr< SatGwHelper > GetGwHelper() const
SatEnums::PropagationDelayModel_t GetPropagationDelayModelEnum()
Ptr< SatAntennaGainPatternContainer > m_antennaGainPatterns
SatTypedefs::CarrierBandwidthConverter_t m_carrierBandwidthConverter
CarrierFreqConverter m_carrierFreqConverter
std::set< Ptr< Node > > MulticastBeamInfoItem_t
bool m_enableFwdLinkBeamHopping
Flag indicating whether beam hopping is enabled in FWD link.
Ptr< SatUtHelper > GetUtHelper() const
void EnableCreationTraces(Ptr< OutputStreamWrapper > stream, CallbackBase &cb)
Enables creation traces to be written in given file.
uint32_t GetGwId(uint32_t satId, uint32_t beamId) const
std::map< uint32_t, Ptr< NetDevice > > m_gwNdMap
Map used in regenerative mode to store GW Net device (we need only one per GW).
NodeContainer GetUtNodes(uint32_t satId, uint32_t beamId) const
SatTypedefs::CarrierBandwidthConverter_t CarrierBandwidthConverter
Define type CarrierBandwidthConverter.
virtual void DoDispose()
Dispose of this class instance.
Ptr< PropagationDelayModel > GetPropagationDelayModel(uint32_t satId, uint32_t beamId, SatEnums::ChannelType_t channelType)
TracedCallback< std::string > m_creationTrace
Trace callback for creation traces.
std::pair< Ptr< NetDevice >, NetDeviceContainer > Install(NodeContainer ut, Ptr< Node > gwNode, uint32_t gwId, uint32_t satId, uint32_t beamId, uint32_t rtnUlFreqId, uint32_t rtnFlFreqId, uint32_t fwdUlFreqId, uint32_t fwdFlFreqId, SatMac::RoutingUpdateCallback routingCallback)
NetDeviceContainer InstallUser(Ptr< SatOrbiterNetDevice > orbiterNetDevice, NodeContainer ut, Ptr< NetDevice > gwNd, uint32_t satId, uint32_t beamId, SatChannelPair::ChannelPair_t userLink, uint32_t rtnUlFreqId, uint32_t fwdUlFreqId, SatMac::RoutingUpdateCallback routingCallback)
SatBeamHelper()
Default constructor for SatBeamHelper (should not be used).
SatEnums::LinkResults_t m_rlLinkResultsType
Type of Return channel link results.
std::string GetBeamInfo() const
uint32_t GetUtBeamId(Ptr< Node > utNode) const
Get beam Id of the given UT.
Ptr< SatNcc > GetNcc() const
Ptr< SatBaseFading > InstallFadingContainer(Ptr< Node > node) const
Install fading model to node, if fading model doesn't exist already in node.
Time m_ctrlMsgStoreTimeFwdLink
Control message store time in container for forward link.
SatPhyRxCarrierConf::RandomAccessCollisionModel m_raCollisionModel
The used collision model for random access.
std::pair< uint32_t, uint32_t > FrequencyPair_t
std::map< std::pair< uint32_t, uint32_t >, FrequencyPair_t > m_beamFreqs
std::map< uint32_t, Ptr< Node > > m_gwNode
std::list< std::pair< uint32_t, uint32_t > > GetBeams() const
Ptr< SatMarkovConf > m_markovConf
Common configuration for Markov model.
Ptr< SatUtHelper > m_utHelper
void AddMulticastRouteToUt(Ptr< Node > utNode, Ipv4Address sourceAddress, Ipv4Address groupAddress, bool routeToSatellite)
Add multicast route to UT node.
Ptr< SatOrbiterHelper > GetOrbiterHelper() const
Ptr< NetDevice > InstallFeeder(Ptr< SatOrbiterNetDevice > orbiterNetDevice, Ptr< Node > gwNode, uint32_t gwId, uint32_t satId, uint32_t beamId, uint32_t feederSatId, uint32_t feederBeamId, SatChannelPair::ChannelPair_t feederLink, uint32_t rtnFlFreqId, uint32_t fwdFlFreqId, SatMac::RoutingUpdateCallback routingCallback)
std::pair< uint32_t, uint32_t > GwLink_t
Ptr< SatOrbiterHelper > m_orbiterHelper
static TypeId GetTypeId(void)
Get the type ID.
std::string GetUtInfo() const
std::string CreateBeamInfo() const
Creates info of the beam.
SatEnums::PropagationDelayModel_t m_propagationDelayModel
Propagation delay model.
void EnablePacketTrace()
Enable packet traces.
void Init()
Init method is called after all the initial configurations have been done by the SatHelper and SatBea...
SatPhyRxCarrierConf::InterferenceEliminationModel m_raInterferenceEliminationModel
The used interference model for random access.
Ptr< SatPacketTrace > m_packetTrace
Packet trace.
SatEnums::FadingModel_t m_fadingModel
Configured fading model.
Ptr< Node > GetGwNode(uint32_t gwId) const
Gets GW node according to given id.
SatChannelPair::ChannelPair_t GetChannelPair(uint32_t satId, uint32_t beamId, uint32_t fwdFrequencyId, uint32_t rtnFrequencyId, bool isUserLink)
Gets satellite channel pair from requested map.
std::vector< std::pair< uint32_t, uint32_t > > m_isls
Vector constaining all the ISLs of the topology.
SatEnums::RandomAccessModel_t m_randomAccessModel
The used random access model.
Time m_ctrlMsgStoreTimeRtnLink
Control message store in container for return link.
Ptr< SatChannelPair > m_ulChannels
virtual ~SatBeamHelper()
Destructor for SatBeamHelper.
Ptr< SatGwHelper > m_gwHelper
std::map< uint32_t, std::set< Ptr< Node > > > MulticastBeamInfo_t
SatPhyRxCarrierConf::InterferenceModel m_raInterferenceModel
The used interference model for random access.
double m_raConstantErrorRate
Constant error rate for random access.
void SetNccRoutingCallback(SatNcc::UpdateRoutingCallback cb)
Attach an update routing callback to the NCC of this simulation.
std::multimap< std::pair< uint32_t, uint32_t >, Ptr< Node > > m_utNode
bool m_enableTracesOnReturnLink
Helper flag to activate packet traces on the return link only.
Callback< double, SatEnums::ChannelType_t, uint32_t, uint32_t > CarrierFreqConverter
std::pair< Ptr< SatChannel >, Ptr< SatChannel > > ChannelPair_t
LinkResults_t
Return link Link result types.
ChannelType_t
Types of channel.
PropagationDelayModel_t
Propagation delay model.
RandomAccessModel_t
The defined random access models.
FadingModel_t
Fading models.
DvbVersion_t
The scheduling algorithm used to fill the BBFrames.
Callback< void, Address, Address > RoutingUpdateCallback
Callback to update routing and ARP tables after handover.
Callback< void, Address, Address, Address > UpdateRoutingCallback
Update routes and ARP tables on gateways after a terminal handover.
InterferenceEliminationModel
Interference cancelation model enum.
RandomAccessCollisionModel
Random access collision model enum.
InterferenceModel
Interference model enum.
Callback< double, SatEnums::ChannelType_t, uint32_t, SatEnums::CarrierBandwidthType_t > CarrierBandwidthConverter_t
Callback for carrier bandwidths.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.