12#ifndef WSFCOMMPROTOCOLRIPV2_HPP
13#define WSFCOMMPROTOCOLRIPV2_HPP
37 constexpr IPv4() noexcept = default;
39 constexpr
IPv4(
std::uint8_t a,
std::uint8_t b,
std::uint8_t c,
std::uint8_t d) noexcept
44 explicit constexpr IPv4(std::uint32_t aVal) noexcept
45 : mData{{
static_cast<std::uint8_t
>((aVal >> 24) & 0xFF),
46 static_cast<std::uint8_t
>((aVal >> 16) & 0xFF),
47 static_cast<std::uint8_t
>((aVal >> 8) & 0xFF),
48 static_cast<std::uint8_t
>(aVal & 0xFF)}}
54 std::stringstream str;
55 str << std::to_string(mData[0]) <<
'.' << std::to_string(mData[1]) <<
'.' << std::to_string(mData[2]) <<
'.'
56 << std::to_string(mData[3]);
62 return static_cast<std::uint32_t
>(mData[0] << 24) |
static_cast<std::uint32_t
>(mData[1] << 16) |
63 static_cast<std::uint32_t
>(mData[2] << 8) |
static_cast<std::uint32_t
>(mData[3]);
66 bool operator==(
const IPv4& rhs)
const noexcept {
return mData == rhs.mData; }
75 std::array<std::uint8_t, 4> mData{{0, 0, 0, 0}};
80 return IPv4{lhs.to_uint32() | rhs.to_uint32()};
85 return IPv4{lhs.to_uint32() & rhs.to_uint32()};
135 const int* GetComponentRoles()
const override;
136 void* QueryInterface(
int aRole)
override;
138 bool ProcessInput(UtInput& aInput)
override;
139 bool Initialize(
double aSimTime)
override;
143 void TurnOn(
double aSimTime,
Router* aRouterPtr);
147 int GetPriority()
const override;
149 std::vector<Address> Routing(
double aSimTime,
150 const Address& aSendingInterface,
157 bool Receive(
double aSimTime,
const Address& aReceivingInterface,
wsf::comm::Message& aMessage,
bool& aOverrideForward)
override;
161 void MessageReceived(
double aSimTime,
163 const Address& aReceivingInterface,
165 void RequestReceived(
double aSimTime,
167 const Address& aReceivingInterface,
169 void ResponseReceived(
double aSimTime,
171 const Address& aReceivingInterface,
174 Message GenerateResponse(
double aSimTime,
const Address& aSrcAddr,
bool aFullTable)
const;
175 Message GenerateFullTableResponse(
double aSimTime,
const Address& aSrcAddr)
const;
178 void SendUpdate(
double aSimTime,
bool aTriggered);
179 void SendExpiredNotification(
double aSimTime,
const IPv4& route)
const;
180 void SendRIPMessage(
double aSimTime,
const Address& aSource,
const Address& aDest,
const Message& aResponse)
const;
181 std::uint64_t GetCost(
const IPv4& aAddress)
const;
182 bool HasUpdates()
const;
183 void ScheduleEvent(std::unique_ptr<WsfEvent> aEvent)
const;
184 double GetRandomValue(
double min,
double max)
const;
187 double mUpdateTimeOut{30.0};
188 double mInvalidationTimeout{180.0};
189 double mGarbageCollectionTimeOut{120.0};
190 bool mPoisonedReverse{
true};
194 IPv4 subnetMask{255, 255, 255, 0};
196 std::uint64_t metric{router::rip::cINFINITY};
197 double lastSeen{0.0};
198 bool staticRoute{
false};
204 std::map<IPv4, IPEntry> mTable{};
205 double mLastTimeOut{std::numeric_limits<double>::max()};
206 bool mTriggeredUpdatedPending{
false};
207 std::shared_ptr<int> mContext{
nullptr};
210 UtCallbackHolder mCallbacks{};
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfComponent.hpp:39
Definition WsfCommAddress.hpp:57
Definition WsfCommMessage.hpp:51
Definition WsfCommGraph.hpp:150
ProtocolInterface()=default
Definition WsfCommRouter.hpp:60
Definition WsfCommRouter.hpp:55
Definition WsfCommProtocolRIPv2.hpp:35
constexpr IPv4(std::uint32_t aVal) noexcept
Definition WsfCommProtocolRIPv2.hpp:44
constexpr IPv4() noexcept=default
std::string to_string() const
Definition WsfCommProtocolRIPv2.hpp:52
constexpr bool operator>(const IPv4 &rhs) const noexcept
Definition WsfCommProtocolRIPv2.hpp:72
bool operator==(const IPv4 &rhs) const noexcept
Definition WsfCommProtocolRIPv2.hpp:66
constexpr std::uint32_t to_uint32() const noexcept
Definition WsfCommProtocolRIPv2.hpp:60
constexpr bool operator<(const IPv4 &rhs) const noexcept
Definition WsfCommProtocolRIPv2.hpp:70
bool operator!=(const IPv4 &rhs) const noexcept
Definition WsfCommProtocolRIPv2.hpp:68
RIPv2 & operator=(RIPv2 &&)=default
static constexpr const char * cRIP_MESSAGE
Definition WsfCommProtocolRIPv2.hpp:126
~RIPv2() override=default
RIPv2 * Clone() const override
Definition WsfCommProtocolRIPv2.hpp:141
graph::Graph * GetGraph() const override
Definition WsfCommProtocolRIPv2.hpp:146
static constexpr const char * cRIP_DATAGRAM
Definition WsfCommProtocolRIPv2.hpp:125
bool ShouldPropagateTruth() const override
Definition WsfCommProtocolRIPv2.hpp:145
WsfComponent * CloneComponent() const override
Definition WsfCommProtocolRIPv2.hpp:134
Template specialization for wsf::comm::Address. Allows usage of Address in std::unordered_map/set.
Definition WsfCommAddress.hpp:185
Definition WsfCommProtocolRIPv2.cpp:34
constexpr IPv4 operator&(const IPv4 &lhs, const IPv4 &rhs) noexcept
Definition WsfCommProtocolRIPv2.hpp:83
Message CreateFullTableRequest()
Definition WsfCommProtocolRIPv2.cpp:62
std::ostream & operator<<(std::ostream &out, const IPv4 &ip)
Definition WsfCommProtocolRIPv2.cpp:39
bool isFullTableRequest(const Message &aMsg)
Definition WsfCommProtocolRIPv2.cpp:72
std::istream & operator>>(std::istream &in, IPv4 &ip)
Definition WsfCommProtocolRIPv2.cpp:45
Command
Definition WsfCommProtocolRIPv2.hpp:106
@ Request
Definition WsfCommProtocolRIPv2.hpp:107
@ Response
Definition WsfCommProtocolRIPv2.hpp:108
constexpr IPv4 cRIP_MULTICAST_ADDR
Definition WsfCommProtocolRIPv2.hpp:93
constexpr IPv4 operator|(const IPv4 &lhs, const IPv4 &rhs) noexcept
Definition WsfCommProtocolRIPv2.hpp:78
constexpr size_t cINFINITY
Definition WsfCommProtocolRIPv2.hpp:92
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 WsfCommAddress.hpp:35
Definition WsfCommProtocolRIPv2.hpp:96
std::uint16_t routeTag
Definition WsfCommProtocolRIPv2.hpp:98
std::uint32_t subnetMask
Definition WsfCommProtocolRIPv2.hpp:100
std::uint16_t addressFamilyIdentifier
Definition WsfCommProtocolRIPv2.hpp:97
std::uint64_t metric
Definition WsfCommProtocolRIPv2.hpp:102
std::uint32_t address
Definition WsfCommProtocolRIPv2.hpp:99
std::uint32_t nextHop
Definition WsfCommProtocolRIPv2.hpp:101
Definition WsfCommProtocolRIPv2.hpp:112
Command command
Definition WsfCommProtocolRIPv2.hpp:113
std::vector< Entry > entries
Definition WsfCommProtocolRIPv2.hpp:116
std::uint16_t mustBeZero
Definition WsfCommProtocolRIPv2.hpp:115
std::uint8_t version
Definition WsfCommProtocolRIPv2.hpp:114