12#ifndef WSFCOMMPROTOCOLOSPF_HPP
13#define WSFCOMMPROTOCOLOSPF_HPP
15#include "wsf_export.h"
19#include "UtCallbackHolder.hpp"
83 using AreaVector = std::vector<std::shared_ptr<OSPF_Area>>;
86 using AreaGraphMap = std::map<Address, std::unique_ptr<graph::Graph>>;
124 void Setup()
override;
125 bool ProcessInput(UtInput& aInput)
override;
126 bool Initialize(
double aSimTime)
override;
137 bool Receive(
double aSimTime,
const Address& aReceivingInterface,
Message& aMessage,
bool& aOverrideForward)
override;
139 std::vector<Address> Routing(
double aSimTime,
140 const Address& aSendingInterface,
143 const Message& aMessage)
override;
153 void SetGraph(
const Address& aArea, std::unique_ptr<graph::Graph> aGraph);
169 Comm* GetPriorityInterface(
const std::string aNetwork)
const;
172 void PlatformInitialized(
double aSimTime,
WsfPlatform* aPlatformPtr);
201 std::set<std::shared_ptr<OSPF_Area>>
GetAllAreas();
224 std::set<Address>& aCheckedAreas);
247 const Address& aSendingAddress,
248 const Address& aDestinationAddress,
277 const Address& aReceiverAddress,
278 const std::vector<Address>& aValidAreas,
281 void SendDR_GraphAdd(
double aSimTime,
const Address& aReceivingInterface,
const std::vector<Address>& aTraceRoute);
283 const Address& aReceivingInterface,
284 const std::vector<Address>& aValidAreas,
287 const Address& aReceivingInterface,
288 const Address& aDroppedInterface,
289 const std::string& aDroppedInterfaceNetwork);
291 const Address& aReceivingInterface,
292 const std::vector<Address>& aValidAreas,
307 const Address& aDroppedInterface,
308 const std::string& aDroppedNetwork);
329 std::vector<Address> mInputAreas{};
331 size_t mPriorityDR{std::numeric_limits<size_t>::max()};
332 RouterAreaType mAreaType{RouterAreaType::cNORMAL};
355 AreaGraphMap mGraph{};
359 LinkStateMap mLinkStates{};
362 std::shared_ptr<int> mContext{
nullptr};
365 UtCallbackHolder mCallbacks{};
414 void AddRemovedInterfaceDR(
Comm* aInterfacePtr);
416 void AddRemovedInterfaceBDR(
Comm* aInterfacePtr);
425 ProtocolVector GetProtocols(
const std::string& aNetwork);
435 void PlatformDeleted(
double aSimTime,
WsfPlatform* aPlatformPtr);
448 std::vector<std::pair<Comm*, ProtocolOSPF*>> GetInterfaces();
461 void ElectionDR(
double aSimTime,
const std::string aNetwork,
const Address& aArea,
bool aElectionDR);
471 ProtocolMapDR mMapDR{};
472 ProtocolMapDR mMapBDR{};
474 bool mIsBackbone{
false};
475 ProtocolVector mProtocols{};
476 std::set<std::string> mNetworks{};
477 RemovedNetworkInterfaces mRemovedInterfacesDR{};
478 RemovedNetworkInterfaces mRemovedInterfacesBDR{};
481 UtCallbackHolder mCallbacks{};
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
@ cWSF_COMPONENT_COMM_ROUTER_PROTOCOL_OSPF
Definition WsfComponentRoles.hpp:126
wsf::comm::Address Address
Definition WsfScriptCommRouterClass.cpp:29
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfComponent.hpp:39
@ cNON_NEGATIVE
Value must be greater than or equal to zero.
Definition WsfRandomVariable.hpp:50
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfCommAddress.hpp:57
Definition WsfComm.hpp:43
Definition WsfCommMessage.hpp:51
Definition WsfCommGraph.hpp:150
Definition WsfCommProtocolOSPF.hpp:392
std::set< std::string > & GetNetworks()
Definition WsfCommProtocolOSPF.hpp:427
std::map< std::string, ProtocolOSPF * > ProtocolMapDR
ProtocolMapDR provides a mapping of networks to their DR/BDR.
Definition WsfCommProtocolOSPF.hpp:398
std::map< std::string, std::vector< Address > > RemovedNetworkInterfaces
Definition WsfCommProtocolOSPF.hpp:404
void SetAddress(const Address &aAddress)
Definition WsfCommProtocolOSPF.hpp:409
void SetBackbone(bool aIsBackbone)
Definition WsfCommProtocolOSPF.hpp:410
std::vector< ProtocolOSPF * > ProtocolVector
ProtocolVector provides a vector of OSPF protocols.
Definition WsfCommProtocolOSPF.hpp:395
RemovedNetworkInterfaces & GetRemovedInterfacesBDR()
Definition WsfCommProtocolOSPF.hpp:415
RemovedNetworkInterfaces & GetRemovedInterfacesDR()
Definition WsfCommProtocolOSPF.hpp:413
const ProtocolMapDR & GetBDRs() const
Definition WsfCommProtocolOSPF.hpp:419
bool IsBackbone() const
Definition WsfCommProtocolOSPF.hpp:412
const Address & GetAddress() const
Definition WsfCommProtocolOSPF.hpp:411
ProtocolVector & GetProtocols()
Definition WsfCommProtocolOSPF.hpp:421
const ProtocolMapDR & GetDRs() const
Definition WsfCommProtocolOSPF.hpp:418
virtual ~OSPF_Area()=default
ProtocolInterface()=default
Definition WsfCommProtocolOSPF.hpp:74
AreaVector & GetAreas()
Definition WsfCommProtocolOSPF.hpp:156
std::vector< std::shared_ptr< OSPF_Area > > AreaVector
Definition WsfCommProtocolOSPF.hpp:83
void VerifyBackboneConnections(const AreaVector &aAreas)
Definition WsfCommProtocolOSPF.cpp:920
WsfComponent * CloneComponent() const override
Definition WsfCommProtocolOSPF.cpp:86
void ReceiveHello(double aSimTime, const Address &aReceiverAddress, const std::vector< Address > &aValidAreas, Message &aMessage)
Definition WsfCommProtocolOSPF.cpp:1009
void ReceiveDR_GraphDrop(double aSimTime, const Address &aReceivingInterface, const std::vector< Address > &aValidAreas, Message &aMessage)
Definition WsfCommProtocolOSPF.cpp:1262
void ReceiveDR_GraphAdd(double aSimTime, const Address &aReceivingInterface, const std::vector< Address > &aValidAreas, Message &aMessage)
Definition WsfCommProtocolOSPF.cpp:1202
void AddLinkState(const Address &aAreaAddress, const LinkStateData &aData)
Definition WsfCommProtocolOSPF.cpp:1392
void SendDR_GraphDrop(double aSimTime, const Address &aReceivingInterface, const Address &aDroppedInterface, const std::string &aDroppedInterfaceNetwork)
Definition WsfCommProtocolOSPF.cpp:1232
LinkStateData * FindLinkState(const Address &aAreaAddress, const Address &aLocalAddress, const Address &aRemoteAddress)
Definition WsfCommProtocolOSPF.cpp:1417
const LinkStateMap & GetLinkStates() const
Definition WsfCommProtocolOSPF.hpp:323
LinkStateMap::iterator LinkStateIt
Definition WsfCommProtocolOSPF.hpp:193
std::set< ProtocolOSPF * > GetAllASBR(ProtocolOSPF &aProtocol, std::set< Address > &aCheckedAreas)
Provides all of the ASBRs in contiguous OSPF areas.
Definition WsfCommProtocolOSPF.cpp:1362
RouterAreaType GetAreaType() const
Definition WsfCommProtocolOSPF.hpp:162
void SendDR_GraphAdd(double aSimTime, const Address &aReceivingInterface, const std::vector< Address > &aTraceRoute)
Definition WsfCommProtocolOSPF.cpp:1169
std::map< Address, std::vector< LinkStateData > > LinkStateMap
Definition WsfCommProtocolOSPF.hpp:192
void * QueryInterface(int aRole) override
Definition WsfCommProtocolOSPF.cpp:108
size_t GetPriorityDR() const
Definition WsfCommProtocolOSPF.hpp:164
const int * GetComponentRoles() const override
Definition WsfCommProtocolOSPF.cpp:92
void SetSetup(bool aSetup)
Definition WsfCommProtocolOSPF.hpp:161
std::set< std::shared_ptr< OSPF_Area > > GetAllAreas()
Convenience method for runtime acquisition of all existing areas.
Definition WsfCommProtocolOSPF.cpp:811
bool IsSetup() const
Definition WsfCommProtocolOSPF.hpp:160
std::map< Address, std::unique_ptr< graph::Graph > > AreaGraphMap
A mapping of an area with the corresponding graph/routing table.
Definition WsfCommProtocolOSPF.hpp:86
static constexpr const char * cOSPF_ALL_HELLO
Definition WsfCommProtocolOSPF.hpp:90
std::vector< Address > MyMessage(Message &aMessage) const
Definition WsfCommProtocolOSPF.cpp:375
static constexpr const char * cOSPF_ALL_DR_DROP
Definition WsfCommProtocolOSPF.hpp:92
Address InterfaceInContiguousOSPF(const Address &aDestinationInterface, ProtocolOSPF &aProtocol, std::set< Address > &aCheckedAreas)
Definition WsfCommProtocolOSPF.cpp:1329
void SetRouterRoleType(ProtocolOSPF &aProtocol)
A method that determines and sets the OSPF router type.
Definition WsfCommProtocolOSPF.cpp:828
const char * GetScriptClassName() const override
Definition WsfCommProtocolOSPF.hpp:119
void SendHello(double aSimTime)
Definition WsfCommProtocolOSPF.cpp:979
const std::vector< Address > & GetInputAreas() const
Definition WsfCommProtocolOSPF.hpp:158
bool ShouldPropagateTruth() const override
Definition WsfCommProtocolOSPF.hpp:152
std::vector< Address > RouteToBackbone(ProtocolOSPF &aProtocol, const Address &aSendingAddress, double &aCost, size_t &aHops)
Definition WsfCommProtocolOSPF.cpp:660
bool RemoveLinkState(const Address &aAreaAddress, const Address &aLocalAddress, const Address &aRemoteAddress)
Definition WsfCommProtocolOSPF.cpp:1464
void InitializeLinkState(const AreaVector &aAreas, graph::Graph &aGraph)
Definition WsfCommProtocolOSPF.cpp:1292
RouterAreaType
Definition WsfCommProtocolOSPF.hpp:97
void DR_GraphDrop(graph::Graph &aGraph, const Address &aArea, const Address &aDroppedInterface, const std::string &aDroppedNetwork)
Definition WsfCommProtocolOSPF.cpp:1108
int GetPriority() const override
Definition WsfCommProtocolOSPF.cpp:123
LinkStateMap & GetLinkStates()
Definition WsfCommProtocolOSPF.hpp:324
static constexpr const char * cOSPF_ALL_DR_ADD
Definition WsfCommProtocolOSPF.hpp:93
void TimeoutUpdate(double aSimTime, bool aCalledFromEvent)
Handles the update of the link state list for checks on dropped interfaces via timeout.
Definition WsfCommProtocolOSPF.cpp:1505
ProtocolVector GetAllOSPF()
Definition WsfCommProtocolOSPF.cpp:788
ProtocolOSPF * Clone() const override
Definition WsfCommProtocolOSPF.cpp:102
const Address & GetInputBackbone() const
Definition WsfCommProtocolOSPF.hpp:159
void SetAreaType(RouterAreaType aType)
Definition WsfCommProtocolOSPF.hpp:163
void DR_GraphAdd(graph::Graph &aGraph, const Address &aReceivingInterface, const std::vector< Address > &aTraceRoute)
Definition WsfCommProtocolOSPF.cpp:1071
std::vector< ProtocolOSPF * > ProtocolVector
ProtocolVector provides a vector of OSPF protocols.
Definition WsfCommProtocolOSPF.hpp:77
static constexpr const char * cOSPF_ALL_DROP
Definition WsfCommProtocolOSPF.hpp:91
std::vector< Address > RouteFromBackbone(ProtocolOSPF &aProtocol, const Address &aSendingAddress, const Address &aDestinationAddress, double &aCost, size_t &aHops)
Definition WsfCommProtocolOSPF.cpp:582
void ScheduleEvent(std::unique_ptr< WsfEvent > aEvent) const
Definition WsfCommProtocolOSPF.cpp:1492
~ProtocolOSPF() override=default
std::pair< std::vector< Address >, Comm * > RouteExternallyASBR(const Message &aMessage)
Definition WsfCommProtocolOSPF.cpp:734
Definition WsfCommRouter.hpp:60
Definition WsfCommRouter.hpp:55
Definition WsfComm.hpp:36
Definition WsfComm.cpp:34
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Definition WsfCommProtocolOSPF.hpp:182
std::string mRemoteNetwork
Definition WsfCommProtocolOSPF.hpp:186
Address mLocalInterface
Definition WsfCommProtocolOSPF.hpp:183
Address mRemoteInterface
Definition WsfCommProtocolOSPF.hpp:184
std::string mLocalNetwork
Definition WsfCommProtocolOSPF.hpp:185
double mLastUpdateTime
Definition WsfCommProtocolOSPF.hpp:187