Kea 1.5.0
communication_state.h
Go to the documentation of this file.
1// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#ifndef HA_COMMUNICATION_STATE_H
8#define HA_COMMUNICATION_STATE_H
9
10#include <ha_config.h>
11#include <ha_service_states.h>
13#include <asiolink/io_service.h>
14#include <dhcp/pkt.h>
15#include <boost/date_time/posix_time/posix_time.hpp>
16#include <boost/function.hpp>
17#include <boost/shared_ptr.hpp>
18#include <map>
19#include <set>
20#include <string>
21
22namespace isc {
23namespace ha {
24
75public:
76
82 const HAConfigPtr& config);
83
87 virtual ~CommunicationState();
88
92 int getPartnerState() const {
93 return (partner_state_);
94 }
95
101 void setPartnerState(const std::string& state);
102
108 void startHeartbeat(const long interval,
109 const boost::function<void()>& heartbeat_impl);
110
111protected:
112
118 void startHeartbeatInternal(const long interval = 0,
119 const boost::function<void()>& heartbeat_impl = 0);
120
121public:
122
124 void stopHeartbeat();
125
129 bool isHeartbeatRunning() const {
130 return (static_cast<bool>(timer_));
131 }
132
138 void poke();
139
143 int64_t getDurationInMillisecs() const;
144
153 bool isCommunicationInterrupted() const;
154
186 virtual void analyzeMessage(const boost::shared_ptr<dhcp::Pkt>& message) = 0;
187
202 virtual bool failureDetected() const = 0;
203
204protected:
205
217 virtual void clearUnackedClients() = 0;
218
219public:
220
243 bool clockSkewShouldWarn();
244
261 bool clockSkewShouldTerminate() const;
262
263protected:
264
271 bool isClockSkewGreater(const long seconds) const;
272
273public:
274
284 void setPartnerTime(const std::string& time_text);
285
287 std::string logFormatClockSkew() const;
288
289protected:
290
293
296
299
302
304 boost::posix_time::ptime poke_time_;
305
307 boost::function<void()> heartbeat_impl_;
308
313
315 boost::posix_time::time_duration clock_skew_;
316
319 boost::posix_time::ptime last_clock_skew_warn_;
320};
321
323typedef boost::shared_ptr<CommunicationState> CommunicationStatePtr;
324
325
332public:
333
339 const HAConfigPtr& config);
340
355 virtual void analyzeMessage(const boost::shared_ptr<dhcp::Pkt>& message);
356
362 virtual bool failureDetected() const;
363
364protected:
365
370 virtual void clearUnackedClients();
371
378 std::multimap<std::vector<uint8_t>, std::vector<uint8_t> > unacked_clients_;
379};
380
382typedef boost::shared_ptr<CommunicationState4> CommunicationState4Ptr;
383
390public:
391
397 const HAConfigPtr& config);
398
407 virtual void analyzeMessage(const boost::shared_ptr<dhcp::Pkt>& message);
408
414 virtual bool failureDetected() const;
415
416protected:
417
422 virtual void clearUnackedClients();
423
428 std::set<std::vector<uint8_t> > unacked_clients_;
429};
430
432typedef boost::shared_ptr<CommunicationState6> CommunicationState6Ptr;
433
434} // end of namespace isc::ha
435} // end of namespace isc
436
437#endif
Holds communication state between DHCPv4 servers.
virtual void clearUnackedClients()
Removes information about clients which the partner server failed to respond to.
std::multimap< std::vector< uint8_t >, std::vector< uint8_t > > unacked_clients_
Holds information about the clients which the partner server failed to respond to.
virtual void analyzeMessage(const boost::shared_ptr< dhcp::Pkt > &message)
Checks if the DHCPv4 message appears to be unanswered.
virtual bool failureDetected() const
Checks if the partner failure has been detected based on the DHCP traffic analysis.
Holds communication state between DHCPv6 servers.
virtual void analyzeMessage(const boost::shared_ptr< dhcp::Pkt > &message)
Checks if the DHCPv6 message appears to be unanswered.
std::set< std::vector< uint8_t > > unacked_clients_
Holds information about the clients which the partner server failed to respond to.
virtual bool failureDetected() const
Checks if the partner failure has been detected based on the DHCP traffic analysis.
virtual void clearUnackedClients()
Removes information about clients which the partner server failed to respond to.
Holds communication state between the two HA peers.
void startHeartbeatInternal(const long interval=0, const boost::function< void()> &heartbeat_impl=0)
Starts recurring heartbeat.
bool isCommunicationInterrupted() const
Checks if communication with the partner is interrupted.
boost::function< void()> heartbeat_impl_
Pointer to the function providing heartbeat implementation.
int getPartnerState() const
Returns last known state of the partner.
bool clockSkewShouldWarn()
Indicates whether the HA service should issue a warning about high clock skew between the active serv...
std::string logFormatClockSkew() const
Returns current clock skew value in the logger friendly format.
void setPartnerState(const std::string &state)
Sets partner state.
virtual ~CommunicationState()
Destructor.
HAConfigPtr config_
High availability configuration.
bool isHeartbeatRunning() const
Checks if recurring heartbeat is running.
virtual void clearUnackedClients()=0
Removes information about clients which the partner server failed to respond to.
bool isClockSkewGreater(const long seconds) const
Checks if the clock skew is greater than the specified number of seconds.
long interval_
Interval specified for the heartbeat.
void stopHeartbeat()
Stops recurring heartbeat.
void setPartnerTime(const std::string &time_text)
Provide partner's notion of time so the new clock skew can be calculated.
asiolink::IOServicePtr io_service_
Pointer to the common IO service instance.
virtual void analyzeMessage(const boost::shared_ptr< dhcp::Pkt > &message)=0
Checks if the DHCP message appears to be unanswered.
boost::posix_time::time_duration clock_skew_
Clock skew between the active servers.
bool clockSkewShouldTerminate() const
Indicates whether the HA service should enter "terminated" state as a result of the clock skew exceed...
boost::posix_time::ptime poke_time_
Last poke time.
int partner_state_
Last known state of the partner server.
boost::posix_time::ptime last_clock_skew_warn_
Holds a time when last warning about too high clock skew was issued.
void startHeartbeat(const long interval, const boost::function< void()> &heartbeat_impl)
Starts recurring heartbeat (public interface).
int64_t getDurationInMillisecs() const
Returns duration between the poke time and current time.
virtual bool failureDetected() const =0
Checks if the partner failure has been detected based on the DHCP traffic analysis.
asiolink::IntervalTimerPtr timer_
Interval timer triggering heartbeat commands.
void poke()
Pokes the communication state.
boost::shared_ptr< CommunicationState > CommunicationStatePtr
Type of the pointer to the CommunicationState object.
boost::shared_ptr< CommunicationState4 > CommunicationState4Ptr
Pointer to the CommunicationState4 object.
boost::shared_ptr< HAConfig > HAConfigPtr
Pointer to the High Availability configuration structure.
Definition: ha_config.h:509
boost::shared_ptr< CommunicationState6 > CommunicationState6Ptr
Pointer to the CommunicationState6 object.
Defines the logger used by the top-level component of kea-dhcp-ddns.